1. .java
源文件中的類定義
在單個 .java
源文件中,可以包含多個類的定義,但其中只能有一個類被聲明為 public
,且這個 public
類的名稱必須與文件名完全一致。這是Java編譯器的一個基本規(guī)則,確保了類的封裝性和可訪問性。
2. Java 中的 goto
Java 語言中確實保留了 goto
關(guān)鍵字,但出于避免程序結(jié)構(gòu)混亂的考慮,它并未在Java語言規(guī)范中被使用。這意味著你不能在Java程序中使用 goto
語句進(jìn)行跳轉(zhuǎn)。
3. &
和 &&
的區(qū)別
&
和 &&
都是邏輯與運算符,但在使用上有顯著區(qū)別。當(dāng)用于布爾表達(dá)式時,如果兩邊都為 true
,則結(jié)果為 true
;否則為 false
。&&
具有短路功能,即如果*個表達(dá)式為 false
,則不會評估第二個表達(dá)式,直接返回 false
。而 &
還會評估第二個表達(dá)式(無論*個表達(dá)式的結(jié)果如何),并且當(dāng)操作數(shù)不是布爾類型時,&
還可作為位運算符進(jìn)行按位與操作。
4. 跳出多重嵌套循環(huán)
在Java中,若需跳出多重嵌套循環(huán),可通過在外層循環(huán)前定義標(biāo)簽(label),然后在內(nèi)層循環(huán)中使用帶標(biāo)簽的 break
語句來實現(xiàn)。這樣,即使深處多層嵌套中,也能直接跳出到指定的外層循環(huán)。
5. swi*h
語句的適用范圍
swi*h
語句中的表達(dá)式必須是整數(shù)類型(byte
、short
、char
、int
、Integer
包裝類型,它們都能隱式轉(zhuǎn)換為 int
)或枚舉類型。由于 long
不能隱式轉(zhuǎn)換為 int
,因此不能直接用于 swi*h
語句。從Java 7開始,String
類型也被支持用于 swi*h
語句。
6. char
類型與中文漢字
char
類型在Java中用于存儲Unicode編碼的字符,由于Unicode編碼包括了多種語言的字符,包括漢字,因此 char
類型變量可以存儲漢字。但是,如果某個漢字未被Unicode編碼集包含,則無法存儲在 char
類型變量中。值得注意的是,Unicode編碼占用兩個字節(jié),因此 char
類型也占用兩個字節(jié)。
7. final
關(guān)鍵字的作用
final
關(guān)鍵字用于修飾變量時,表示該變量的引用不可變,即一旦指向某個對象后,就不能再指向其他對象。但是,該變量所引用的對象內(nèi)部的狀態(tài)(即對象的成員變量)是可以改變的,除非對象本身也是不可變的。
8. 靜態(tài)變量與實例變量的區(qū)別
- 語法定義:靜態(tài)變量前需加
static
關(guān)鍵字,而實例變量則不加。 - 程序運行:實例變量屬于對象的一部分,必須在創(chuàng)建對象后才能被訪問和修改;而靜態(tài)變量屬于類,在類加載時就已分配空間,無需創(chuàng)建對象即可訪問。
9. 靜態(tài)*調(diào)用非靜態(tài)*
不可以直接從靜態(tài)*中調(diào)用非靜態(tài)*,因為非靜態(tài)*是與對象實例相關(guān)聯(lián)的,而靜態(tài)*調(diào)用時可能尚未創(chuàng)建任何對象實例。因此,在靜態(tài)*內(nèi)部調(diào)用非靜態(tài)*沒有明確的對象實例與之關(guān)聯(lián),這在邏輯上是無法成立的。
10. Java中的多態(tài)機制
Java中的多態(tài)性是通過*的重寫和動態(tài)綁定實現(xiàn)的。具體來說,就是父類或接口類型的引用變量可以指向子類或?qū)崿F(xiàn)類的實例對象,在運行時根據(jù)對象的實際類型動態(tài)綁定*調(diào)用,即調(diào)用的是內(nèi)存中正在運行的對象的*,而非引用變量類型中定義的*。
11. 內(nèi)部類訪問外部類成員
內(nèi)部類(無論是否是靜態(tài)的)都可以訪問其外部類的成員。然而,如果是靜態(tài)內(nèi)部類,則只能訪問外部類的靜態(tài)成員,因為靜態(tài)內(nèi)部類不依賴于外部類的實例。非靜態(tài)內(nèi)部類則沒有這樣的限制,可以自由地訪問外部類的所有成員(包括靜態(tài)和非靜態(tài))。