天天看點

JavaSE02_面向對象02_類的五大成員之方法類的成員之二:方法

類的成員之二:方法

1.方法的聲明

  1. 方法聲明的位置

    類中方法外

  2. 方法的聲明格式
[權限修飾符]  [修飾符] 傳回值類型  方法名([形參清單]){
//方法體:實作功能的語句
}
           

2.方法參數的值傳遞機制

形參是一個方法(棧幀)中的局部變量表中的變量,方法在執行的時候,是通過這些局部變量來做運算的,是以值傳遞就是指 在調用方法的時候,将實際參數傳遞給局部變量;

(1)基本資料類型形參:實參給形參傳的是“資料值”,形參值的修改不會影響實參

(2)引用資料類型形參:實參給形參傳的是“位址值”,形參對象的屬性值修改會影響實參對象的屬性值。

public class TestPassValue{
	public static void main(String[] args){
		int a = 10;
		
		System.out.println("修改之前a = " + a);//10
		
		//a是實參
		change(a);
		
		System.out.println("修改之後a = " + a);//10
	}
	
	//方法的功能:修改一個變量的值,為它原來的兩倍
	//修飾符:public static,和main在同一個類中,為了在main()中直接調用,這裡加上public static 
	//int num是形參
	public static void change(int num){
		System.out.println("修改之前num = " + num);//10
		
		num *=  2;
		
		System.out.println("修改之後num = " + num);//20
	}
}
           
修改之前a = 10
修改之前num = 10
修改之後num = 20
修改之後a = 10
           
JavaSE02_面向對象02_類的五大成員之方法類的成員之二:方法

方法重載(Overload)

方法的重載:在同一個類中,出現的多個方法名稱相同,參數清單不同的情形稱為方法重載。

(1)在同一個類中多個方法
(2)方法名稱必須相同
(3)參數清單必須不同(參數的個數或資料類型不同)
注意:隻和方法名和參數清單有關,與其他的都無關
           

指令行參數

指令行參數:給main方法傳遞的參數

該方法接收一個String類型的數組參數,該數組中儲存執行java指令時傳遞給所運作的類的參數。

JavaSE02_面向對象02_類的五大成員之方法類的成員之二:方法
  • main()為什麼是public static 的??
1.java虛拟機需要調用類的main()方法,是以該方法的通路權限必須是public
2.java虛拟機在執行main()方法時不必建立對象,是以該方法必須是static的
           

傳參格式:

java main方法所在類名 參數清單

java TestCommandParam chai lin yan

可變參數

1、如何聲明

資料類型… 可變參數名

要求:

(1)一個方法隻能有一個可變參數

(2)可變參數的位置一定是最後一個

2、如何使用它

(1)在聲明它的方法中,把它當做數組使用

(2)在調用含可變參數的方法

A:非可變參數的部分,實參的類型,個數,順序與形參仍然要一一對應

B:可變參數的部分,實參的類型要與形參一緻或相容,個數可以是0~n個

C:可變參數的部分,實參還可以是對應類型的數組

public class VarParams{
	public static void main(String[] args){
		System.out.println("3或5的最大值是:" + getMax(3,5));//實參是3和5,  3給了num, 5給了args
		System.out.println("3,5,1,7,9的最大值是:" + getMax(3,5,1,7,9));//3,5,1,7,9是實參,  3給了num,5,1,7,9給了args
		System.out.println("3的最大值是:" + getMax(3));//3是實參, 3給了num,args沒有對應的實參
		//System.out.println("3的最大值是:" + getMax());//編譯不通過
		
		int[] array = {4,5,6,7};
		System.out.println("3和{4,5,6,7}的最大值是:" + getMax(3,array));//3給了num,array給了args
	}
	
	//方法的功能:可以求1~n個整數中的最大值	
	public static int getMax(int num, int... args){
		//args是數組,等價于int[]
		//先假設num最大,然後與args中的元素一一比較,如果有比它大的,就修改結果
		int max = num;
		
		for(int i=0; i<args.length; i++){
			if(args[i] > max){
				max = args[i];
			}
		}
		
		return max;
	}
	
}
           

3、陷阱:

(1) 這兩個方法不是重載方法,編譯器認為是同一個。因為在getSum方法中,它倆都是按照數組處理的。

public static int getSum(int[] array){
		int sum=0;
		for(int i=0;i<array.length;i++){
			sum+=array[i];
		}
		return sum;
	}
	public static int getSum(int... nums){
		int sum=0;
		//編譯器把nums編譯成int[]
		for(int i=0;i<nums.length;i++){
			sum+=nums[i];
		}
		return sum;
	}
           

但是它倆在方法調用時是不一樣的。上面的方法調用時,必須傳遞一個int[]的實參數組,而下面的方法,可以傳遞一個int[]的實參數組,也可以傳0~n個整數值。

(2)這兩個方法是重載,但是沒法用

public static void main(String[] args) {
		System.out.println(getSum(1,2,3,6,7));
		System.out.println(getSum(1,2,3));
	}
	public static int getSum(int... nums){
		return 0;
	}
	public static int getSum(int a,int... nums){
		return 0;
	}