1. 程式人生 > >Java學習第七天

Java學習第七天


類成員(static成員):

當使用例項來訪問類成員時,系統底層依然是委託該類來訪問類成員。因此,即便該類例項為null,她依然可以訪問所屬類的類成員。

例如:

package lesson5;
class L5 
{
	public static void main(String[] args) 
	{
		Person p = new Person();

		System.out.println(p.eyenum);
		System.out.println(p.age);

		p = null;
		System.out.println(p.eyenum);//靜態成員,即便p=null,仍然可以訪問。因為實際是通過類訪問的。
		//System.out.println(p.age);//出錯。因為age為例項成員,此時因為為null,無法通過引用訪問到物件了。

	}
}

class Person
{
	static int eyenum = 2 ;//類屬性static
	int age = 100;//例項成員

}

單例模式(Singleton),主要通過靜態變數、靜態方法和private構造方法完成。例如:

package lesson5;
class L5 extends Person
{
	public static void main(String[] args) 
	{
		Singleton st1  =Singleton.getInstance();
		Singleton st2 = Singleton.getInstance();

		System.out.println(st1==st2);//結果為true,因為st1,st2指向單個唯一的例項物件

	}
     public void test()//不能覆寫父類test()方法,否則出錯。因為父類test()為final
	{

	}

	private final void test(String str)//由於為private,因此即便子類出現具有重寫特徵的方法,也不是重寫,只是子類的一個新方法。
	{
		//程式碼不會報錯。因為此時test(String str)其實是一個新的方法,與父類的相同簽名的方法無關。
	}
}
class Singleton
{
	private static Singleton instance = null;//該靜態變數用於快取例項

	private Singleton()//把構造方法隱藏起來,外部無法繼承和例項化該類
	{
	}

    //暴露給外部使用,以便產生唯一一個該類例項
	public static Singleton getInstance()
	{
		if(instance==null)
		{
			//快取該類例項
			instance = new Singleton();
		}

		return instance;
	}
}

//測試
class Person
{
	final void test()//不能被覆寫,因為為final
	{
	}

	private final void test(String str)//由於為private,因此即便子類出現具有重寫特徵的方法,也不是重寫,只是子類的一個新方法。
	{

	}
}