Java方法 小白版

椰椰210162701037發表於2024-08-11

一、方法的定義

方法就是 將功能重複的程式碼封裝成一段獨立的程式碼,透過呼叫方法的方式 (作用)提高程式碼的複用性(減少程式碼重複)

每一個方法只能完成一個功能。

二、方法的宣告格式

[修飾符1,修飾符2] 返回值型別 方法名 (引數型別 形式引數1,引數型別 形式引數2,...){
    
    執行語句塊;
    return 返回值;

}

例:

boolean isLeapYear (int year){  //定義方法
    boolean isLeap = false;
        if(year%4==0 && year%100 != 0 || year%400 != 0){
            isLeap = true;
        }
    return isLeap;
}
public class MethodDemo01 {
    //提取一個方法,計算兩個數的和並返回
    public static int addNum(int a,int b){
        int sum = a +b;
        return sum;
    }
    //提取一個方法,計算三個數的和並列印
    public static void addNum2(int a,int b,int c){
        int sum = a +b +c;
        System.out.println(sum);
    }
    public static void main(String[] args) {
        //呼叫方法1,計算1+2的和
        int sum1 = addNum(1,2);
        System.out.println(sum1);

        //呼叫方法1,計算3+4的和
        System.out.println(addNum(3,4));

        //呼叫方法,計算5+6+7的和並列印
        addNum2(5,6,7);
    }
}
  • 返回值型別:方法輸出資料的型別(如果方法沒有返回值,則用關鍵字void來表示)
  • 方法名:類似變數名,可以自定義方法名(需符合Java識別符號規則)
  • 形式引數:變數(用於儲存呼叫方法輸入的資料)
  • 實際引數:呼叫方法輸入的資料。
  • 返回值:呼叫方法返回的資料。

三、方法的呼叫

int year= 2020;
boolean leapYear =isLeapYear(year); //呼叫方法
if(leapYear){
    System.out.println(year +"是閏年!")
}
year = 2052;
leapYear =isLeapYear(year);//呼叫方法
if(leapYear){
    System.out.println(year +"是閏年!")
}

四、特殊方法:程式入口main方法

main方法是一個特殊方法,它是Java程式的入口方法,執行Java程式時,JVM會呼叫main方法。

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

五、方法的區域性變數

區域性變數是指在方法中宣告的變數,其作用範圍僅限於方法中

區域性變數使用前必須進行初始化。(定義在main方法中的變數也是區域性變數)

boolean isLeapYear (int year){
    boolean isLeap = false;//宣告瞭一個區域性變數並進行初始化
        if(year%4==0 && year%100 != 0 || year%400 != 0){
            isLeap = true;
        }
    return isLeap;
}
public classA{
    public static void main (String[]args){
    int i =6; //整數(實參,區域性變數)
    int [] array = {1,2,3}; //陣列(實參,區域性變數,傳陣列的地址)
    test(i,array);
    System.out.println(i+""+array[0]);
    }
    public static void test(int i,int []array){  //形參
        i += 3;
        array[0] += 3;
    }
}
//輸出結果:6 4

六、類的靜態變數

靜態變數(也稱為類變數)是使用static關鍵字宣告的變數,這些變數屬於類本身,而不是類的任何特定例項(靜態變數在使用前無需初始化。)

public class HellWorld{
    public static boolean isLeap;//全域性變數(預設自動化)
    
    public static void method01(){ //
        isLeap = true;//共享全域性變數
    }
    public static void method02(){
        isLeap = true;//共享全域性變數
    }
}

七、類的靜態方法

靜態方法是使用static關鍵字定義的方法,靜態方法可以訪問類的靜態變數和靜態方法,但不能訪問類的例項方法和例項變數。

八、方法的傳參

1.實參和形參

實參:呼叫方法輸入的變數或常量值

形參:方法中定義的資料型別變數。

2.值傳遞

實參將資料傳遞給形參時,形參的改變改變不影響原實參的值,即值傳遞只會改變形參,不會改變實參。(基本資料型別)

3.引用傳遞

引用傳遞:是指在呼叫函式時,將實際引數的地址傳遞給函式,這樣在函式中對引數的修改,將影響到實際引數。(引用資料型別)

引用資料傳遞的不是真正的資料地址,是引用的堆記憶體中的地址,無論引用傳遞的資料怎麼改變,它也只是引用的堆記憶體中的地址,原資料組的資料地址並沒有被改變,改變那部分的值只是形參複製給實參使用的的地址,並不是把原地址改變。

4.總結

  1. 在Java中,引數傳參本質上只存在值傳遞。

  2. 值傳遞時,形參改變並不會影響到實參。

在函式中,只有修改了實參所指向的物件內容,也就是引用堆記憶體中的地址,才會影響到實參

public classA{
    public static void main (String[]args){
    int i =6; //整數(實參,區域性變數)
    int [] array = {1,2,3}; //陣列(實參,區域性變數,傳陣列的地址)
    test(i,array);
    System.out.println(i+""+array[0]);
    }
    public static void test(int i,int []array){//形參
        i += 3;
        array[0] += 3;
    }
}
//輸出結果:6 4

九、方法的過載

方法的過載指的是在同一個類中,有一個以上的同名方法,但方法的引數個數或引數型別有所不同(與方法的返回值無關)

方法過載是對於 一個類。

 public static int addNum(int a,int b){
        int sum = a +b;
        return sum;
    }
    //提取一個方法,計算三個數的和並列印
 public static int addNum2(int a,int b,int c){
        int sum = a +b +c;
        return sum;
    }

例如,以下都屬於方法的過載

void show (int a,char b,double c);

void show (int a,double b,char c);

void show (int a,int b);

void show (int a);

double show(int a,char b,double c);

十、Java記憶體劃分

相關文章