Java方法的定義和使用


如果后續我們寫的代碼越來越多,全部都放在main方法中的話,可讀性會很不好,有一些代碼也要重重復復的寫,造成代碼量很大...

所以我們可以將一些代碼抽取出來,放在自定義的方法中,在main方法中直接或間接的調用它們。

1.什么是方法?

方法是具有一定功能的代碼片段。

2.如何定義一個方法?

我們首先先看看我們最熟悉的main方法:

public static void main(String[] args) {
        
}

我們逐個來分析:

權限修飾符

public意為公有的,是一個權限修飾符。除此之外,我們還有另外三種權限修飾符:protected受保護的、private私有的、default(不寫權限修飾符的話默認為default)。權限修飾符顧名思義就是訪問的權限,不同的修飾符,訪問的權限是不一樣的。

權限修飾符用於修飾成員變量、方法、類、接口。(后續會學到這些概念)

(注意:方法中的局部變量只能使用默認的default,不能使用另外三個權限修飾符修飾)

在這里涉及到子類的概念,可暫時不管,因為我們目前只寫一個類,所以看看本類就好。

本類 同一個包下(子類和無關類) 不同包下(子類) 不同包下(無關類)
public
protected ×
default × ×
private × × ×

可以看到只要在同一個類中,被任何修飾符修飾的方法都是可以被調用的。(最后代碼驗證)

狀態修飾符static

static是靜態的意思。在這里先了解:被static修飾的變量為靜態變量,被static修飾的方法稱為靜態方法。靜態變量和靜態方法都屬於類,在靜態方法中只能直接調用靜態方法。(后續對象內容的時候會更加詳細的介紹static)

返回值

void是返回值為空的意思,即沒有要返回的數據,除了void,方法的返回值可以是基本數據類型、引用數據類型(數組、字符串、其它類、集合...)。

如何返回數據呢?

return + 對應返回值類型的要返回的數據;

void返回值為空,省略了return;

注意點:

定義了返回值則必須返回數據,且必須返回與返回值類型一樣的數據類型的數據,否則會報錯提示;
一個方法中可以有多個return語句;當碰到其中一個return語句時,就會結束該方法。(最后的代碼中有驗證)

方法名

main是方法名,如果是我們自定義的方法,就需要我們自定義的名字,但是起名最好能夠見名知意,並且要符合標識符規則,方法取名一般為小駝峰命名(第一個單詞首字母小寫,其余單詞首字母大寫),如helloWorld、printString...

參數

String []args我們已經知道是什么了,即一個String類型的參數,在這里args是形式參數,目前是沒有具體的值的。我們也可以定義自參數,參數的類型可以為基本數據類型,也可以為引用數據類型,可任意個個數,但是在調用方法的時候,必須按照參數的順序將對應的參數傳給方法。

以上我們已經分析了一個方法的框架,但是權限修飾符、狀態修飾符、參數都不是一個方法必須有的,即都是可選的。

方法定義模板:
[權限修飾符][其它修飾符] 返回值 方法名([參數...]){
	方法體(具有一定功能的代碼片段)
}

在此擴展方法的可變參數:

如果我們不確定參數的個數為多少個,必須在使用的時候才知道的話,這個時候我們就可以使用可變參數:

語法:

數據類型...變量名

!必須放在最后,且只能定義一次。(本質是一樣的,因為只能放在最后,所以1個以上肯定有的不是在最后)

3.方法的使用

當我們了解完上述定義方法后,就可以嘗試着定義使用方法了!

package com.dh.method;

public class Method02 {

    //1.
    //公有的 靜態的 返回值類型為int 方法名為add 參數為兩個int類型的數據
    public static int add(int num1,int num2){
        int c = num1 + num2;
        return c;
    }

    //!在此擴展:在方法中定義的變量叫局部變量,只在該方法中有效,所以不同方法中的局部變量是可以重名的

    //2.
    //受保護的 靜態的 返回值類型為double 方法名為sub 參數為一個int,一個double類型的數據
    protected static double sub(double num1,int num2){
        //直接返回
        return num1-num2;
    }

    //3.
    //默認的 靜態的 返回值類型為void 方法名為show 參數為一個String類型的數據
    static void show(String str){
        System.out.println(str);
        return;//可省略不寫
    }

    //4.
    //私有的 靜態的 返回值類型為boolean 方法名為flag 參數為一個boolean類型的數據
    private static boolean flag(boolean b){
        if(b == true){
            //b為true的話直接返回b,就不會繼續向下執行了
            return b;
        }
        System.out.println(b);//只有b為false才會執行到這
        return false;//不僅可以返回變量、表達式、也可返回固定的數據
    }

    //5.
    //可變參數
    public static void variableParameters(String name,int age,char sex,double...x){
        System.out.println("可變參數");
    }

    public static void main(String[] args) {

        //方法必須在main中被調用了才會執行!!!並且執行順序只與調用的順序有關,與方法的位置無關

        //因為四個方法都為static,所以可以在main中直接調用
        //static方法中只能直接調用static方法

        //調用方式:方法名+參數(參數必須數據類型、順序一一匹配)
        //有返回值的方法可以定義一個變量接收,並且可以輸出
        int addResult = add(1, 2);      //此處的1,2為實參,即實際的參數。上述方法中定義的為形式參數(相當於一個坑,這里就是實際填入這個坑的東西)
        System.out.println(addResult);

        //也可以不接收就直接輸出
        System.out.println(sub(4.5,4));

        //返回值為空的數據,不需要變量去接收,也不能放在輸出語句中
        show("Hello,World!");

        flag(true);

        //以上方法的定義和使用,驗證了四個權限修飾符都可以定義方法,並且在本類中都可以被調用

        System.out.println("===========================");
        //可變參數的驗證
        variableParameters("可變參數1",18,'男',1.1,1.2);//兩個參數
        variableParameters("可變參數2",18,'女',1.1,1.2,1.3,1.4);//四個參數
    }
}

分析運行結果:

add方法、show方法和sub方法都輸出了正確的結果;在flag方法中,因為flag為true,所以直接判斷返回了,沒有輸出false;可變參數的使用也是沒有問題的。


免責聲明!

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



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