導讀
第一:static關鍵字的概念與本質分析
第二:代碼塊與其內存分佈
第三:單例模式的本質
第四:對象數組的定義與應用
一、static關鍵字
①、修飾屬性:編程類屬性,被關鍵字定義的字段。由JVM加載的時候就已經把這些屬性加載到ClassLoader中,也就是說同時就分配了內存空間了,能夠直接使用。
如:
class Applet
{
static int count = 10; // 被static關鍵字修飾的變量:count
}
使用:
System.out.println("第一次count修改後:" + (Applet.count+=1)); // 此時count的值變:11
System.out.println("第二次count修改後:" + (Applet.count-=3));// 此時是在count原有的(11)基礎上減去3,等於 8
System.out.println("第三次count修改後:" + (Applet.count +=5));// 從8加上5,等於13了
看出什麼了嗎?—— 對,您們都很聰明,count的值不斷在變化。說明一個問題,就是說被static修飾的屬性是一個數據共享區域。每次修改都是修改同一個變量而 已,現在這個問題就已經解釋清楚了。
②、方法修飾:其實這個我們可以理解爲一段可以被重複調用的代碼塊,但它是屬於類級別的。方法棧一旦執行完畢,那麼裏面的數據將被全部銷燬。還有一個就是說,靜 態方法中不能直接調用非靜態屬性。
代碼如下——
class Executer
{
public static void request()
{
System.out.println("=== request connection factory ===");
}
}
③、代碼塊
|- 靜態代碼塊:說白了,代碼塊其實就是一個有限區域的空間。也就是在一對花括號的範圍內,變量一旦除了這個大括號,那麼它的有效性就沒有了。
如
// 在所有的Java元素中,是第一個被執行的:也是唯一執行一次的代碼塊!!!
static
{
// 我在這裏定義的變量
int number =100;
System.out.println("number is : " + number);
}
System.out.println("number is : " + number); // 這裏是訪問不到的,因爲number已經除了大括號範圍了。
// 非靜態代碼塊——
{
boolean flag = false;
System.out.println("boolean狀態值:" + false);
}
④、設計模式之:單例模式
目的:在程序的運行過程中,單例類只返回唯一的一份對象。
分析:如何設計唯一的一個對象呢,首先我是這樣考慮的,構造器是肯定不能在外部new新的對象的,因爲是單例嘛。其次可以在內部就可以馬上獲取到這個對象。
設計:然後編寫一個即使在外部都能夠調用生成唯一的一個對象。
public class MySingleton
{
private static MySingleton instance = new MySingleton(); // 創建了一個instance對象
private MySingleton()
{
super();
}
public static MySingleton getInstance()
{
return MySingleton.instance;
}
}
⑤、對象數組
class Student
{
private String name;
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
/** 創建一個學生類數組,裏面可以存放三個對象 **/
Student[] students = new Student[3]; // 這個就是對象數組,裏面可以存放三個Student學生對象——
這樣可以有效地管理每一個Student對象,但有一個限定,數組一旦定義,其容量就已經被確定了。