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值。