JavaRush /Java Blog /Random-TW /喝咖啡休息#145。90 個常見的 Java 面試問題及解答

喝咖啡休息#145。90 個常見的 Java 面試問題及解答

在 Random-TW 群組發布
來源:Usemynotes 此出版品包含在初級和中級 Java 開發人員訪談中經常遇到的問題清單。 喝咖啡休息#145。 90 個常見的 Java 面試問題及解答 - 1

1. 是什麼使 Java 成為獨立於平台的語言?

Java 被稱為平台無關語言,因為 JDK(Java 開發工具包)產生的字節碼可以由任何平台上的 JVM(Java 虛擬機器)執行,而與作業系統無關。

2. 為什麼Java不是完全物件導向的語言?

Java 不是完全物件導向的語言,因為它使用八種非物件的基本資料型別:booleanbytecharintfloatdoublelongShort

3. 為什麼Java中的main()方法是靜態的?

main()方法被宣告為靜態,以便可以直接從 JVM 呼叫它,而無需建立宣告它的類別的物件或實例。

4. Java中什麼是包裝類別?

在 Java 中,每個基本資料類型(例如intfloat )都有一個對應的類,稱為包裝類。它們也稱為包裝器,因為它們將原始資料類型包裝或轉換為物件。

5. Java中的建構函數是什麼?

Java 中的建構子是建立物件或實例時自動呼叫的特殊方法。建構函數和類別名稱必須匹配。

6. Java中數組和ArrayList有什麼差別?

陣列 數組列表
它是一種靜態資料結構,這意味著它的大小是固定的並且不能改變。 它是集合結構中的可變長度或動態大小的數組,這意味著它的大小可以根據需要更改。
它們可以儲存物件和原始類型。 它只能儲存或包含對象,但不能儲存原始類型。
我們可以透過在方括號 [ ] 中指定元素的索引來存取該元素。 我們可以透過在get()方法中指定元素的索引號來存取該元素。

7. Java為什麼不使用指標?

Java 不使用指針,因為它們不安全且還會增加程式的複雜度。此外,Java 避免使用指標以避免向使用者提供直接記憶體存取。

8. Java中有哪些類型的存取修飾符?

在Java中,存取修飾符是用於指示對類別以及類別外部或另一個類別中的方法的存取的關鍵字。Java 中有四種不同類型的存取修飾符:
  • 預設
  • 民眾
  • 私人的
  • 受保護

9. Java 中的 JIT 是什麼?

JIT 是 Java 中即時編譯器的縮寫。在運行時,它將字節碼轉換為本機機器代碼。JIT編譯器有助於提升Java程式的效能。

10.Java中的final關鍵字是什麼?

Java中的final關鍵字用來表示常數。它可以與變數、類別和方法一起使用。
  • 如果final關鍵字與變數一起使用,則不能變更其值。
  • 如果Final關鍵字與方法一起使用,則無法覆寫該方法。
  • 如果您將類別聲明為Final,則該類別不能由子類別擴展或繼承。

11. Java中OOP或物件導向程式設計的基本概念是什麼?

Java 中的物件導向程式設計或 OOP 使用 4 個主要概念:
  • 封裝。
  • 抽象。
  • 遺產。
  • 多態性。

12. Java中什麼是單例類別以及如何使類別成為單例?

在 Java 中,單例類別是一種只有一個實例或物件的類別。透過建立私有建構函數,我們可以使該類別成為單例。

13. Java中局部變數和實例變數有什麼不同?

局部變數是在區塊或方法內定義的。局部變數的作用域僅在區塊內。類別實例變數是在類別內部但在方法外部定義的變數。它透過創建類別的物件來訪問,並在物件被刪除時終止。

14.什麼是OOP或物件導向程式設計?

物件導向程式設計或 OOP 是一種程式設計範例,用於使用物件概念開發程式或應用程式。

15. 是什麼讓 Java 字串不可變?

Java中的字串是不可變的,這意味著字串物件一旦建立就無法更新,但會建立一個新的字串物件。這是因為字串物件被緩存在字串池中。

16.描述Java中介面和抽象類別的區別

介面 抽象類別
只能有抽象方法。 允許抽象和非抽象方法。
子類別使用Implements關鍵字實作介面。 子類別或衍生類別透過使用關鍵字來擴展實作(擴展)來繼承抽象。
介面只能有公共靜態方法,沒有實作。 它可以具有不帶實現或帶實現的方法。
介面的所有方法都必須由實作它的類別來實作。 從抽象類別繼承的類別不需要實作其超類別的所有方法。

17. 多態是什麼意思?它有哪些類型?

