1. 程式人生 > >Java中的方法定義與陣列使用

Java中的方法定義與陣列使用

方法定義

方法是一個過程體一段被封裝的,可重複呼叫的程式碼塊。
方法的宣告:

public static 方法返回型別 方法名稱 ([引數型別1 變數1,引數型別2 變數2.....]){
方法程式碼塊;
[return 返回值;]
}

除void型別外,其他型別的方法必須有返回值。
當方法返回型別為void 時,可以有返回語句用來結束呼叫,也可以沒有。
有無返回值與有無形參無關。
方法過載
定義:方法過載時指在一個類中擁有方法名相同,引數不同(引數型別不同,個數不同)
方法的簽名:指的是方法名與引數,返回型別不是簽名的一部分。
在方法過載中,不能有兩個名字相同,引數型別也相同卻返回不同型別值的方法。即在進行方法過載時,要求方法的返回值一定相同。

陣列的定義與使用

1.陣列的動態初始化:

資料型別[] 陣列名稱=new 資料型別[長度];

採用動態初始化開闢陣列空間後,陣列中每個元素都會被附上該型別的預設值,並且當需要使用陣列元素時,不會報異常。

在這裡插入圖片描述
2.陣列靜態初始化:

資料型別[] 陣列名稱= new 資料型別{值,值,值....};

使用靜態初識化的陣列無預設值。
陣列的缺陷:長度固定,因此存在越界問題
Java中提供一種獲取陣列長度的方法:

陣列名稱.length

陣列在記憶體中的分配:
Java把記憶體分為棧記憶體和堆記憶體。棧記憶體儲存的只是陣列的名稱,即使用

資料型別[] 陣列名

就可以開闢棧記憶體,但只開闢棧記憶體的陣列是不可以被使用的,因為堆記憶體才是存放陣列的實體,若想使用陣列需要用new關鍵字來開闢堆記憶體,然後把堆記憶體的控制權交給想應的棧記憶體,一個堆記憶體可以被多個棧記憶體使用。
引用傳遞
引用資料型別可以發生引用傳遞,所謂引用傳遞就是指同一塊堆記憶體空間可以被不同的棧記憶體所指向。
開闢一個新的陣列空間,就是將這個新的陣列名放在棧記憶體中,為這個陣列例項賦值的過程就是將棧內的陣列名指向某塊放有資料的堆記憶體的過程。
若開闢陣列空間並賦值後,再使這個陣列例項指向null,即堆記憶體空間沒有被指向(引用)了,此時這片堆記憶體空間並沒有被立即清空,但有可能會被GC(垃圾回收站)記憶體回收。
若這片堆記憶體發生了引用傳遞,即有多個棧記憶體指向這片堆記憶體,此時若使其中一個棧記憶體指向null,這片堆記憶體並不會存在被回收的風險,因為這片堆記憶體還有棧記憶體指向。
指向同一片堆記憶體的棧記憶體都可以訪問、更改、刪除這片堆記憶體空間。

陣列與方法的相互操作:
1.方法接收陣列
最好對引數進行判斷,以免出現空指標異常(null呼叫屬性或方法),增強程式的健壯性。

public static char[] printArray(char[] data){
	if(data==null){
	return {};
	}
	for(int i=0;i<data.length;i++){
		
		System.out.println(data[i]);
		
	}
	return data;
}

2.方法返回陣列

public static int[] init(){
	return new int[]{1,2,3,4};//匿名陣列
	
}

Java對陣列的支援只要是基本資料型別的陣列,sort 方法都可以對其進行排序
陣列排序:

java.util.Arrays.sort(陣列名稱);

陣列拷貝:

System.arraycopy(源陣列名稱,源陣列開始點,目標陣列名稱,目標陣列開始點,拷貝長度);

物件陣列
物件陣列動態初始化:

類名稱[] 物件陣列名稱 = new 類名稱[長度];

物件陣列靜態初識化:

類名稱[] 物件陣列名稱 = new 物件名稱[]{
new 物件名稱(值),
new 物件名稱(值)
....
};
}

foreach語句

for(資料型別 變數名:陣列名){
//迴圈體
}
String langusges[] = new String[]{"漢語","德語","法語","英語"};
	for(String lang:langusges){
		
		System.out.println(lang);
	}

使用foreach語句迴圈時,泵通過迴圈變數改變陣列或集合元素的值。