1.什麼是java虛擬機?爲何java被稱做是「平臺無關的編程語言」?java
Java虛擬機是一個能夠執行Java字節碼的虛擬機進程。Java源文件被編譯成能被Java虛擬機執行的字節碼文件。c++
Java被設計成容許應用程序能夠運行在任意平臺,而不須要程序員爲每一個平臺單獨重寫或者從新編譯。Java虛擬機讓這個變成可能,由於它知道底層硬件平臺的指令長度和其餘特性。程序員
2.JDK和JRE的區別是什麼?編程
Java運行環境是將要執行Java程序的Java虛擬機。它同時包含了執行applet須要的瀏覽器插件。Java開發工具包是完整的Java軟件開發包,包含了JRE,編譯器和其餘工具(如:JavaDoc,Java調試器),可讓開發者開發、編譯、執行Java應用程序。瀏覽器
3."static"關鍵字是什麼意思?Java中是否能夠覆蓋(override)一個private或者static的方法?app
「static」關鍵字代表一個成員變量或者是成員方法能夠在沒有所屬類的實例變量的狀況下被訪問。編程語言
java中static方法不能被覆蓋,由於方法覆蓋是基於運行時動態綁定的。static方法跟類的任何實例都不相關,因此概念上不適用。ide
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等等。反之就是自動拆箱。
6.java中的方法覆蓋(overriding)和方法重載(overloading)是什麼意思?
java中的方法重載發生在同一個類裏面兩個或者多個方法的方法名相同可是參數不一樣的狀況。與此相對,方法覆蓋是說子類從新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
7.java中,什麼是構造函數?什麼是構造函數重載?什麼是複製構造函數?
當新對象被建立的時候,構造函數會被調用。每個類都有構造函數。在程序員沒有給類提供構造函數的狀況下,java編譯器會爲這個類建立一個默認的構造函數。每個構造函數必須有它本身惟一的參數列表。java不支持像c++中那樣的複製構造函數,這個不一樣點是由於若是你不本身寫構造函數的狀況下,java不會建立默認的複製構造函數。
8.java支持多繼承麼?
不支持,每個類都只能繼承一個類,但能夠實現多個接口。
9.接口和抽象類的區別是什麼?
java提供和支持建立抽象類和接口,它們的實現有共同點,不一樣點在於:
接口中全部的方法隱含的都是抽象的。而抽象類則能夠同時包含抽象和非抽象的方法。
類能夠實現不少個接口,但只能繼承一個抽象類。
類若是要實現一個接口,它必需要實現接口聲明的全部方法。可是,類能夠不實現抽象類聲明的全部方法,固然,在這種狀況下,類也必須得聲明成是抽象的。
抽象類能夠在不提供接口方法實現的狀況下實現接口。
java接口中聲明的變量默認都是final的。抽象類能夠包含非fianl的變量。
java接口中成員函數默認是public的。抽象類的成員函數能夠是private,protected或者是public。
10.什麼是值傳遞和引用傳遞?
對象被值傳遞,意味着傳遞了對象的一個副本。所以,就算是改變了對象的副本,也不會影響源對象的值。
對象被引用傳遞,意味着傳遞的並非實際的對象,而是對象的引用。所以,外部對引用對象所作的改變會反映到全部的對象上。