JAVASE經典面試問題(必須熟背),你Get到了嗎?

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):是指子類重寫了從父類繼承過來的方法。

區別:

  • 方法重載沒有繼承、屬於一種靜態聯編技術。
  • 方法重寫有繼承、屬於動態聯編技術。
  1. 什麼是抽象類?什麼是接口?抽象類與接口的區別?

聲明爲abstract的類是抽象類,抽象類不能實例化。

接口也是種特殊的抽象類,接口裏的屬性都是public static final類型的。接口裏的方法都是public abstract 類型的。

區別一:

  • 相同點:接口和抽象類都不能實例化對象,都只能實例化它們的子類。
  • 不同點:接口是用來實現的、抽象類是用來繼承的。接口適合描述XXX has a XXX的關係,側重於事物的功能。抽象類適合描述 XXX is a XXX的關係,側重於事物的本質。

區別二:

  1. 抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是接口中的方法不行。
  2. 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
  3. 接口中不能含有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類是可以有靜態代碼塊和靜態方法。
  4. 一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。

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()方法把該線程喚醒。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章