五、JAVA中類的探究-類變量的初始化時機

一、類變量的初始化時機

(1)

JAVA的類不同於C++的類 能在類裏執行main函數就是讓我驚奇的一點

JAVA程序可以在這兩個地方對類變量執行初始化:

定義類變量時指定初始值

靜態初始化快中對類變量指定初始值



代碼如下

public class StaticInitTest
{
	static int count = 2;
	static
	{
		System.out.print("StaticInitTest的靜態初始化塊:");
		name = "JAVA編程";
	}

	static String name = "crazy JAVA";

	public static void main(String[] args)
	{
		System.out.println("count類變量的值:" + StaticInitTest.count);
		System.out.println("name類變量的值:" + StaticInitTest.name);
	}

}

運行結果

StaticInitTest的靜態初始化塊:count類變量的值:2
name類變量的值:crazy JAVA


學習心得

針對name類:先賦值爲”JAVA編程“ 再賦值爲”瘋狂JAVA講義“ 

但運行程序一次 只初始化一次

——————————

百度知道上對於我的疑問的解釋:

java屬於邊解釋邊執行的語言,java編譯的結果是class文件,並能直接在機器上運行,而是又java虛擬機代理的,java虛擬機在解釋時是先遍歷class文件的,把class文件中所涉及到的類都會遍歷到,直接加載到內存中


(2)

代碼如下

class Price
{
	final static Price INSTANCE = new Price(2.8);
	static double initPrice = 20;
	double currentPrice;

	public Price(double discount)
	{
		currentPrice = initPrice - discount;

	}

	public static void main(String[] args)
	{
		System.out.println("通過Price的INSTANCE訪問currentPrice實例變量:"
				+ Price.INSTANCE.currentPrice);
		Price P = new Price(3.5);
		System.out.println("通過顯示創建的Price實例P訪問currentPrice實例變量:"
				+ P.currentPrice);
	}

}


運行結果

通過Price的INSTANCE訪問currentPrice實例變量:-2.8
通過顯示創建的Price實例P訪問currentPrice實例變量:16.5


學習心得

對INSTANCE賦值時調用Price(2.8) 創建Price實例

此事立即執行currentPrice賦值 initPrice類變量的值=0

故currentPrice=0-2.8=2.8 程序再將initPrice賦爲20


當Price類初始化完成後 INSTANCE類變量引用到一個currentPrice爲-2.8的Price實例

此時initPrice=20.0

————————————

final方法
將方法聲明爲final,那就說明你已經知道這個方法提供的功能已經滿足你要求,不需要進行擴展,並且也不允許任何從此類繼承的類來覆寫這個方法,但是繼承仍然可以繼承這個方法,也就是說可以直接使用。另外有一種被稱爲inline的機制,它會使你在調用final方法時,直接將方法主體插入到調用處,而不是進行例行的方法調用,例如保存斷點,壓棧等,這樣可能會使你的程序效率有所提高,然而當你的方法主體非常龐大時,或你在多處調用此方法,那麼你的調用主體代碼便會迅速膨脹,可能反而會影響效率,所以你要慎用final進行方法定義。


final類
當你將final用於類身上時,你就需要仔細考慮,因爲一個final類是無法被任何人繼承的,那也就意味着此類在一個繼承樹中是一個葉子類,並且此類的設計已被認爲很完美而不需要進行修改或擴展。對於final類中的成員,你可以定義其爲final,也可以不是final。而對於方法,由於所屬類爲final的關係,自然也就成了final型的。你也可以明確的給final類中的方法加上一個final,但這顯然沒有意義。

發佈了227 篇原創文章 · 獲贊 26 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章