【Java方法的聲明和使用003】


一、方法,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;

    }
}

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM