JAVASE經典面試問題(必須熟背)
1. 編譯java程序使用什麼命令?運行java使用什麼命令?
- javac *.java
- java 類名
2. 什麼是JDK,什麼是JRE,JDK與JRE有什麼區別?
-
JDK:Java Development Toolkit Java開發工具包
-
JRE:Java Runtime Enviorment Java運行時環境
-
區別:開發JAVA程序必須安裝JDK,運行JAVA程序必須安裝JRE。
3. 爲什麼說JAVA語言的跨平臺的?JAVA虛擬機JVM是跨平臺的嗎?
因爲JAVA程序編譯後生成的字節碼文件(class文件)是跨平臺的。JVM不是跨平臺,在不同的操作系統上開發JAVA程序,必須安裝該操作系統版本的JVM。
4. Java當中如何跳出多重循環?
使用break label;
在java中,使用break可以跳出循環,默認情況下是跳出最裏層的循環,假如我們要跳出多層循環怎麼辦呢,Java替我們已經做好了這一點,就是用循環標籤 :即是對某個循環定義一個名字,然後在 break 後面加上這個名字,當符合 break 條件時,程序就會跳到規定的循環那。下面來一個例子吧,說明下這個問題。
public static void main(String[] args){
lableB:
for(int i=0;i<3;i++){
lableA:
for(int j=0;j<3;j++){
System.out.println(j);
if(j==1){
break lableB;
}
}
}
System.out.println("over!");
}
複製代碼
標籤名的命名方法是:java命名規則 和 半角冒號: , 比如: lableA:
lableB標籤的定義需要在使用break lableB語句之前定義。
-
break只跳出當前for循環
-
return是結束當前方法的執行
-
continue是終止當前循環語句的執行,繼續下一條循環語句
5. JAVA的數據類型分爲哪幾類?
基本數據類型和引用數據類型
6. String/StringBuffer/StringBuilder的區別是什麼?
- String:不可變
- StringBuffer:可變,並且線程安全,效率差。
- StringBuilder:可變,線程不安全,效率高
7. 面向對象的三大特徵是什麼?]
封裝、繼承、多態
8. Java實現多態性的機制是什麼?
- 有繼承
- 有方法重寫
- 父類引用指向子類對象
9. 什麼是方法重載?什麼是方法重寫?方法重載與方法重寫的區別?
- 方法重載(Overload):是指方法名字相同,參數的個數、類型、次序不同。
- 方法重寫(Override/Overwrite):是指子類重寫了從父類繼承過來的方法。
區別:
- 方法重載沒有繼承、屬於一種靜態聯編技術。
- 方法重寫有繼承、屬於動態聯編技術。
- 什麼是抽象類?什麼是接口?抽象類與接口的區別?
聲明爲abstract的類是抽象類,抽象類不能實例化。
接口也是種特殊的抽象類,接口裏的屬性都是public static final類型的。接口裏的方法都是public abstract 類型的。
區別一:
- 相同點:接口和抽象類都不能實例化對象,都只能實例化它們的子類。
- 不同點:接口是用來實現的、抽象類是用來繼承的。接口適合描述XXX has a XXX的關係,側重於事物的功能。抽象類適合描述 XXX is a XXX的關係,側重於事物的本質。
區別二:
- 抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是接口中的方法不行。
- 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
- 接口中不能含有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類是可以有靜態代碼塊和靜態方法。
- 一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。
11. 分析List/Set/Map這三種集合類型的異同點。
不同點:
- List:序列,有順序,可重複
- Set:集合、無順序,不可重複
- Map:鍵值對,適合用作索引。
相同點:都是集合類型。
12. 什麼是進程?什麼是線程?進程與線程的區別有哪些?
-
進程是正在運行當中的程序,是操作系統最小的調度單位。
-
線程是進程不同的執行線路,從進程中派生。是CPU最小的調度單位。
13. JAVA創建線程類有哪幾種方法?
兩種方式:繼承Thread類、實現Runnable接口
14. 什麼是泛型?使用泛型有什麼好處?
泛型是約束集合的各種數據類型的一種機制。使用泛型的好處是規定集合裏存放的數據類型,提高使用集合的安全性和健壯性、方便集合遍歷。
15. ==與equals究竟有什麼區別?
- ==:判斷兩個對象是否相等
- equals:判斷兩個對象的內容是否相等。
16. Integer與int有什麼區別?
-
Integer:是int類型的封裝類型,是引用類型,指向一個對象。在堆內存中分配空間。
-
int:是基本數據類型,不創建對象。在棧內存中分配空間
17. final,finally,finalize的區別?
-
final:是一種修飾符,可以用來修飾對象、方法和類。
-
finally:通常try{} catch(){}finally{};使用。finally語句塊裏的代碼無論是否拋出異常,一定會被執行。
-
finalize:是Object類的一個方法,銷燬一個對象前會默認調用這個對象的finalize()方法。
18. error和exception的區別?
-
error:錯誤,無需捕獲。
-
exception:異常,必須捕獲。
19. String s = “a”+”b”+”c”+”d”;一共創建了幾個對象?
賦值號的右邊都是字符串常量,編譯階段直接解析爲”abcd”,所以創建了一個對象。
20.Java多線程中的sleep()與wait()有什麼區別?
-
sleep():表示讓當前線程休眠多少毫秒,不會放棄CPU的使用權利,更不會釋放對象的鎖。
-
wait():表示當前線程進入阻塞狀態,會放棄CPU的使用權利,也會立刻釋放對象的鎖。直到notify()方法把該線程喚醒。