JAVA面试常考系列一
轉載自?JAVA面試常考系列一
題目一
什么是Java虛擬機?為什么Java被稱為平臺無關的編程語言?
java虛擬機是一個可以執行字節碼文件(.class)的虛擬機進程。
為什么java與平臺無關呢?因為java源程序(.java)首先被編譯器編譯成字節碼文件(.class),然后java虛擬機將字節碼文件解釋成機器碼。而不同的操作平臺,裝有不同的java虛擬機(JVM),能夠將相同的字節碼文件(.class)解釋為對應平臺所需要的機器碼。所以,java是一種與平臺無關的編程語言。
JDK和JRE的區別是什么?
JDK是完整的Java軟件開發包,包括編譯器、Java運行時環境和其它的工具(比如:JavaDoc,Java調試器),可以讓開發者開發、編譯、執行Java應用程序。
JRE是Java運行時環境,它是JDK的一個組成部分,只包括Java虛擬機、Java核心類庫和支持文件。?
可否在static環境中訪問非static變量?
static變量在Java中是屬于類的,它在所有的實例中的值是一樣的。當類被Java虛擬機載入的時候,會對static變量進行初始化。如果代碼嘗試不用實例來訪問非static的變量,編譯器會報錯,因為這些變量還沒有被創建出來,還沒有跟任何實例關聯上。?
Java支持的數據類型有哪些?什么是自動拆裝箱?
支持類型
Java支持8種基本數據類型:
其中整數值型有四種:byte,short,int,long,
字符型一種:char
浮點類型兩種:float,double
布爾型一種:boolean
整數默認int型,小數默認是double型。Float和long類型的必須加后綴。
Java還支持引用數據類型,引用類型包括類、接口、數組等。引用類型聲明的變量是指該變量在內存中實際存儲的是一個引用地址,實體在堆中。而包裝類就屬于引用類型。
自動拆裝箱
自動裝箱和拆箱就是基本類型和引用類型之間的轉換,轉換的目的是因為基本類型轉換為引用類型后,就可以new對象,從而調用包裝類中封裝好的方法進行基本類型之間的轉換或者toString,還有就是如果集合中想存放基本類型,泛型的限定類型只能是對應的包裝類型。
“static”關鍵字是什么意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
“static”關鍵字表明一個成員變量或者是成員方法可以在沒有所屬類的實例變量的情況下被訪問。
Java中static方法不能被覆蓋,因為static方法是編譯時靜態綁定的,而方法覆蓋是基于運行時動態綁定的。static方法跟類的任何實例都不相關,所以概念上不適用。
java中也不可以覆蓋private的方法,因為private修飾的變量和方法只能在當前類中使用,如果是其他的類繼承當前類是不能訪問到private變量或方法的,當然也不能覆蓋。
Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?
方法覆蓋
Java中方法覆蓋(Overriding)是指子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。重寫方法不能為private,運用中最典型的就是對接口方法的覆蓋。
方法重載
Java中方法重載(Overloading)就是具有相同函數名,返回類型可以不同,參數個數、順序、類型不同的函數。Overloading發生在同一個類里面具有兩個或者是更多的函數具有相同名字的情況下。
Java中,什么是構造函數?什么是構造函數重載?什么是復制構造函數?
構造函數是對象被創建時初始化對象的成員方法,它具有和它所在的類完全一樣的名字。構造函數只能有入口參數,沒有返回類型,因為一個類的構造方法的返回類就是類本身。構造函數定義后,創建對象時就會自動調用它,對新創建的對象分配內存空間和初始化。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java編譯器會為這個類創建一個默認的構造函數。
方法名稱相同,參數項不相同。那么認為一個方法是另一個方法的重載方法。重載只跟參數有關,與返回類型無關。方法名和參數相同而返回類型不相同,不能說是重載。
構造方法重載是方法重載的一個典型的特例。參數列表不同。
Java為什么不支持多繼承?
Java中類不支持多繼承,因為兩個繼承于中一個父類的子類,被同一個子類繼承時,會出現方法的引用歧義,所以Java中只支持單繼承,即一個類只有一個父類。
java中的接口支持多繼承,即一個子接口可以有多個父接口。接口的作用是用來擴展對象的功能,一個子接口繼承多個父接口,說明子接口擴展了多個功能,當類實現接口時,類就擴展了相應的功能。
什么是值傳遞和引用傳遞?
值傳遞
值傳遞:(形式參數類型是基本數據類型):方法調用時,實際參數把它的值傳遞給對應的形式參數,形式參數只是用實際參數的值初始化自己的存儲單元內容,是兩個不同的存儲單元,所以方法執行中形式參數值的改變不影響實際參數的值。
引用傳遞
引用傳遞:(形式參數類型是引用數據類型參數):也稱為傳地址。方法調用時,實際參數是對象(或數組),這時實際參數與形式參數指向同一個地址,在方法執行中,對形式參數的操作實際上就是對實際參數的操作,這個結果在方法結束后被保留了下來,所以方法執行中形式參數的改變將會影響實際參數。?
接口和抽象類的區別是什么?
接口是對動作的抽象,抽象類是對根源的抽象。
抽象類表示的是,這個對象是什么。接口表示的是,這個對象能做什么。比如,大貓,小貓,來定義兩個類,他們的抽象類是貓。說明,他們都是貓。貓可以奔跑,狗也可以奔跑,把“奔跑”定義成一個接口,然后讓這些類去實現它。
所以,在高級語言上,一個類只能繼承一個類(抽象類)(正如貓不可能同時是動物和植物),但是可以實現多個接口(吃奔跑口、跳躍接口)。
區別如下:
1、抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向實現所有抽象方法的子類對象,接口變量必須指向實現所有接口方法的類對象。
2、抽象類要被子類繼承,接口要被類實現。
3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現。
4、接口里定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。
5、抽象類里的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那么該子類只能是抽象類。同樣,一個實現接口的時候,如不能全部實現接口方法,那么該類也只能為抽象類。
6、抽象方法只能申明,不能實現,接口是設計的結果 ,抽象類是重構的結果。
7、抽象類里可以沒有抽象方法。
8、如果一個類里有抽象方法,那么這個類只能是抽象類。
9、抽象方法要被實現,所以不能是靜態的,也不能是私有的。
10、接口可繼承接口,并可多繼承接口,但類只能單根繼承。
總結
以上是生活随笔為你收集整理的JAVA面试常考系列一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad3d绘图电脑配置推荐?
- 下一篇: JAVA面试常考系列二