【JAVA基礎查漏補缺】對,就是查漏補缺

實例變量:變量聲明在中;
局部變量:變量聲明在方法中;
實例變量都有默認值,boolean的默認值是false;
局部變量沒有默認值,在初始化之前使用會報錯;
如果子類中在引用父類的方法,然後再加上額外的自己的實現:

public void roam(){
	super.roam();
	// balabala自己的
	
}

多態:引用類型可以是實際類型的父類:

Animal[] animals = new Animal[1];
animals[0] = new Dog();

private類型的成員不會被繼承
public類型的成員會被繼承
多態:參數聲明成父類,運行時可以傳入任何子類
下面三種方法可以保證類不被繼承:

  1. 不將類聲明爲public,這樣該類只能在這個包裏被繼承
  2. final修飾符,表示這個類是繼承樹末端,不能被繼承
  3. 讓類只有private構造函數

防止方法被覆蓋,可用final修飾方法

重載:方法名稱相同但是參數不一樣
如果一個類不需要被實例化,可以把這個類設爲抽象類,即使用abstract關鍵字,抽象類必須被extends,否則沒意義
抽象的方法一定要被override,抽象的方法沒有函數體
如果一個類有抽象方法,則該類也得是抽象類,不能在非抽象類中有抽象方法。
所有局部變量都存在於棧上相對應的堆棧塊中。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
構造函數沒有返回類型
如果已經寫了一個有參的構造函數,則編譯器不會再創造無參的了,需要自己寫無參構造函數。
抽象類也有構造函數,雖然不能被顯式的new,但是構造函數會在子類被實例化的時候執行
調用父類構造函數的唯一方法是調用super,如果你沒有自己寫,編譯器會在你重載的每個構造函數上都寫上super
在這裏插入圖片描述
局部變量只存在於聲明該變量的方法中
實例變量的壽命與對象的壽命相同
靜態的方法不能調用非靜態的變量
靜態變量是被所有的實例共享的變量
靜態方法可以直接被調用,而不需要堆上的實例
如果一個類只有靜態方法,則可以把類對構造函數設爲private,以免類被初始化
如果方法調用的次數多了,就可以靜態引入
import static java.lang.Math.*;
double i = sqrt(4);
如果某類的實例不能被序列化,則應該用transient關鍵字。
對象在反序列化時:
4. 從流中讀出二進制;
5. Java虛擬機通過存儲的信息判斷出對象的class類型;
6. Java虛擬機嘗試尋找和加載對應的類,如果jvm找不到對應的類,則報錯;
7. 新的對象會被配置在堆上;
8. 如果對象在繼承樹上有個不可序列化的父類,則該不可序列化類以及之上的類的構造函數都會被執行,從第一個不可序列化的類開始,全部會重新初始化狀態;
9. 對象的實例變量會被還原成序列化時的狀態值,transient變量會被賦值默認值。

靜態變量不會被初始化
BufferedReader 和 BufferedWriter都是先把內容讀到緩存中,緩存區滿了再寫或讀

啓動一個線程的步驟:

  1. 創建Runnable對象(線程的任務)

Runnable threadJob = new MyRunnable();

  1. 創建Thread對象(執行者),並賦值Runnable對象

Thread thread = new Thread(threadJob);

  1. 啓動Thread

thread.start();

線程在可執行與執行中切換,jvm會把線程改爲執行中,又把線程換爲可執行狀態。
單處理器的機器只能有一個執行中的線程。
synchronized關鍵字會讓方法變爲同步的,即一個線程執行完才允許另一個線程執行。
死鎖是指兩個線程互相持有對方正在等待的東西。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章