1.Import 用來引入其他包中你所需要的類,但不能找到沒有包的類。
2.堆(Heap)和棧(Stack)的差別:(它們均由JVM虛拟機管理配置設定)
堆 用來存放所有的對象,包括所有的執行個體變量,其空間在程式運作時配置設定
棧 用來存放方法調用和局部變量
name age
Student s0 = new Student(“xiaowang”,20);
s0 = new Student(“wangpeng”,30);
當讀到該語句時,棧中建立s0和name age并指派name = “text”,age = 20;
new的時候堆建立執行個體和執行個體變量,并拷貝name 和 age的值,this.name =“text”,this.age = 20;
然後new中的”=”号使得s0指向建立的執行個體對象。當s0再new一個執行個體的時候原來的指向消失,指向一個新的執行個體,原來的執行個體被垃圾回收。
3. 構造函數
構造函數在被指派前被調用(如2中的new),主要實作對象的初始化。構造函數沒有傳回值,即使是void類型也會報錯!子類的構造函數通過super()調用父類構造函數。如果父類中定義了帶參的構造函數,則子類構造函數必須在第一行調用相應的帶參super(),否則出錯。構造函數可以重載但不能被繼承。可以在構造方法的第一行使用this關鍵字調用其它(重載的)構造方法
Eg: Class Person{
Person(int a,int b){}
Person(){
This(20,30);
}
}
4.成員變量初始化的預設值
5.對象中屬性和方法的可見度:
Public: 通用
Protected: 同類,同包, 不同包中子類的方法中通過supper.(方法/屬性)來通路
Default: 預設,即不寫的時候。同類, 同包
Private: 隻能同類中
6.方法内定義變量時:
除了final外不能使用其他的修飾符;在使用之前必須初始化,但如果沒有使用可以不初始化。
7. ==與equals的差別
==用于比較兩個primitive 主資料類型或者判斷兩個引用是否引用同一個對象
Equals主要用來比較兩個字元串是否一樣,傳回一個boolean值;
用法:String str1 = "aa";
String str2 = "aa";
if(str1.equals(str2)){}
8. 繼承:
Is – a Has –a當兩個類滿足這兩種模型時才能繼承。Java不能多繼承
9.重載(overload)和重寫(override)的差別:
重寫方法必須和被重寫方法具有相同的方法名稱、參數清單和傳回值類型
重寫方法不能使用比被重寫方法更嚴格的通路權限
不能抛出更大的異常
重載隻是參數清單不同而已,可以看成是互不相關的幾個方法
10.多态(有點難)
一個引用類型變量可能指向(引用)多種不同類型的對象
§ Person p = new Student();
§ Object o = new Person();
§ o = new Student();
一個引用類型變量如果聲明為父類的類型,但實際引用的是子類對象,那麼該變量就不能再通路子類中添加的屬性和方法。School是Student類添加的屬性。
§ Student m = new Student();
§ m.school = "pku"; //合法
§ Person e = new Student();
§ e.school = "pku"; //非法
11造型(對象間的強制類型轉換):
從子類到父類的類型轉換可以自動進行
從父類到子類的類型轉換必須通過造型(強制類型轉換)實作
無繼承關系的引用類型間的轉換是非法的
Animal a = new Dog();
Dog d = (Dog)a;
//error子類也不能接收子類的執行個體
Animal a = new Animal();但這樣就出錯了
Dog d = (Dog)a;
//errorDog就隻能接收Dog類型
12.其他:
Instanceof用于判斷一個執行個體是否是另一個類的執行個體。用法if(e instanceof Student)傳回一個boolean值。