基礎點滴:在Java面試中常常會問到的10個基礎問題及其它

1.什麼是 Java虛擬機?為什麼 Java被稱作是“平臺無關的編程語言”?

Java虛擬機是一個可以執行 Java字節碼的虛擬機進程。Java源文件被編譯成能被 Java虛擬機執行的字節碼文件。

Java被設計成允許應用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。Java虛擬機讓這個變為可能,因為它知道底層硬件平臺的指令長度和其他特性。

2.“static”關鍵字是什麼意思?Java中是否可以覆蓋(override)一個 private或者是static的方法?

“static”關鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實例變量的情況下被訪問。

Java中 static方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而 static方法是編譯時靜態綁定的。static方法跟類的任何實例都不相關,所以概念上不適用。

3.JDK和 JRE的區別是什麼?

Java運行時環境(JRE)是將要執行 Java程序的 Java虛擬機。它同時也包含了執行 applet需要的瀏覽器插件。Java開發工具包 (JDK)是完整的 Java軟件開發包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java調試器),可以讓開發者開發、編譯、執行 Java應用程序。

4.是否可以在 static環境中訪問非 static變量?

static變量在 Java中是屬於類的,它在所有的實例中的值是一樣的。當類被 Java虛擬機載入的時候,會對 static變量進行初始化。如果你的代碼嘗試不用實例來訪問非 static的變量,編譯器會報錯,因為這些變量還沒有被創建出來,還沒有跟任何實例關聯上。

5.Java支持的數據類型有哪些?什麼是自動拆裝箱?

Java語言支持的 8中基本數據類型是:

byte

short

int

long

float

double

boolean

char

自動裝箱是 Java編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把 int轉化成 Integer,double轉化成 double,等等。反之就是自動拆箱。

基礎點滴:在Java面試中常常會問到的10個基礎問題及其它

6.Java支持多繼承麼?

不支持,Java不支持多繼承。每個類都只能繼承一個類,但是可以實現多個接口。

7.Java中,什麼是構造函數?什麼是構造函數重載?什麼是複製構造函數?

當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java編譯器會為這個類創建一個默認的構造函數。

Java中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。

Java不支持像 C++中那樣的複製構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java不會創建默認的複製構造函數。

8.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?

Java中的方法重載發生在同一個類裡面兩個或者是多個方法的方法名相同但是參數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。

9.接口和抽象類的區別是什麼?

Java提供和支持創建抽象類和接口。它們的實現有共同點,不同點在於:

接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。

類可以實現很多個接口,但是隻能繼承一個抽象類

類如果要實現一個接口,它必須要實現接口聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。

抽象類可以在不提供接口方法實現的情況下實現接口。

Java接口中聲明的變量默認都是 final的。抽象類可以包含非 final的變量。

Java接口中的成員函數默認是 public的。抽象類的成員函數可以是 private, protected或者是 public。

接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含 main方法的話是可以被調用的。

10.什麼是值傳遞和引用傳遞?

對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。

對象被引用傳遞,意味著傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。

其它:

靜態內部類、內部類、匿名內部類區別

  • 靜態內部類:使用static修飾的內部類

  • 內部類:就是在某個類的內部又定義了一個類,內部類所嵌入的類稱為外部類

  • 匿名內部類:使用new生成的內部類

String、StringBuffer與StringBuilder的區別

  • String類型和 StringBuffer類型的主要性能區別其實在於 String是不可變的對象

  • StringBuffer和StringBuilder底層是 char數組實現的

  • StringBuffer是線程安全的,而StringBuilder是線程不安全的

Java有哪幾種引用

  • 強引用:如果一個對象具有強引用,它就不會被垃圾回收器回收。即使當前內存空間不足,JVM也不會回收它

  • 軟引用:在使用軟引用時,如果內存的空間足夠,軟引用就能繼續被使用,而不會被垃圾回收器回收,只有在內存不足時,軟引用才會被垃圾回收器回收。

  • 弱引用:具有弱引用的對象擁有的生命週期更短暫。因為當 JVM進行垃圾回收,一旦發現弱引用對象,無論當前內存空間是否充足,都會將弱引用回收。

  • 虛引用:在任何時候都可能被垃圾回收器回收。

Java回收機制是怎麼樣的?

Java的垃圾回收機制是Java虛擬機提供的能力,用於在空閒時間以不定時的方式動態回收無任何引用的對象佔據的內存空間。

ArrayList與LinkedList的區別

  • ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。

  • 對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。

  • 對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動數據。

Vector、HashTable以及Map、HashMap等區別的。


分享到:


相關文章: