java基礎知識複習鞏固
記錄一些java基礎知識點:
Person p = new Person();在記憶體中做了哪些事情。
(1)將Person.class檔案載入進記憶體中。
(2)如果p定義在主方法中,那麼,就會在棧空間開闢一個變數空間p。
(3)在堆記憶體給物件分配空間。
(4)對物件中的成員進行預設初始化。
(5)對物件中的成員進行顯示初始化。
(6)呼叫構造程式碼塊對物件進行初始化。(如果沒有就不執行)
(7)呼叫構造方法對物件進行初始化。物件初始化完畢。
(8)將物件的記憶體地址賦值給p變數,讓p變數指向該物件。
static關鍵字:
(1)靜態的意思,用來修飾成員變數和成員函式
(2)靜態的特點:
隨著類的載入而載入
優先於物件存在
對所有物件共享
可以被類名直接呼叫
(3)靜態的注意事項
A:靜態方法只能訪問靜態成員
為什麼:因為靜態的內容是隨著類的載入而載入,它是先進記憶體的。
B:靜態方法中不能使用this,super關鍵字
C:主方法是靜態的
public static void main(String[] args)
public:公共的意思,是最大許可權修飾符。
static:由於jvm呼叫main方法的時候,沒有建立物件。
只能通過類名呼叫。所以,main必須用static修飾。
void:由於main方法是被jvm呼叫,不需要返回值。用void修飾。
main:main是主要的意思,所以jvm採用了這個名字。是程式的入口。
String[]:字串陣列
args:陣列名
在執行的時候,通過java命令給args陣列賦值。
格式:java MainTest hello world itcast
(4)靜態變數和成員變數的區別
A:呼叫方式
靜態變數也稱為類變數,可以直接通過類名呼叫。也可以通過物件名呼叫。
這個變數屬於類。
成員變數也稱為例項變數,只能通過物件名呼叫。這個變數屬於物件。
B:儲存位置
靜態變數儲存在方法區長中的靜態區。
成員變數儲存在堆記憶體。
C:生命週期
靜態變數隨著類的載入而存在,隨著類的消失而消失。生命週期長。
成員變數隨著物件的建立而存在,隨著物件的消失而消失。
D:與物件的相關性
靜態變數是所有物件共享的資料。
成員變數是每個物件所特有的資料。
(5)靜態的優點和弊端
優點:
對物件的共享資料進行單獨空間的儲存,節省記憶體,沒有必要每個物件都儲存一份
可直接被類名呼叫
弊端:
生命週期過長,隨著類的消失而消失
訪問出現許可權,即靜態雖好但只能訪問靜態
(6)什麼使用使用靜態呢?
A:當所有物件共享某個資料的時候,就把這個成員變數定義為靜態修飾的。
B:當某個方法沒有訪問該類中的非靜態成員,就可以把這個方法定義為靜態修飾。
靜態的生命週期比較長,所以一般不推薦使用。
(7)靜態程式碼塊
A:它只執行一次,它比main還先執行。
B:執行順序
靜態程式碼塊--構造程式碼塊--構造方法
重寫和過載的區別?
過載:在同一類中。方法名相同,引數列表不同。過載可以改變返回型別。
重寫:在不同類中(子父類中)。
方法宣告相同(返回型別,方法名,引數列表均相同)。
重寫需要注意:
**子類方法的訪問許可權要大於等於父類方法的訪問許可權。
**靜態只能重寫靜態。但是這種情況一般不會出現。
構造方法
**子類的例項化過程
***子類建立物件時,會先去建立父類的物件。
預設是去呼叫父類的無參構造方法。
***子類構造方法中,第一行預設是super()
***為什麼子類中第一行會預設有super()
因為他繼承父類的成員使用,使用前這些成員必須初始化,
而他們是父類的成員,所以,必須通過父類進行初始化。
所以,會先建立一個父類的物件。
**當父類沒有無參構造方法時
必須使用this或者super呼叫其他的構造方法。
多型:
(1)同一個物件,在程式不同時刻的多種執行狀態。舉例:動物,狗是狗,狗是動物。水(氣態,液態,固態)
(2)多型前提
A:存在著繼承或者實現關係
B:有方法的重寫
C:父類(介面)引用指向子類(實現)物件
(3)多型的好處和弊端:
好處:多型的存在提高了程式的擴充套件性和後期可維護性
弊端:雖然可以預先使用,但是隻能訪問父類中已有的功能,執行的是後期子類的功能內容。
不能預先使用子類中定義的特有功能。
(4)多型中物件呼叫成員的特點
Fu f = new Zi();
A:成員變數
編譯看左邊,執行看左邊
B:成員方法
編譯看左邊,執行看右邊
C:靜態方法
編譯看左邊,執行看左邊
(5)多型的思想
指揮同一批物件做事情。舉例:帶兵打仗,下課等。
throws和throw的區別
A:有throws的時候可以沒有throw。
有throw的時候,如果throw拋的異常是Exception體系,那麼必須有throws在方法上宣告。
B:throws用於方法的宣告上,其後跟的是異常類名,後面可以跟多個異常類,之間用逗號隔開
throw用於方法體中,其後跟的是一個異常物件名