一、方法,Method,函數,function
public class MethodTest01 { //定義一個方法,該方法完成兩個int類型數據的求和 public static void sum(int a,int b){ int c = a+b; System.out.println(a+"+"+b+"="+c); } public static void main(String[] args){ //調用方法:類名.方法名 MethodTest01.sum(66,88); MethodTest01.sum(13,14); } }
二、
方法如何定義,語法:
[修飾符列表] 返回類型類型 方法名(形式參數列表){
方法體;//由加吧語句構成}
1、目前階段所有方法的修飾符列表統一寫成:public static
2、返回值類型可以是java中任何一種數據類型
3、如果該方法執行結束之后沒有任何返回值,那么返回值數據類型必須寫成void
4、如果方法的返回值類型不是void,而是其他的數據類型,那么在方法體中必須保證有rerurn值
5、注意:如果return語句一旦執行,則標識該方法結束,所以return語句下面不能再編寫其他的java語句
6、方法名只要是合法的標識符即可
7、方法的形式參數列表參數的個數可以是0個,也可以是1個,還可以是多個,如果是多個的話必須使用逗號隔開
8、方法的形式參數列表中起決定性作用的是參數的類型,而不是變量名
9、所有帶有static關鍵字的方法被調用時,都采用類名稱.方法名(實際參數列標配)
package com.company.Mothod; /** * @Created by IntelliJ IDEA. * @Author tk * @Date 2019/7/29 * @Time 17:11 */ public class MethodTest01 { //返回值類型為int類型 public static int sumInt(int a ,int b){ return a+b; } //形式參數定義的是布爾類型,返回值內沒有false,程序會報錯 public static int method1(boolean flag){ if(flag){ return 1; } } //形式參數為布爾類型,返回值的True和false都必須有返回,否則會報錯 public static int method2(boolean flag){ if(flag){ return 1; }else{ return 0; } } //return返回以后不能運行Java語句 public static int method3(boolean flag){ if(flag){ return 1; System.out.println("hello"); }else{ return 0; } System.out.println("hello world!"); } public static void main(String[] args){ MethodTest01.sum(13,14); //一般情況下有返回值就應該接收 int retValue =MethodTest01.sumInt(1,2); System.out.println(retValue); int retMethod = MethodTest01.method2(true); System.out.println(retMethod); } }
/* 單獨使用return; return;語句只能出現在方法的返回值類型時void的方法中,用來終止該方法的執行 */ public static void method4(){ for(int i=1;i<=10;i++){ if (i==5){ //break; return;//返回類型void時,一旦遇到return,就會終止后面其他語句的執行 } System.out.println(i); } System.out.println("hello Word!"); }
=====執行結果=====
使用break時,會打印1,2,3,4,5,hello Word!
使用return時,會打印1,2,3,4,5 不會打印hello Word
對比后發現執行return后,后面的語句會被截斷,也就是不會在被執行
1)方法中,實際參數的值會按照順序賦值給形式參數
public class Method002 { //實際參數會按照順序賦值給形式參數,並且是一一對應的 public static void method1(int x,int y){ int z = x+y; System.out.println("z:"+z); } public static void main(String[] args){ int i=6; int j=7; method1(i,j); //i賦值給x,j賦值給y } }
三、類
1、一個.java源文件中可以有多個class的聲明
2、並且一個class聲明會對應一個class文件
3、public class類名,必須和源文件名保持一致(包括大小寫)
4、public類可以沒有,要是有的話只能有一個
public class Lei { public static void main(String[] args){ System.out.println("public類!"); } } class A{ public static void main(String[] args){ System.out.println("A類!"); } } class B{ public static void main(String[] args){ System.out.println("B類!"); } }
三、同一個類中的方法被調用,直接用方法名();不同類中的方法被調用,用類名.方法名()
package com.company.Mothod; /** * @Created by IntelliJ IDEA. * @Author tk * @Date 2019/7/31 * @Time 14:57 */ public class MethodTest02 { /* 同一個類,方法調用可以直接用方法名 不同的類調用,必須用類名.方法名() */ public static void m1(){ System.out.println("MethodTest02類中的m1方法被調用"); } public static void main(String[] args){ m1(); A.m2(); } } class A{ public static void m2(){ System.out.println("A類的m2方法被調用"); } }
四、
如果方法只是定義,沒有被調用,不會給該方法分分配內存
方法被調用的時候,會在JVM中為該方法分配內存(此時發生的是壓棧動作)
當方法結束后,該方法分配的內存就會釋放(此時發生的是彈棧動作)
public class MethodTest03 { public static void main(String[] args){ MethodTest03.m1(100); } public static void m1(int i){ MethodTest03.m2(i); } public static void m2(int k){ MethodTest03.m3(k); } public static void m3(int m){ System.out.println(m); } }
五、局部變量
變量的四種屬性:數據類型,變量名,變量值,空間大小
定義在方法外的變量叫:成員變量
定義在方法內的形式參數和方法語句內的變量叫:局部變量
-----局部變量脫離了大括號以后不起作用-------
public class MethodTest04 { public static void main(String[] args){ int i =10; add(i); System.out.println("main -----> "+ i); } public static void add(int i){ i++; System.out.println("add -----> "+ i); } } 程序執行到add(i)時,先進行壓棧,待add方法執行完以后進行彈棧,即:jvm分配的內存釋放 main方法在繼續執行,執行到 System.out.println("main -----> "+ i);打印的就是int=10; 所以得出:局部變量脫離了大括號以后,作用范圍也就失效了
六、方法重載
使用前提:幾個方法實現的功能是類似的
方法重載發生的條件
1、方法在同一個類里面
2、方法名相同,參數列表不同(個數,順序,類型)
3、方法重載和方法的修飾符列表無關
4、方法重載和方法的返回值類型無關
/* 1、功能相同 2、方法名相同但是形式參數個數,類型,順序不同 3、和修飾符沒有關系,和返回的數據類型沒有關系 */ public class MethodTest05 { public static void main(String[] args){ int sum1 = m1(2,3); System.out.println("sum1---> "+sum1); float sum2 = m1(1.1f,1.2f,1.3f); System.out.println("sum2---> "+sum2); long sum3 = m1(3,4); System.out.println("sum3---> "+sum3); } public static int m1(int v1,int v2 ){ return v1+v2; } public static float m1(float v1,float v2,float v3){ return v1+v2+v3; } public static long m1(long v1,long v2){ return v1+v2; } }
/* 方法重載: 1、各個方法的功能是相同的,可以用方法重載 2、方法重載的方法名是相同的,取決於形式參數的個數、順序、類型(也就是說,在調用方法的時候,是根據傳入的實際參數的順序,類型和數量來判斷調用哪個方法) 3、方法重載和修飾符,返回類型沒有關系 */ public class Method003 { //需求:完成不同類型的運算 public static void main(String[] args){ sun(2,3); sun(1.2,1.3); sun(3.6,3.7); } public static int sun(int a,int b){ int c = a+b; System.out.println("c= "+c); return c; } public static int sun(float a,float b){ float c = a+b; System.out.println("c= "+c); return 0;//方法是什么類型就返回什么類型 } public static double sun(double a,double b){ double c = a+b; System.out.println("c= "+c); return c; } }