1. 程式人生 > 其它 >Java基礎總結(下)

Java基礎總結(下)

java中的內部類

定義:將一個類的定義放在另一個類的定義內部,即為內部類。

內部類本質上是java的一種"語法糖"。為什麼這樣說呢?舉例說明,假設現在有如下程式碼:

類A是一個普通的類,在他的內部定義了兩個類B,以及C。從程式碼結構上來看,B類和C類為A類的內部,但是在使用編譯器編譯之後,它們並不是一個類,而是會變成符合一定名稱規則的三個類,如下圖所示:

 

 

它在編譯之後會產生三個.class檔案,分別是:A.class, A$B.class, A$C.class. 因此,本質上它們還是三個類,只是藉助於java編譯器的語法糖支援,我們可以寫在一個類裡面,從這個例子我們不難推斷出,在java 裡任何一個類,無論是以怎樣的形式定義,在編譯之後生成位元組碼檔案之後,其必然是一個單獨存在的類。理解java的類載入機制的話對這句話理解起來就更加容易,java載入任何一個類的時候都是會首先從載入其class檔案開始,若一個類不存在對應的class檔案,那麼它必然無法被載入也無法被使用。

同時,知道了上述知識之後,我們來看這樣兩個問題:

內部類可以被繼承嗎?答案是肯定可以的,只是從java語法來說寫起來會稍微有點區別

內部類的方法可以被覆蓋嗎?答案一樣是可以的。

為何java編譯器會支援定義內部類這樣的使用方式,原因在於當一個類定義在另一個類內部之後,許多操作會變得簡單一些,比如一個內部類可以直接訪問外部類的任何成員。為什麼內部類能直接訪問外部類的任何成員呢?原因在於java編譯器對內部類的功能t提供了支援,讓我們再來看上述程式碼反編譯回來的結果:、

 

 

同時,這裡我們需要注意這裡的B類宣告成了static的類,C類則沒有。我們常常把用static修飾的內部類成為巢狀類。

他們的區別在於,巢狀類與外圍類之間是沒有聯絡的。這意味這建立巢狀類無需外部類,當然,也不能從巢狀類的物件中訪問非靜態的外圍類物件。同時,在巢狀類的內部可以使用static關鍵字,而普通的內部類不能使用static關鍵字。

用途:從程式碼的組織結構來說,使用內部類可以把邏輯相關的類組織在一起。內部類訪問外部類將非常方便,內部類能訪問外圍物件的所有成員,且不需要任何特殊條件。但這不是最主要的原因,從設計角度出發,使用內部類最大的原因在於:每個內部類可以獨立但繼承一個類,這意味著雖然java的類是單繼承的,但是通過使用內部類,可以達到類似多重繼承的效果。因此,如果不需要解決多重繼承的問題,使用內部類就並不是必須的了,因為其他的編碼方式都能實現一樣的效果。

關於類Collections,Arrays,Objects

在jdk原始碼中提供了很多有用的工具類,它們的命名也有一定的規律。

Collections類提供了很多給容器使用的實用方法。

Arrays類提供了很多給給陣列容器有用的方法。例如想建立一個數組物件可以直接呼叫方法Arrays.asList(...)

Objects類提供了一些給Object類中的實用方法.

這些類都位於jdk的java.util包下面。除了上面提到的三個類以外,util包下面還有許多非常有用且也經常被用到的類和包,例如正則表示式相關的類,基本型別轉換的類,以及流程式設計的類等等,感興趣的讀者可以自行檢視。

JVM,JDK,JRE三者的關係是什麼

JVM指的是java virtual machine, 即java虛擬機器。

是執行java程式碼的引擎。在其他主要的程式語言中,程式碼的編譯器都只會為某個特定系統生成編譯之後的程式碼,也就是說這部分程式碼只能在特定的系統上執行。而java編譯器不為特定的平臺生成位元組碼,而是為Java虛擬機器生成位元組碼,編譯生成的位元組碼是可用於在任何平臺上執行的原始碼,因此jvm成為了將Java程式碼編譯為位元組碼的媒介,它在不同的機器上進行解釋,使的java語言與平臺/作業系統獨立。位元組碼相當於是Java原始碼和主機系統之間的中介語言。

一個java虛擬機器主要做了下面幾件事:

閱讀位元組碼。

驗證位元組碼。

將程式碼與庫連結。

JDK指的是Java SE Development Kit,即java se開發庫。

 

JDK包括完整的JRE(Java執行時環境)以及用於開發,除錯和監視Java應用程式的工具(例如jconsole等)。 JDK是構建和執行Java應用程式和applet所必需的。 它可以被視為一個套件, 程式設計師和開發人員大多使用它。

JRE指的是Java runtime environment,即java執行時環境。

JRE代表Java Runtime Environment,用於在執行時提供環境。 它是JVM能夠支援多平臺的原因。 它包含一組庫以及JVM在執行時使用的核心類和各種其他檔案。 JRE是JDK(Java Development Toolkit)的一部分,但可以單獨下載

https://www.bilibili.com/video/BV1qL411u7eE?from=search&seid=5303350251664895023&spm_id_from=333.337.0.0