Java 中的多態性是指物件具有多種形式的能力。它也可以定義為可以透過不同方式完成的單一任務或活動。多態性分為兩種:
  1. 編譯時多態性。
  2. 運行時多態性。

18、Java如何實現編譯時和執行時多態性?

在Java中,編譯時多態性是透過方法重載實現的,而執行時間多態性是透過方法重寫實現的。

19. 抽像是什麼意思?在 Java 中它是如何實現的?

抽像是表示重要資訊而不顯示內部或實作細節的行為。在Java中,這是透過使用抽象類別和介面來實現的。

20.Java中的介面是什麼?

Java中的介面是一組抽象方法,只有函數聲明,沒有實作。我們無法建立介面的物件或實例。介面不能有構造函數。一個類別可以使用 Java 中的 Implements 關鍵字實作多個介面。

21. Java中有哪些類型的繼承?

在Java中,我們使用extends關鍵字來繼承超類別或基底類別的屬性和方法。繼承有五種類型:
  1. 單一繼承。
  2. 多級繼承。
  3. 分層繼承。
  4. 透過介面進行多重繼承。
  5. 混合繼承。

22. Java為什麼不支援多重繼承?

Java不支援多重繼承以防止歧義。例如,假設有兩個超類別 A 和 B,以及一個繼承 A 和 B 的子類別 C。類別 A 和 B 都有一個 show()方法。如果我們透過建立類別 C 的物件來呼叫show()方法,那麼編譯器會拋出錯誤,因為不清楚應該執行 哪個類別的show()方法。

23.方法重載和方法重寫有什麼不同?

方法重載 方法重寫
編譯時多態性。 運行時多態性。
同一類別中的兩個或多個方法具有相同的函數或方法名稱,但簽名不同。 不同類別中具有相同函數或方法名稱和簽名的兩個或多個方法。

24. Java 中是否可以重寫靜態或私有方法?

私有方法在類別外部不可訪問,因此它不會被子類別覆蓋。因此,它不能被覆蓋。同樣,靜態方法不能被重寫,因為如果我們在基底類別和衍生類別中建立具有相同方法名稱和簽署的靜態方法,衍生類別將隱藏基底類別中的方法。這稱為方法隱藏。

25. Java中建構函數重載是什麼?

在 Java 中,如果一個類別具有多個建構函數,但具有不同的參數列表,則建構函數被視為重載。

26.即使沒有抽象方法,我們也可以定義一個抽象類別嗎?

是的,我們可以創建一個抽象類,即使它沒有抽象方法。但是,如果一個類別至少包含一個抽象方法,則必須將其定義為抽象方法,否則會出現錯誤。

27.靜態變數和方法有什麼用?

當我們想要對類別的所有物件使用通用方法或變數而不是為每個物件建立多個副本時,我們使用靜態成員(方法和變數)。例如,在 Employee 類別中,公司名稱可以設為靜態,因為所有物件都將具有相同的公司名稱。

28. Java中有多少種不同類型的建構子?

Java中有兩種類型的建構子:
  1. 預設構造函數不接受任何參數。
  2. 參數化建構函式 - 至少採用一個參數。

29. Java使用複製建構子嗎?

不,Java 沒有像 C++ 那樣的複製構造函式。

30.說明Java中構造函數和方法的區別

建構函數 方法
建構函數名稱和類別名稱必須匹配。 方法名稱可以與類別名稱相同,也可以不同。
它不能有返回類型。 需要有返回類型。
建構函數不能是靜態的。 此方法可以是也可以不是靜態的。
當創建物件或類別的實例時,它會被自動呼叫。 它是使用物件名稱和句點 (.) 來呼叫或應用的。
它用於初始化物件的狀態。 它用於定義物件的行為。

31. 是否可以不使用main()方法來執行程式?

不可以, Java中沒有main()方法就無法執行程序,因為程式的執行是從main()方法開始的。

32.Java中this關鍵字的意思是什麼?

Java中的this關鍵字是一個引用變量,用於引用呼叫方法或變數的當前物件。

33. Java中是否可以使用this關鍵字來引用靜態成員?

是的,由於它是當前物件的引用變量,所以我們可以使用this關鍵字來引用靜態成員。

34. 我們可以將Java中的main()方法設定為私有而不是公用嗎?

我們可以將main()方法設為私有,但是這樣我們會得到一個執行時期錯誤,因此程式將不會執行。

35. Java中super關鍵字的意思是什麼?

在Java中,super關鍵字是一個引用變量,用於引用直接父類別的物件。

36. 說出向量和陣列之間的差異。

向量 大批
這是一個動態調整大小的陣列。 它是一個固定大小的資料結構。
向量是同步的。 數組不同步。
與數組相比,它速度較慢。 與向量相比,它更快。
它只能包含或儲存Java物件。 它用於儲存原始類型和 Java 物件。
我們可以使用size()方法來找出向量的長度。 我們可以使用length屬性來找出陣列的長度。

