一、方法

系統使用者999發表於2020-09-28

一、方法

方法的概念

​ 將一個功能抽取出來,放在類中的大括號中, 形成一個獨立的功能 , 當需要使用該功能時,則呼叫它, 這樣可以增強程式碼的複用性(重複利用) ,並解決程式碼的冗餘現象。

方法的語法:

​ [訪問修飾符] 返回值型別 方法名( [引數型別 引數名1 , 引數型別 引數名2 …] ){

​ 方法體

​ }

​ 詳解:

​ 訪問修飾符: 用於修飾這個方法的呼叫範文 目前預設 public static

​ 返回值型別: 無返回值就寫void 或者 方法執行後返回的結果的資料型別 ,方法執行完之後會將結果返回

​ 方法名 : 給方法取名, 準尋識別符號的規則

​ 引數型別 、引數名: 它們是同時定義 ,方法在執行時未知的資料,需要在呼叫方法時進行傳遞值。 引數型別表示 這個引數的資料型別 ,引數名就是一個引數名稱 這個引數名可以在方法體中使用。

​ 方法體: 這個方法具有的功能(程式碼塊)

    定義一個方法
    public static int add(int num1 , int num2){
    	  
    	  return num1+num2;
    
    } 

​ 根據方法的引數 不同,返回值不同,可以將方法分為四類:

1、無參無返回值方法

語法:

   public  static  void 方法名(){
       方法體 
   }

2、無參有返回值方法

​ 語法:

 public static 返回值型別  方法名 (){
     方法體
 }

在這裡插入圖片描述

在這裡插入圖片描述

結果在n中

3、有參無返回值方法

​ 語法:

public  static void 方法名(引數列表 ){
    方法體
}

情況一、 當引數中是基本資料型別 ,將實參的值賦值給 形參

在這裡插入圖片描述

public  static void add(int num){
    num++;	
    System.out.println("方法中 num 的值:"+num);

}

呼叫方法: num的改變不會改變n 的值 ,因為是兩個獨立的記憶體

int n =10;
System.out.println(n);
add(n);
System.out.println("方法外面 實參的值:"+n);

結果輸出:

​ 方法中 num 的值: 11

​ 方法外面 實參的值:10

情況二: 當引數的資料型別是引用資料型別

例如 陣列 、類

 // 方法的比對   引數是陣列
    public static  void add(int [] arr){
        arr[0]++;
        System.out.println("方法中 arr[0]="+arr[0]);
    }

呼叫:

       int [] array ={10,20};
        add(array);// 會呼叫 引數是陣列的add方法
        System.out.println("方法外面的 arr[0]="+ array[0]);

結果:

​ 方法中 arr[0]=11
​ 方法外面的 arr[0]=11

在這裡插入圖片描述

在這裡插入圖片描述

  public static void addAge(Student student){
        // 將學生的年齡 獲取 自加
       int age =  student.age;
       age++;
       //  在重新賦值
       student.age=age;

    }
    

呼叫

 Student student = new Student(); // age預設為 18
        System.out.println("方法呼叫之前: "+student.age); // 18
         addAge(student); // 傳的地址
        System.out.println("方法外面 學生的年齡:"+student.age);

結果輸出: 方法呼叫之前: 18

​ 方法外面 學生的年齡:19

  /**
         *   以上方法呼叫 的結論: 對於引數為引用資料型別,方法外面和方法內部公用同一塊記憶體,
         *       也就是說  引數再傳遞時,將引用型別的地址賦值給 方法的形參
         *                      對於基本資料型別 ,方法的引數將 值的副本賦值給形參,這樣形參的改變
         *                      不會影響實參的值
         *       原因: 引用資料型別在引數傳遞時 是地址  (JVM對於堆記憶體的大小不可控)
         *             基本資料型別在引數傳遞時 是值
         *
         */

情況三、 當引數是String型別時 ,String是引用資料型別 ,但是在引數傳遞時,是與基本型別一樣

 public static void main(String[] args) {
    // 引數是字串
        String uname ="a";
        sayHello(uname);
        System.out.println("我最後對"+uname+"sayHello");
    }
    public static void sayHello(String name){
        name="b";
        System.out.println("我對"+name+"sayHello");
    }

結果:

我對a sayHello
我最後對b sayHello

4、有參有返回值方法

語法:

  public  static 返回值型別 方法名(引數列表){
      方法體
  }

例如 :

    public static String sayHello(String name){
        name="a";
        System.out.println("我對"+name+"sayHello");
        return name ;
    }

呼叫

 public static void main(String[] args) {		
		// 引數是字串
        String uname ="b";
        // 將返回值接收  ,這是 uname 才被改變 ,如果不接受,則不改變
        uname = sayHello(uname);
        System.out.println("我最後對"+uname+"sayHello");
 }

結果:

我對a sayHello
我最後對b sayHello

	// 引數是字串
    String uname ="a";
    // 將返回值接收  ,這是 uname 才被改變 ,如果不接受,則不改變
    uname = sayHello(uname);
    System.out.println("我最後對"+uname+"sayHello");

}


結果:

我對a sayHello
我最後對a sayHello

​      2020.9.25

相關文章