更新時(shí)間:2022-12-23 15:01:09 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1207次
1.String類(lèi)可以被繼承嗎?
不能。String類(lèi)在聲明中使用final關(guān)鍵字修飾符。使用final關(guān)鍵字修飾的類(lèi)無(wú)法被繼承。
Java語(yǔ)言的開(kāi)發(fā)者為什么要將String類(lèi)定義為final類(lèi)呢?
•因?yàn)楫?dāng)字符串是不可變的,字符串池才有可能實(shí)現(xiàn)。字符串池的實(shí)現(xiàn)可以在運(yùn)行時(shí)節(jié)約很多的堆空間,因?yàn)椴欢淖址兞慷贾赶虺刂械耐粋€(gè)字符串。如果字符串是可變的,那么字符串的駐留將不可能實(shí)現(xiàn),因?yàn)檫@樣的話(huà),
如果變量改變了它的值,那么其他指向這個(gè)值的變量也會(huì)一起改變。如果字符串是可變的那邊會(huì)引起很?chē)?yán)重的安全問(wèn)題。
•因?yàn)樽址遣豢勺兊模允嵌嗑€程安全的。同一個(gè)字符串實(shí)例可以可以被多個(gè)線程共享。這樣便不用因?yàn)榫€程安全問(wèn)題而使用同步。
•因?yàn)樽址遣豢勺兊模栽谒鼊?chuàng)建的時(shí)候HashCode就被緩存了,不需要重新計(jì)算。這就使得字符串很適合作為Map中的鍵,字符串中的處理速度要快于其他的鍵對(duì)象。這就是HashMap中的鍵往往都使用字符串。
2.final修飾符在Java中有什么用?
•final修飾的變量叫做常量,常量必須初始化,初始化后的值不能被修改。
•final修飾的方法不能被重載也不能被重寫(xiě)。
•final修飾的類(lèi)叫最終類(lèi),該類(lèi)不能被繼承。
3.JDK和JRE有什么區(qū)別?
JDK:Java Development Kit的簡(jiǎn)稱(chēng),Java開(kāi)發(fā)工具包,包含Java開(kāi)發(fā)環(huán)境和運(yùn)行環(huán)境。
JRE:Java Runtime Enviroment的簡(jiǎn)稱(chēng),Java運(yùn)行環(huán)境,為Java的運(yùn)行提供了所需的環(huán)境。
4.==和equals的區(qū)別是什么?
•==對(duì)于基本數(shù)據(jù)類(lèi)型和引用類(lèi)型的作用效果是不同,對(duì)于基本數(shù)據(jù)類(lèi)型比較的值是否相等,對(duì)于引用類(lèi)型比較的應(yīng)用是否相等。
•equals默認(rèn)情況先比較的引用是否相等,只是很多類(lèi)重寫(xiě)了Object類(lèi)的equals方法,比如String,Integer把equals方法變成了比較的值是否相等,所以一般情況下equals比較的是值是否相等。
5.&和&&的區(qū)別?
&和&&在程序中最終的運(yùn)算結(jié)果是一致的,區(qū)別在于:
•&運(yùn)算符是:邏輯與,&不管左邊表達(dá)式的結(jié)果是true還是false,右邊的表達(dá)式都一定會(huì)執(zhí)行;&運(yùn)算符還可以使用在二進(jìn)制位運(yùn)算上。
•&&運(yùn)算符是:短路與,&&運(yùn)算符當(dāng)左邊的表達(dá)式結(jié)果是false時(shí),右邊的表達(dá)式不執(zhí)行,存在短路現(xiàn)象。
6.重載(overload)和重寫(xiě)(override)的區(qū)別?
方法的重載和重寫(xiě)都是實(shí)現(xiàn)多態(tài)的方式,區(qū)別在于:
•重載實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性;重載發(fā)生在一個(gè)類(lèi)中,同名的方法如果有不同的參數(shù)列表(參數(shù)個(gè)數(shù),參數(shù)類(lèi)型,順序不同)則視為重載。
•重載實(shí)現(xiàn)的是運(yùn)行時(shí)的多態(tài)性;重寫(xiě)發(fā)生在子類(lèi)與父類(lèi)之間,重寫(xiě)要求子類(lèi)重寫(xiě)父類(lèi)的方法后與父類(lèi)重寫(xiě)的方法有相同的返回類(lèi)型,比父類(lèi)被重寫(xiě)方法更好訪問(wèn),不能比父類(lèi)被重寫(xiě)方法聲明更多的異常(里氏代換原則)。
方法重寫(xiě)的規(guī)則:
•參數(shù)列表、方法名、返回值類(lèi)型必須完全一致;
•構(gòu)造方法不能被重寫(xiě);
•聲明為 final 的方法不能被重寫(xiě);
•聲明為 static 的方法不存在重寫(xiě)(重寫(xiě)和多態(tài)聯(lián)合才有意義);
•訪問(wèn)權(quán)限不能比父類(lèi)更低;
•重寫(xiě)之后的方法不能拋出更寬泛的異常;
7.抽象類(lèi)(abstract)和接口(interface)有何異同?
•在實(shí)現(xiàn)方面:抽象類(lèi)的子類(lèi)用extends關(guān)鍵字來(lái)繼承;接口必須使用impelements關(guān)鍵字來(lái)實(shí)現(xiàn)接口。
•關(guān)于構(gòu)造函數(shù):抽象類(lèi)可以有構(gòu)造函數(shù),接口不能有。
•關(guān)于main方法:抽象了可以有mian方法,并且我們能夠運(yùn)行它,但接口不能有。
•在實(shí)現(xiàn)數(shù)量:類(lèi)可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類(lèi)。
•關(guān)于訪問(wèn)修飾符:接口中的方法默認(rèn)的修飾符是public;抽象類(lèi)中的訪問(wèn)修飾符可以是任意訪問(wèn)修飾符。
8.String str = "i" 和String str = new String("1")一樣嗎?
不一樣,因?yàn)閮?nèi)存的分配方式不一樣。String str = "i"的方式JVM會(huì)將其分配到常量池中,而String str = new String("i")JVM會(huì)將其分配到堆內(nèi)存中。
9.闡述靜態(tài)變量和實(shí)例變量的區(qū)別?
不管創(chuàng)建多少個(gè)對(duì)象,靜態(tài)變量在內(nèi)存中有且僅有一個(gè);實(shí)例變量必須依存于某一實(shí)例,需要先創(chuàng)建對(duì)象然后通過(guò)對(duì)象才能訪問(wèn)到它。靜態(tài)變量可以實(shí)現(xiàn)讓多個(gè)對(duì)象共享內(nèi)存。
10.String s = "Hello";s = s + " world!";這兩行代碼執(zhí)行后,原始的 String 對(duì)象中的內(nèi)容變了沒(méi)有?
沒(méi)有,因?yàn)?String被設(shè)計(jì)成不可變類(lèi),所以它的所有對(duì)象都是不可變對(duì)象。在這段代碼中,s原先指向一個(gè) String 對(duì)象,內(nèi)容是 "Hello",然后對(duì) s 進(jìn)行了“+”操作,但是 s 所指向的那個(gè)對(duì)象是還是沒(méi)有改變,這時(shí)s不指向原來(lái)那個(gè)對(duì)象,而指向了另一個(gè) String 對(duì)象,內(nèi)容為"Hello world!",原來(lái)那個(gè)對(duì)象還存在于內(nèi)存之中,只是 s 這個(gè)引用變量不再指向它。
11.Java 中操作字符串都有哪些類(lèi)?它們之間有什么區(qū)別?
操作字符串的類(lèi)有:String、StringBuffer、StringBuilder。
String 和 StringBuffer、StringBuilder 的區(qū)別在于 String 聲明的是不可變的對(duì)象,每次操作都會(huì)生成新的 String 對(duì)象,再將指針指向新的 String 對(duì)象,而 StringBuffer 、 StringBuilder 可以在原有對(duì)象的基礎(chǔ)上進(jìn)行操作,所以在經(jīng)常改變字符串內(nèi)容的情況下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的區(qū)別在于,StringBuffer 是線程安全的,而 StringBuilder 是非線程安全的,但 StringBuilder 的性能卻高于 StringBuffer,所以在單線程環(huán)境下推薦使用 StringBuilder,多線程環(huán)境下推薦使用 StringBuffer。
以上就是“Java基礎(chǔ)面試題及答案,只看這篇就夠了”,你能回答上來(lái)嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)