37.Java中什麼是多執行緒?

多執行緒是在單一程式中同時執行多個任務的過程。這樣做是為了實現最大處理器負載。

38、Java中多執行緒的實作方式有哪些?

Java中的多執行緒可以透過兩種方式實現:
  1. 透過在java.lang.Runnable中實作Runnable介面。
  2. 透過擴展java.lang.Thread中的Thread類別。

39. 說明 Java 中 super 和 this 關鍵字之間的一些差異。

極佳的
用於引用父類別的物件。 用於引用當前類別物件。
用於存取父類別或基底類別的方法。 用於存取當前類別的方法。
呼叫基底類別的預設建構函數。 呼叫當前類別的預設建構函數。

40.子類別和內部類別有什麼差別?

子類別 內部類別
這是一個繼承基底類別或父類別的屬性和方法的類別。 這是一個嵌套在另一個類別中的類別。
它可以存取超類別或基類的所有公共和受保護成員。 它可以存取外部類別的所有成員。

41.Java中什麼是類別載入器?

Java 類別載入器是 Java 執行時間環境或 JRE 的一個元件,用於在執行時間將 Java 類別載入到 Java 虛擬機器 (JVM) 中。

42. Try 區塊後面是否有必要在 Catch 區塊中進行 Java 異常處理?

是的,必須使用catch區塊,因為try區塊拋出的任何異常都必須在catch區塊中擷取。

43. 命名Java中的異常類型

Java 中的異常有兩種類型:
  1. 未經檢查的異常
  2. 檢查異常

44.什麼是執行緒狀態?

Java中有4種線程狀態:
  1. 新流。
  2. 可運行。
  3. 不可運行。
  4. 死亡或終止。

45.什麼是NullPointerException?

當使用者嘗試存取或變更 null 物件的值時,會拋出NullPointerException

46.Java異常處理中使用了哪些類型的關鍵字?

  1. 嘗試

  2. 抓住

  3. 最後

  4. 投擲

47. Java中是否可以重載main()方法?

是的,main()方法可以被重載,但是JVM或Java虛擬機器只會呼叫原來的main()方法。

48. Java中是否可以重寫main()方法?

不可以,因為main()方法是靜態方法,靜態方法不能被重寫。

49. equals() 和 == 有什麼不同?

在Java中,equals()是用來比較兩個物件或變數的值的方法,而==則是比較運算符,用於比較另外兩個物件或變數的位址或記憶體位置。

50.類別構造函數可以回傳任何值嗎?

不,構造函數沒有傳回類型,因此它不能傳回任何值。

51.定義聚合

聚合是一種關聯形式,定義為兩個類別之間的 has-a 關係。這樣做是為了程式碼重用。這是兩個類別之間的單向或單向關係。

52. 什麼是協會?

關聯使用物件定義兩個類別之間的關係。關係或關聯可以是一對一、一對多、多對多或多對一。聚合和組合是關聯的兩種形式。

53.什麼是組合?

組合是一種關聯形式,其中兩個類別相互依賴。

54.動態綁定和靜態綁定有什麼差別?

透過動態綁定,將方法綁定到物件的決定是在運行時做出的。後期綁定是動態綁定的另一個名稱。使用靜態綁定,將方法綁定到物件的決定是在編譯時做出的。靜態綁定是早期綁定的另一個名稱。

55.說明封裝和抽象之間的區別

在封裝中,資料和方法被打包或捆綁到稱為類別的單一單元中。抽象僅顯示重要資訊並隱藏內部或實作細節。

56.Java中什麼是抽象類別?

抽象類別是無法實例化的類,但我們可以建立引用變數。使用abstract關鍵字將類別聲明為抽象的。它包括抽象方法和非抽象方法。

57. 我們可以在一個方法中同時使用final和abstract關鍵字嗎?

不,我們不能將finalstatic方法與abstract一起使用,因為抽象方法必須由子類別重寫,而final方法不能被重寫。

58. 我們可以在介面中將方法宣告為final嗎?

不,我們不能將方法宣告為final,因為介面中的所有方法都是抽象的,因此它必須由子類別實現,且final方法不能被覆寫。

59. 命名所有Java異常類別的基底類

所有異常的基底類別是java.lang.Throwable

60. 是否可以在一個 try 區塊中建立多個 catch 區塊?

是的,我們可以為一個try區塊建立多個 catch 區塊。

61.定義執行任何Java程式都需要指定的兩個環境變數

  1. 路徑變數。
  2. 類路徑變數。

