資料來源:Hackernoon 以下是 Java 面試中經常出現的一些問題和答案。
1.什麼是Java開發工具包(JDK)?
JDK 是一個軟體開發工具包,其中包括開發 Java 應用程式所需的工具和程式庫。2. Java執行時期環境(JRE)的作用是什麼?
JRE是指Java字節碼運作的執行環境。JRE 維護運行時的文件和庫。3. Java虛擬機(JVM)的作用是什麼?
JVM 是一個抽象機器,它提供了 Java 字節碼可以執行的執行環境。4. Java 是平台無關的。為什麼?
在任何其他程式語言中,原始程式碼被編譯為可執行程式碼,並且該程式碼可能無法在所有平台上運行。透過使用 JVM,我們可以使任何平台都可以理解字節碼,並且該字節碼是獨立於平台的。儘管每個平台的 JVM 都不同,但 Java 是平台無關的,因為它不依賴任何類型的平台。5. Java不是100%物件導向的。為什麼?
因為Java使用boolean、byte、char、int、float、double、long、short等八種基本資料類型,它們不是物件。6. Java中的建構子是什麼?
構造函數是用於初始化物件的程式碼區塊。句法:class DemoClass
{
// constructor name is same as class name
DemoClass()
{
....
}
}
// calls DemoClass() constructor
DemoClass obj = new DemoClass();
例子:
public class ConstructorDemo
{
int a; // class attribute
// create constructor for class ConstructorDemo
ConstructorDemo()
{
a = 26; // initial value for class attribute 'a'
}
public static void main(String[] args)
{
// creating object for ConstructorDemo class
// here we're calling constructor ConstructorDemo()
ConstructorDemo obj = new ConstructorDemo();
System.out.println(obj.a);
}
}
結果:
26
7. 單例類別有什麼作用?
單例類別一次只能有一個物件(類別實例)。建立物件並嘗試實例化單例類別後,新變數也指向建立的第一個物件。8. Java中的包裝類別是什麼?
包裝類別允許將原始資料類型轉換為對象,反之亦然。例子:int a = 7; // using primitive datatype
Integer a = new Integer(7); // using wrapper class
9. Java中的==運算子和相等方法有什麼差別?
一般來說,==是一個運算符,equals()是一個方法。我們使用==運算子來引用堆上的比較物件。Java中沒有運算子重載的概念。儘管如此,==運算子還是用來檢查兩個物件的位址是否相同。也就是說,==運算子檢查兩個物件是否指向相同記憶體位置。==運算子也用於比較物件類型和基本類型(例如布林值)。而String類別的equals()方法則比較兩個物件的內容。10. Java中OOP的概念是什麼?
- 抽像被定義為隱藏內部實作並僅顯示必要的資訊。
- 繼承是將父類別(超類別)的所有屬性和行為轉換為子類別(子類別)的過程。
- 封裝是將資料或變數和方法綁定在一起的過程。
- 多態性字面上的意思是多種形式。多態性是方法執行不同任務的能力。這可以透過使用方法來實現。
11. 為什麼Java中main()方法總是靜態的?
因為不需要呼叫物件的靜態方法。如果main()是一個非靜態方法,Java 虛擬機器必須先建立其對象,然後呼叫main()方法,這將導致分配額外的記憶體。12.為什麼Java中的字串是不可變的?
Java中的字串是不可變的,因為String物件被緩存在字串常數池中。13. Java中的陣列和ArrayList是什麼?
數組是包含固定數量的類似類型元素的物件。-
ArrayList是集合結構的一部分。
-
ArrayList實作了列表介面。
-
ArrayList是一個可擴展的數組,它會隨著元素的添加而動態增長,並隨著元素的刪除而收縮。
-
對於頻繁的檢索操作,Java ArrayList是最好的選擇。因為ArrayList的元素儲存在連續的記憶體位置。
-
ArrayList不能包含原始資料型,例如 int、double、char 和 long。
-
ArrayList可以包含String和包裝類別物件(Double、Integer)。
-
ArrayList允許您複製元素。
-
ArrayList保留插入順序。
-
ArrayList因其功能性和靈活性而被廣泛使用。它旨在存儲異構對象集合。
-
ArrayList可以有任意數量的空值。
14.Java中HashSet和HashMap有什麼差別?
在哈希集中:-
我們可以將物件儲存在HashSet中。例如,HashSet:{“Hello”,“World”}。
-
不保留插入順序。它是基於哈希碼的。
-
有一個add()方法。
-
實現Set接口。
-
不允許重複元素。
-
允許單一空值。
-
在HashMap中我們可以儲存鍵和值對。例如,{1 -> “Hello”, 2 -> “World”}。
-
不支援插入順序。它基於哈希函數。
-
有一個put()方法。
-
實現地圖介面。
-
允許重複值。不允許重複的鍵。
-
允許單一空鍵和任意數量的空值。
16.Java中this和super有什麼差別?
Java中的this關鍵字:-
這是一個關鍵字,它是引用當前物件的引用變數。
-
可用於隱式呼叫目前類別方法。
-
this()關鍵字,用於呼叫目前類別的建構子。
-
這可用於在呼叫方法時作為參數傳遞。
-
super關鍵字是一個引用變量,用於引用父類別的直接物件。
-
super可用於直接呼叫父類別的方法、父類別的建構子、以及存取基底類別的方法。
17. Java中的break和continue語句是什麼?
如果迴圈中出現break語句,迴圈將會結束,控制權會傳遞到同一迴圈中的下一語句。例子:public class Example
{
public static void main(String[] args)
{
for(int a = 1; a <= 10; a++)
{
if(a == 3)
{
// breaking loop
break;
}
System.out.println(a);
}
}
}
結果:
12
continue 語句根據特定條件移動到迴圈的下一個迭代。例子:
public class Example
{
public static void main(String[] args)
{
for(int a = 1; a <= 10; a++)
{
if(a % 2 != 0)
{
continue;
}
System.out.println(a + " ");
}
}
}
結果:
2 4 6 8 10
18. Java中的存取修飾符是什麼?
存取修飾符定義變數、建構子、類別或方法的限製或範圍。Java中有四種類型的存取修飾符:- 私有存取修飾符。
- 受保護的存取修飾符。
- 共享修改器。
- 預設存取修飾符。
19. Java中for迴圈和foreach迴圈有什麼差別?
for迴圈:- 沒有可執行序列。在for迴圈中,我們可以根據需要更改計數器。
- 一開始就出現在 JDK 1 中。
- 無需實作該介面。
- 可以存取索引。因此,可以替換數組中的元素。
- 計數器可以增加和減少。
- 依次執行。計數器加一。
- 首次出現在 JDK 5 中。
- 若要使用 for-each 迴圈迭代容器,容器必須實作 Iterable 介面。
- 由於無法存取數組索引,因此無法替換該索引處的元素。
- 只能依遞增順序迭代,不能遞減。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DifferenceBetween
{
public static void main(String[] args)
{
List<String> players = new ArrayList<>(Arrays.asList("Virat", "Rohit", "Dhoni"));
// iterate over List using for loop
System.out.println("using for loop: ");
for(int a = 0; a < players.size(); a++)
{
System.out.println(players.get(a));
}
// iterate over List using enhanced for loop
System.out.println("using for each loop: ");
for(String str : players)
{
System.out.println(str);
}
}
}
for 和 foreach 迴圈的結果:
維拉特·羅希特·多尼。
GO TO FULL VERSION