1、例項變數與類變數的比較
(1)、在類中定義的變數成為成員變數,對於帶static關鍵字的變數成為類變數或靜態變數,反之成為例項變數或非靜態變數
(2)、在類中定義的變數成為成員變數,對於帶static關鍵字的變數成為類變數或靜態變數,反之成為例項變數或非靜態變數。
(3)、類變數屬於類本身,伴隨著類本身的初始化而完成記憶體分配,無論該類new了多少個例項,改變只有乙個。類變數的初始化總是在例項變數的前面。
(4)、例項變數就是在new乙個物件的時候才初始化,分配記憶體空間
(5)、static關鍵字可以修飾在類中定義的成員,包括成員變數、方法、內部類、初始化塊、內部列舉;不能修飾外部類、區域性變數、區域性內部類。
建立乙個人員類:
public class person
/*** @return the name
*/public string getname()
/*** @param name the name to set
*/public void setname(string name)
/*** @return the age
*/public int getage()
/*** @param age the age to set
*/public void setage(int age)
} public static void main(string args)
結果為:
person的類變數money初始值:0
person的類變數money:10
姓名:張三;年齡:21
person的類變數money:20
姓名:null;年齡:0
money為static變數,只建立一次,這裡設定為public,其他的例項都可以直接訪問它,並且訪問的還是同乙個。最好將其設定為private,不給其他例項直接訪問,只能通過類本身來訪問
2、例項變數初始化先後順序
(1)、定義例項變數時指定初始值
(2)、非靜態初始化塊對例項變數賦值
構造方法賦值
public class cat
private double weight = 12.3;
static
public void display()
/*** @return the name
*/public string getname()
/*** @param name the name to set
*/public void setname(string name)
/*** @return the age
*/public int getage()
/*** @param age the age to set
*/public void setage(int age)
/*** @return the weight
*/public double getweight()
/*** @param weight the weight to set
*/public void setweight(double weight)
}
public static void main(string args)
結果為:
執行靜態初始化塊
執行非靜態初始化塊——重量:0.0
執行非靜態初始化塊
執行非靜態初始化塊——重量:22.2
名稱:測試1;年齡:10;重量:10.1
執行非靜態初始化塊——重量:0.0
執行非靜態初始化塊
執行非靜態初始化塊——重量:22.2
名稱:測試2;年齡:20;重量:20.1
從上面可以看出,靜態初始化塊總是執行在前面,且每new乙個物件就執行一次,構造方法賦值總是在最後面;
這裡並沒有輸出weight=12.3而是輸出為0.0說明非靜態初始化塊執行順序在定義變數時賦值的前面,然後並非如此,交換非靜態初始化塊與weight定義時賦值賦值語句的先後順序者的順序
結果為:
執行靜態初始化塊
執行非靜態初始化塊——重量:12.3
執行非靜態初始化塊
執行非靜態初始化塊——重量:22.2
名稱:測試1;年齡:10;重量:10.1
執行非靜態初始化塊——重量:12.3
執行非靜態初始化塊
執行非靜態初始化塊——重量:22.2
名稱:測試2;年齡:20;重量:20.1
得出結論:靜態初始化塊最早,構造方法最晚,非靜態初始化塊與定義例項變數賦值的語句按先後順序來判斷
3、類變數初始化先後順序
(1)、定義類變數時指定初始值
(2)、靜態初始化塊指定初始值
public class test
static
static string name = "測試1";
/*** @param args the command line arguments
*/public static void main(string args)
得出結論:
這兩種方式執行順序與他們在**中的先後順序一致
4、構造方法執行先後順序
當用構造方法建立乙個類的例項的時候,首先執行父類的非靜態初始化塊、構造方法,然後再執行本類的非靜態初始化塊、構造方法
(1)、執行object類非靜態非靜態初始化塊(沒有就不執行)
(2)、執行object類的構造方法(有時候是隱式呼叫的)
(3)、執行父類的非靜態初始化塊(沒有就不執行)
(4)、執行父類的構造方法(有時候是隱式呼叫)
(5)、執行本類非靜態初始化塊(沒有就不執行)
(6)、執行本類的構造方法
public class son extends parent
public son()
public son(string name)
}class parent extends grandfather
public parent(string parent)
public parent(string name, int age)
}class grandfather
public grandfather()
public grandfather(string name)
}
public class test
}
結果為:
爺爺的靜態初始化塊
父親的靜態初始化塊
兒子的靜態初始化塊
爺爺的非靜態初始化塊
爺爺無參構造方法
爺爺有參構造方法張三
父親的非靜態初始化塊
父親乙個引數構造方法張三
父親兩個引數構造方法張三
兒子的非靜態初始化塊
兒子無參構造方法
兒子有參構造方法三毛
結論:可以看出
(1)、首先是載入靜態的資源,然後再是非靜態初始化塊,然後再是構造方法
(2)、系統總是從最頂層的父類開始初始化操作
5、訪問子類物件的例項變數
continue………………
JAVA物件導向學習
物件導向 1.static成員不能訪問非static成員 2.物件,引用,指標 3.private protect public 4.區域性變數 成員變數 父類回溯 5.super super.6.引用 編譯時型別,執行時型別 7.方法多型,變數例項無多型 8.引用型別只能決定編譯時變數,不能呼叫執...
java物件導向學習
物件導向思想 物件導向是基於面向過程的思想 面向過程 強調每一 個功能的步驟 物件導向 強調的是物件,由物件去呼叫功能 物件導向特徵 封裝 繼承 多型。物件導向特點 1.更符合人們的思考習慣 2.將複雜的事情簡單化 3.將我們從執行者變成指揮者 構造方法 給物件的資料進行初始化 格式 1.方法名和類...
Java學習 物件導向
一 物件導向的核心思想 使用類,物件,繼承,封裝,訊息傳遞等來進行程式設計。盡可能的運用人類的正常邏輯思維來解決問題,思考問題。二 類根據現實世界中的多個有相同特徵的個體進行分析,抽象出來的新的事物,即型別三 物件 通過類來產生的個體,可以有很多個 通過new關鍵字 呼叫的是類的構造方法,進行例項化...