62. Java中可以使用析構函數嗎?

不,我們不能在 Java 中使用析構函數。

63. 匿名類別是什麼意思?

Java 中的匿名內部類別沒有名稱,僅建立一個物件。

64. 命名一個必須為所有執行緒實作的 Java 方法

Run()方法。

65. Java中break和continue有什麼差別?

休息 繼續
用於在滿足特定條件時終止或終止循環。 用於根據某些條件跳過目前迭代的循環執行。
它可以在循環和開關內部使用。 僅在循環內使用。

66. Java中的字串池是什麼?

Java中的字串池是儲存在堆記憶體中的字串的集合。

67. Java 中的 throw 和 throws 關鍵字有什麼不同?

投擲
用於顯式拋出異常。 用於聲明方法在運行時可以拋出的異常。
在方法體內部使用。 使用throws關鍵字,我們可以聲明多個例外。
Throw後面是Exception類別的實例。 後面是要拋出的異常類別的名稱。

68. 是否可以在同一個類別的另一個建構子中呼叫建構子?

是的,我們可以使用this()作為第一行在 另一個建構函式中呼叫同一類別的建構子。

69. Java中String Buffer和String類別可以比較嗎?

不,我們不能比較String BufferString物件。因為我們會得到一個錯誤。

70. 繼承過程中建構函數的呼叫順序是什麼?

首先呼叫父類別或基底類別的建構函數,然後呼叫衍生類別的建構子。

71. 我們可以為建構子命名而不是類別名稱嗎?

不可以,建構函數和類別名稱必須相同。

72.什麼是Java包?

包是分組的類別和介面的集合。

73. String 和 StringBuffer 類別有什麼差別?

細繩 字串緩衝區
String類別是不可變的。 StringBuffer類別是可變的。
比StringBuffer慢。 比String更快。
連接多個字串時會使用更多記憶體。 連接許多字串時它使用更少的記憶體。

74. Java中是否可以重載靜態方法?

是的,我們可以透過傳遞不同的函數簽章來重載 Java 中的靜態方法。

75.垃圾回收期間,記憶體的哪個部分(堆疊或堆)被清理?

堆。

76.當資料需要頻繁更新時,應該使用下列哪個字串類別?

StringBuffer類別應該在頻繁更新的情況下使用,因為它是可變的,因此字串池不會過載。

77. 如果 Java 中的 main() 方法不使用 static 關鍵字,會發生什麼情況?

不會出現編譯錯誤,但在運行時我們會得到NoSuchMethodError錯誤。

78. 如果return語句放在try和catch區塊的結尾,finally區塊會被執行嗎?

是的,無論是否有異常, finally區塊都會執行。

79. 一個Java原始檔中可以有很多公共類別嗎?

不可以,一個 Java 原始檔中只能有一個公共類別。

80. 一個介面可以擴充另一個介面嗎?

是的,一個介面可以使用Java中的extends關鍵字來擴充另一個介面。

81. 說出 Java 中不同類型的類別載入器的名稱

  1. 引導類別載入器

  2. 擴充類別載入器

  3. 系統類別載入器

82. Java中三元運算子的作用是什麼?

三元運算子用於取代Java 中的if-else運算子。這是唯一包含三個運算元的條件運算子。

83. Java 中垃圾回收的作用是什麼?

Java 垃圾收集是 Java 應用程式透過刪除或清理記憶體中未使用的物件和套件來自動節省記憶體的方法。

84. Java中預設建構子是如何使用的?

在Java中,預設建構函式用於以預設值初始化物件的資料成員或成員變數。當程式中沒有其他建構函數時,它會由編譯器自動產生。

85. Java中路徑和類別路徑有什麼差別

  1. 類別路徑定義字節碼檔案(即.class 檔案)的位置。
  2. 路徑指定 .exe 檔案的位置。

86.Java中有哪些資料型別?

Java中有8種資料型態:
  1. 短的

  2. 位元組

  3. 字元

  4. 整數

  5. 漂浮

  6. 雙倍的

  7. 長的

  8. 布林值

87. Java中OOP的四個概念是什麼?

  1. 封裝。
  2. 抽象。
  3. 多態性。
  4. 遺產。

88. Java中的this關鍵字可以賦空值嗎?

不。

89. Java中的靜態區塊是什麼意思?

Java中的靜態區塊用於初始化類別的靜態變數。它只執行一次:當類別第一次載入到記憶體時。

90.什麼是例外?哪個包包含Java中的所有異常類別定義?

異常是程式執行過程中出現的異常情況。它們可能是由於不正確的使用者輸入或不正確的編碼器邏輯而導致的。java.lang.Exception套件包含了Java中所有的異常類別定義。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION