1. 程式人生 > >Java面試中最常見的10個問題,Java底層知識,花點時間學習一下

Java面試中最常見的10個問題,Java底層知識,花點時間學習一下

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

Java 虛擬機器是一個可以執行 Java 位元組碼的虛擬機器程序。Java 原始檔被編譯成能被 Java 虛擬機器執行的位元組碼檔案。

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

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

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

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

是static 的方法?

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

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

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內部學習群:725633148,進群找管理免費領取學習資料和視訊。沒有錯就是免費領取!大佬小白都歡迎,大家一起學習共同進步!

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

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

7.Java 中,什麼是建構函式?什麼是建構函式過載?什麼是複製建構函式?

當新物件被建立的時候,建構函式會被呼叫。每一個類都有建構函式。在程式設計師沒有給類提供建構函式的情況下,Java 編譯器會為這個類建立一個預設的建構函式。

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

Java 不支援像 C++中那樣的複製建構函式,這個不同點是因為如果你不自己寫建構函式的情況下,Java 不會建立預設的複製建構函式。

8.Java 支援多繼承麼?

不支援,Java 不支援多繼承。每個類都只能繼承一個類,但是可以實現多個介面。

9.介面和抽象類的區別是什麼?

Java 提供和支援建立抽象類和介面。它們的實現有共同點,不同點在於:

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

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

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

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

Java 介面中宣告的變數預設都是 final 的。抽象類可以包含非 final 的變數。

Java 介面中的成員函式預設是 public 的。抽象類的成員函式可以是 private, protected 或者是 public。

介面是絕對抽象的,不可以被例項化。抽象類也不可以被例項化,但是,如果它包含 main 方法的話是可以被呼叫的。

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

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

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