什么是Java虛擬機(jī)?為什么Java被稱作是“平臺(tái)無關(guān)的編程語言”?
Java虛擬機(jī)是一個(gè)可以執(zhí)行Java字節(jié)碼的虛擬機(jī)進(jìn)程。Java源文件被編譯成能被Java虛擬
機(jī)執(zhí)行的字節(jié)碼文件。
Java被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的平臺(tái),而不需要程序員為每一個(gè)平臺(tái)單獨(dú)重寫
或者是重新編譯。Java虛擬機(jī)讓這個(gè)變?yōu)榭赡?,因?yàn)樗赖讓佑布脚_(tái)的指令長度和其特性。
JDK和JRE的區(qū)別是什么?
Java運(yùn)行時(shí)環(huán)境(JRE)是將要執(zhí)行Java程序的Java虛擬機(jī)。它同時(shí)也包含了執(zhí)行applet需要的瀏覽器插件。Java開發(fā)工具包(JDK)是完整的Java軟件開發(fā)包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調(diào)試器),可以讓開發(fā)者開發(fā)、編譯、執(zhí)行Java應(yīng)用程序。
”static”關(guān)鍵字是什么意思?Java中是否可以覆蓋(override)一個(gè)private或者是static的方法?
“static”關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒有所屬的類的實(shí)例變量的情況下被訪問。
Java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法是編譯時(shí)靜態(tài)綁定的。static方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。private也是不支持覆蓋的,因?yàn)樗接械某蓡T外界是看不到的所以也就不存在覆蓋的問題。
是否可以在static環(huán)境中訪問非static變量?
static變量在Java中是屬于類的,它在所有的實(shí)例中的值是一樣的。當(dāng)類被Java虛擬機(jī)載入的時(shí)候,會(huì)對(duì)static變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來訪問非static的變量,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒有被創(chuàng)建出來,還沒有跟任何實(shí)例關(guān)聯(lián)上。
Java支持的數(shù)據(jù)類型有哪些?什么是自動(dòng)拆裝箱?
Java語言支持的8中基本數(shù)據(jù)類型是:
- 整型:byteshortintlong
- 浮點(diǎn)型:floatdouble
- 布爾型:boolean
- 字符型:char
自動(dòng)裝箱是Java編譯器在基本數(shù)據(jù)類型和對(duì)應(yīng)的對(duì)象包裝類型之間做的一個(gè)轉(zhuǎn)化。比如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成double,等等。反之就是自動(dòng)拆箱。
Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?
重寫方法的規(guī)則:(方法重寫也稱為方法覆蓋)
- 參數(shù)列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是重載。
- 返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載。
- 訪問修飾符的限制一定要大于被重寫方法的訪問修飾符(public>protected>default>private)
- 重寫方法一定不能拋出新的檢查異?;蛘弑缺恢貙懛椒ㄉ昝鞲訉挿旱臋z查型異常。例如:
父類的一個(gè)方法申明了一個(gè)檢查異常IOException,在重寫這個(gè)方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。
而重載的規(guī)則:
- 必須具有不同的參數(shù)列表;
- 可以有不責(zé)罵的返回類型,只要參數(shù)列表不同就可以了;
- 可以有不同的訪問修飾符;
- 可以拋出不同的異常;
重寫與重載的區(qū)別在于:
重寫多態(tài)性起作用,對(duì)調(diào)用被重載過的方法可以大大減少代碼的輸入量,同一個(gè)方法名只要往里面?zhèn)鬟f不同的參數(shù)就可以擁有不同的功能或返回值。
用好重寫和重載可以設(shè)計(jì)一個(gè)結(jié)構(gòu)清晰而簡潔的類,可以說重寫和重載在編寫代碼過程中的作用非同一般.
Java中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?
當(dāng)新對(duì)象被創(chuàng)建的時(shí)候,構(gòu)造函數(shù)會(huì)被調(diào)用。每一個(gè)類都有構(gòu)造函數(shù)。在程序員沒有給類提
供構(gòu)造函數(shù)的情況下,Java編譯器會(huì)為這個(gè)類創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)。
Java中構(gòu)造函數(shù)重載和方法重載很相似??梢詾橐粋€(gè)類創(chuàng)建多個(gè)構(gòu)造函數(shù)。每一個(gè)構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。Java不支持像C++中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是因?yàn)槿绻悴蛔约簩憳?gòu)造函數(shù)的情況下,Java不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。
Java支持多繼承么?支持多實(shí)現(xiàn)嗎?
不支持,Java不支持多繼承。每個(gè)類都只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。
接口可以繼承接口嗎?如果可以繼承請(qǐng)列舉一個(gè)案例?
可以,List繼承Collection
接口和抽象類的區(qū)別是什么?接口和抽象類有什么區(qū)別你選擇使用接口和抽象類的依據(jù)是什么?
接口和抽象類的概念不一樣。接口是對(duì)動(dòng)作的抽象,抽象類是對(duì)根源的抽象。
抽象類表示的是,這個(gè)對(duì)象是什么。接口表示的是,這個(gè)對(duì)象能做什么。比如,蘇格蘭折耳貓,布偶貓,這兩個(gè)類(如果是類的話„„),他們的抽象類是貓。說明,他們都是貓。貓可以吃東西,耗子也可以吃東西,你可以把“吃東西”定義成一個(gè)接口,然后讓這些類去實(shí)現(xiàn)它.所以,在高級(jí)語言上,一個(gè)類只能繼承一個(gè)類(抽象類)(正如貓不可能同時(shí)是生物和非生物),但是可以實(shí)現(xiàn)多個(gè)接口(吃飯接口、走路接口)。
第一點(diǎn).接口是抽象類的變體,接口中所有的方法都是抽象的。而抽象類是聲明方法的存在而不去實(shí)現(xiàn)它的類。
第二點(diǎn).接口可以多繼承,抽象類不行
第三點(diǎn).接口定義方法,不能實(shí)現(xiàn),而抽象類可以實(shí)現(xiàn)部分方法。
第四點(diǎn).接口中基本數(shù)據(jù)類型為static而抽類象不是的。
第五點(diǎn).Java接口中聲明的變量默認(rèn)都是final的。抽象類可以包含非final的變量。
第六點(diǎn).Java接口中的成員函數(shù)默認(rèn)是public的。抽象類的成員函數(shù)可以是private,protected或者是public。
當(dāng)你關(guān)注一個(gè)事物的本質(zhì)的時(shí)候,用抽象類;當(dāng)你關(guān)注一個(gè)操作的時(shí)候,用接口。
抽象類的功能要遠(yuǎn)超過接口,但是,定義抽象類的代價(jià)高。因?yàn)楦呒?jí)語言來說(從實(shí)際設(shè)計(jì)上來說也是)每個(gè)類只能繼承一個(gè)類。在這個(gè)類中,你必須繼承或編寫出其所有子類的
所有共性。雖然接口在功能上會(huì)弱化許多,但是它只是針對(duì)一個(gè)動(dòng)作的描述。而且你可以在一個(gè)類中同時(shí)實(shí)現(xiàn)多個(gè)接口。在設(shè)計(jì)階段會(huì)降低難度的。接口是絕對(duì)抽象的,不可以被實(shí)例化。抽象類也不可以被實(shí)例化
以上就是北大青鳥長沙麓谷校區(qū)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“2020年互聯(lián)網(wǎng)經(jīng)典Java常見面試題目”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java面試題