成員變量與局部變量:
具體定義不再贅述,記錄一些以前忽視的差異;
成員變量在聲明過程中會被系統(tǒng)默認初始化,默認值0;
局部變量在聲明過程中不會被系統(tǒng)默認初始化;
(final 修飾的為特殊情況,不會初始化)
局部變量和成員變量命名可以重復,當調(diào)用過程中沖突時,符合就近原則。(優(yōu)先調(diào)用局部變量)
靜態(tài)變量、靜態(tài)方法:
靜態(tài)變量可以通過對象名直接訪問,也可以直接通過類名訪問。
非靜態(tài)類不能以此方式調(diào)用,需要聲明類后,通過類調(diào)用。
public class HelloWorld {
static int staticInt = 99;
public static void main(String[] args) {
System.out.println(staticInt);
System.out.println(HelloWorld.staticInt);
}
}

與靜態(tài)變量一樣靜態(tài)方法可以通過類名直接調(diào)用,而不需要實例化類的對象。
弊端:
靜態(tài)方法是屬于類的,內(nèi)存必須為它分配內(nèi)存空間,這個空間一直由靜態(tài)方法占用,內(nèi)存管理器不會由于靜態(tài)方法沒有被調(diào)用而將靜態(tài)方法的存儲空間收回,這樣如果將所有的方法都聲明為靜態(tài)方法,就會占用大量的內(nèi)存空間。
關(guān)于內(nèi)部類的概念:
靜態(tài)內(nèi)部類:
靜態(tài)相關(guān)訪問非靜態(tài)內(nèi)容都會受到限制,如靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員。同樣,靜態(tài)內(nèi)容聲明較為直接,創(chuàng)建靜態(tài)內(nèi)部類的對象時,不需要外部類的對象,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();
方法內(nèi)部類:
方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中,方法內(nèi)部類只在該方法的內(nèi)部可見,即只在該方法內(nèi)可以使用。
Object類:
ToString():
ToString()方法時Object類中的方法,因為所有的類默認繼承Object類,所以在將類作為字符串輸出時,都會默認調(diào)用ToString()方法,一般時將對象轉(zhuǎn)換為關(guān)于內(nèi)存地址的哈希數(shù)。如果我們希望返回對象的屬性,則需要在對象中對ToString()方法進行重寫。
equals():
A.equals(B) 比較的是A,B兩個對象的引用是否指向同一個內(nèi)存區(qū)域。
當然,該方法可以由IDE自動重寫。
多態(tài):
引用的多態(tài):
父類引用指向本類;
父類引用指向子類;
Animal animal1 = new Animal();
Animal animal2 = new Dog();
方法的多態(tài):
本類方法的調(diào)用;
子類對父類方法的繼承、重寫等。
類型轉(zhuǎn)化:
Animal animal ;
Dog dog = (Dog)new Animal(); //強制類型轉(zhuǎn)化 animal->dog
animal = dog; //自動類型轉(zhuǎn)化dog ->animal
Cat cat1 = (Cat) animal; // 雖然不報錯,但是錯誤。 轉(zhuǎn)化關(guān)系相當于dog->cat
通過instanceof 關(guān)鍵字判斷是否包含,從而決定是否可以轉(zhuǎn)化。所以在使用強制轉(zhuǎn)化時,最好通過instanceof關(guān)鍵字判斷一下。
if(animal instanceof Cat){
System.out.printf("animal 對象含有 Cat 類");
}
接口相關(guān):
匿名內(nèi)部類:
IPlayGame 為接口,接口中的方法只能聲明,無法做具體描述。所以在new對象的時候,需要將抽象方法具體化。
IPlayGame iPlayGame = new IPlayGame() {
@Override
public void PlayGame() {
System.out.printf("使用匿名內(nèi)部類");
}
};
iPlayGame.PlayGame();
new IPlayGame(){
@Override
public void PlayGame() {
System.out.println("使用匿名內(nèi)部類2");
}
}.PlayGame();