Java學習筆記---類與對象(2)

final實例域

可以將實例域定義爲final,構建對象時必須對它進行初始化,並且在後面的操作中,不能夠對它進行修改。

靜態域

如果將域定義爲static ,每個類只有一個這樣的域,而每一個對象對於所有的實例域卻都將有自己的一份拷貝,例如:假定給每一個僱員設定一個唯一的標識碼nextId,這裏給每一個僱員添加一個實例域id和靜態域nextId,,現在每一個僱員對象都有自己的id域,但是這些僱員對象卻共享一個nextId域。也就是說,如果有1000個僱員對象,那麼就有1000個僱員id,但是隻有一個靜態域nextId。即使沒有一個僱員對象,靜態域nextId,依然存在。它屬於類,而不屬於任何獨立的對象。

public class Employee {
	private static int nexdId = 1;
	private int id;
}
靜態常量

靜態變量使用的比較少,但是靜態常量使用的比較多,例如:Math類中的

public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;

另外一個使用多次的system.out,在system類中聲明,

public static final PrintStream out = null;

這也突然使我意識到一個問題,就是如果一個類中有靜態變量,可以直接使用 類.靜態變量 的方法去調用它,我覺得是不是因爲,這是static的他是屬於類的,不屬於對象。

靜態方法

靜態方法是一種不能向對象實施操作的方法,例如Math類中的pow方法,在運算時不使用任何的Math對象,也就是說,沒有隱式的參數。
Employee類的靜態方法是沒有任何this參數的方法,Employee不能訪問自身類的實例域,因爲它不能操作對象,但是可以訪問靜態域,

public static int getNextId() {
		return nexdId;
	}

可以通過類名來調用這個方法,當然也可以使用對象來調用這個方法,但是這個方法與該對象沒有任何的關係,所以,建議使用類名調用該方法。

工廠方法
方法參數

其他程序設計語言將參數傳遞給方法有2種方法,按值調用,按引用調用。在Java中總是按值調用。方法參數有2種類型,①基本數據類型;②對象引用。當對象引用時,可以改變將一個基本數據的值發生改變,例如:

public static void tripValue(Employee e) {
		e.salary = e.salary * 3;
	}

當調用這個方法是slary的值將會×3,實現一個改變對象數據參數狀態的方法並不是一件難事。方法得到的是對象的拷貝,對象引用以及其他都將引用同一個對象。這看似好像是按引用調用,實際上還是按值調用的,下面看一個例子:

public static void swap(Employee a , Employee b) {
		Employee temp = a;
		a = b;
		b = temp;
	}

這是一個交換的函數,如果是按引用調用的,那麼對象a,b 的值將會交換,但實際上並沒有交換。

public static void main(String[] agrs) {
		Employee a = new Employee("ab" , 100);
		Employee b = new Employee("cd" , 200);
		swap(a , b);
		System.out.println(a.getName() + "\n" + a.getSalary());
	}

在這裏插入圖片描述
實際上,對象引用是按值傳遞的。
Java中的方法參數使用情況:
①一個方法不能修改一個基本數據類型的參數;
②一個方法可以改變一個對象參數的狀態;
③一個方法不能讓對象參數引用一個新的對象

對象構造
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章