Java 面試題之基礎篇

1. ".java" 源文件中可以包含多少個類?有什么限制火鼻?

可以包含多個類室囊,但只能包含一個public類,并且public類名必須與文件名相同凝危。通常一個文件里只包含一個類波俄。

2. switch語句能否作用在byte上,能否作用在long類型上蛾默,能否作用域String上懦铺?

switch(e),其中e必須是int型或 enum型支鸡,由于short冬念、char或者byte會自動轉為int的,所以牧挣,這些類型以及這些類型的包裝類型也是可以的急前。顯然,long類型是不可以的瀑构,String在jdk1.7之前不支持裆针,在此之后是支持的。

3.short s1 = 1; s1 = s1 + 1;有錯嗎寺晌?short s1 = 1; s1 += 1;有錯嗎世吨?

對于short s1=1;s1=s1+1;由于s1+1運算時會自動提升表達式的類型,所以結果是int型呻征,再賦值給short類型s1時編譯器將報告類型轉換錯誤耘婚。

對于short s1=1;s1 += 1;由于+=是java語言規(guī)定的運算符,java編譯器會對它進行特殊處理陆赋,因此可以正確編譯沐祷。

4.char類型變量占幾個字節(jié)嚷闭?

char型變量是用來存儲Unicode編碼的字符,占用兩個字節(jié)赖临。

5.使用final關鍵字修飾一個變量時胞锰,是引用不能變還是引用的對象不能變?

使用final關鍵字修飾一個變量時兢榨,是指引用變量不能變胜蛉,引用變量所指向的對象中的內(nèi)容還是可以改變的。例如色乾,對于如下語句:final StringBuffer sb = new StringBuffer("test");

sb = new StringBuffer(""); // 錯誤

sb.append("hello "); //正確

6.靜態(tài)變量和實例變量的區(qū)別?

在語言定義上的區(qū)別:靜態(tài)變量前要加static關鍵字领突,而實例變量前則不加

在程序運行時的區(qū)別:實例變量屬于某個對象的屬性暖璧,必須創(chuàng)建了實例對象,實例變量才會被分配空間君旦,才能使用這個實例變量澎办。靜態(tài)變量不屬于某個實例對象,而是屬于類金砍,所以也稱為類變量局蚀,只要程序加載了類的字節(jié)碼,不用創(chuàng)建如何實例對象恕稠,靜態(tài)變量就會被分配空間琅绅,靜態(tài)變量就可以被使用了《煳。總之千扶,實例變量必須創(chuàng)建對象后才可以通過這個對象來使用,靜態(tài)變量則可以直接使用類名來引用骆捧。

例如澎羞,對于下面的程序,無論創(chuàng)建多少個實例對象敛苇,永遠都只分配一個staticVar變量妆绞,并且每創(chuàng)建一個實例對象,這個staticVar就會加1枫攀;但是括饶,每創(chuàng)建一個實例對象,就會分配一個instanceVar脓豪,即可能分配多個instanceVar巷帝,并且每個instanceVar的值都只自加了1次。

public class Test{

?public static int staticVar = 0;

?public int instanceVar = 0;

?public void Add(){

? ?staticVar++;

? ?instanceVar++;

? ?System.out.println("static var=" + staticVar + "instance Var=" + instanceVar);

?}

}

7.是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用扫夜?

不可以楞泼。因為非static方法是要與對象關聯(lián)在一起的驰徊,必須創(chuàng)建一個對象后,才可以在該對象上進行方法調(diào)用堕阔,而static方法調(diào)用時不需要創(chuàng)建對象棍厂,可以直接調(diào)用。也就是說超陆,當一個static方法被調(diào)用時牺弹,可能還沒有創(chuàng)建任何實例對象,如果從一個static方法中發(fā)出對非static方法的調(diào)用时呀,那個非static方法是關聯(lián)到哪個對象上的呢张漂?這個邏輯無法成立,所以谨娜,一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用航攒。

8.Integer和int的區(qū)別?

int是java提供的8種原始數(shù)據(jù)類型之一趴梢。Java為每個原始類型提供了封裝類漠畜,Integer是java為int提供的封裝類。int的默認值為0坞靶,而Integer的默認值為null憔狞,即Integer可以區(qū)分出未賦值和值為0的區(qū)別,int則無法表達出未賦值的情況彰阴。

9.接口是否可繼承接口?抽象類是否可實現(xiàn)(implements)接口?抽象類是否可繼承具體類(concreteclass)?抽象類中是否可以有靜態(tài)的main方法瘾敢?

接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口硝枉,抽象類可以繼承具體類廉丽。抽象類中可以有靜態(tài)的main方法。

10.Java中實現(xiàn)多態(tài)的機制是什么妻味?

靠的是父類或接口定義的引用變量可以指向子類或具體實現(xiàn)類的實例對象正压,而程序調(diào)用的方法在運行期才動態(tài)綁定,就是引用變量所指向的具體實例對象的方法责球,也就是內(nèi)存里正在運行的那個對象的方法焦履,而不是引用變量的類型中定義的方法。

11.抽象類和接口有什么區(qū)別雏逾?

抽象類可以有構造方法嘉裤,接口中不能有構造方法。

抽象類中可以有普通成員變量栖博,接口中沒有普通成員變量

抽象類中可以包含非抽象的普通方法屑宠,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法仇让。

抽象類中的抽象方法的訪問類型可以是public典奉,protected和默認類型,但接口中的抽象方法只能是public類型的躺翻,并且默認即為public abstract類型。

抽象類中可以包含靜態(tài)方法卫玖,接口中不能包含靜態(tài)方法

抽象類和接口中都可以包含靜態(tài)成員變量公你,抽象類中的靜態(tài)成員變量的訪問類型可以任意,但接口中定義的變量只能是publicstatic final類型假瞬,并且默認即為publicstatic final類型陕靠。

一個類可以實現(xiàn)多個接口,但只能繼承一個抽象類脱茉。

12.內(nèi)部類可以引用它的包含類的成員嗎剪芥?有沒有什么限制?

完全可以琴许。如果不是靜態(tài)內(nèi)部類粗俱,則沒有什么限制。

如果你把靜態(tài)嵌套類當作內(nèi)部類的一種特例虚吟,那在這種情況下不可以訪問外部類的普通成員變量,而只能訪問外部類中的靜態(tài)成員签财,例如串慰,下面的代碼:

class Outer{

?static int x;

?static class Inner{

? ?void test()

? ?{

? ? ?System.out.println(x);

? ?}

?}

}?

13.String s = new String("xyz");創(chuàng)建了幾個StringObject?是否可以繼承String類?

兩個或者一個唱蒸,”xyz”作為一個常量對象邦鲫,這個對象會放在字符串常量緩沖區(qū),常量”xyz”不管出現(xiàn)多少遍神汹,在常量緩沖區(qū)中的只存在一個庆捺。new String("xyz")時,如果常量緩沖區(qū)不存在該對象屁魏,則需先在常量緩沖區(qū)創(chuàng)建一個新的對象滔以,然后在使用該常量緩沖區(qū)對象內(nèi)容來創(chuàng)建一個新String對象,因此會創(chuàng)建兩個對象氓拼,如果常量緩沖區(qū)以存在該對象("xyz")你画,則只會創(chuàng)建一個對象。

String類是不能繼承的桃漾,因為String默認final修飾坏匪,是不可繼承的。

14.下面這條語句一共創(chuàng)建了多少個對象:String s="a"+"b"+"c"+"d";

對于下面代碼:

String s1 = "a";

String s2 = s1 + "b";

String s3 = "a" + "b";

System.out.println(s2 == "ab");

System.out.println(s3 == "ab");

對于第一條打印結果為false;第二條語句打印結果為true撬统。這說明編譯器可以對字符串常量直接相加的表達式進行優(yōu)化适滓,不必要等到運行期再去進行加法運算處理,而是在編譯時去掉其中的加號恋追,直接將其編譯成一個這些常量相連的結果凭迹。

題目中的第一行代碼被編譯器在編譯時優(yōu)化后罚屋,相當于直接定義了一個"abcd"的字符串,所以蕊苗,上面的代碼應該只創(chuàng)建了一個String對象沿后。看如下代碼:

String s = "a" + "b" + "c" + "d"

System.out.println(s == "abcd"); ?//true

15.try {}里有一個return語句朽砰,那么緊跟在這個try后的finally{}里的code會不會被執(zhí)行尖滚,什么時候被執(zhí)行,在return前還是后?

我們知道finally{}里的語句是一定會執(zhí)行的瞧柔,那么這個是return之前還是return之后呢漆弄?看下面的代碼:

public class Test{

?public static void main(String[] args){

? ?System.out.println(new Test().test());

?}

?int test(){

? ?int x = 1;

? ?try{

? ? ?return x;

? ?}finally{

? ? ?++x;

? ?}

?}

}

運行的結果是1,說明return語句已經(jīng)執(zhí)行了再去執(zhí)行finally語句造锅,不過并沒有直接返回撼唾,而是將返回結果保存下來,然后去finally語句里執(zhí)行哥蔚。

16.final, finally, finalize的區(qū)別倒谷?

final用于聲明屬性,方法和類糙箍,分別表示屬性不可變渤愁,方法不可覆蓋,類不可繼承深夯。內(nèi)部類要訪問局部變量抖格,局部變量必須定義成final類型。

finally是異常處理語句結構的一部分咕晋,表示總是執(zhí)行雹拄。

finalize是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法掌呜,可以覆蓋此方法提供垃圾收集時的其他資源回收滓玖,例如關閉文件等。但是JVM不保證此方法總被調(diào)用质蕉。

17.運行時異常與一般異常有何異同?

異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài)呢撞,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤饰剥。java編譯器要求方法必須聲明拋出可能發(fā)生的非運行時異常殊霞,但是并不要求必須聲明拋出未被捕獲的運行時異常。

18. error和exception有申請區(qū)別汰蓉?

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題绷蹲。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。exception表示一種設計或?qū)崿F(xiàn)問題祝钢。也就是說比规,它表示如果程序運行正常,從不會發(fā)生的情況拦英。

19. Java 中堆和棧有什么區(qū)別蜒什?

JVM 中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同疤估。棧常用于保存方法幀和局部變量灾常,而對象總是在堆上分配。棧通常都比堆小铃拇,也不會在多個線程之間共享钞瀑,而堆被整個 JVM 的所有線程共享。

棧:在函數(shù)中定義的一些基本類型的變量和對象的引用變量都是在函數(shù)的棧內(nèi)存中分配慷荔,當在一段代碼塊定義一個變量時雕什,Java 就在棧中為這個變量分配內(nèi)存空間,當超過變量的作用域后显晶,Java 會自動釋放掉為該變量分配的內(nèi)存空間贷岸,該內(nèi)存空間可以立即被另作它用。

堆:堆內(nèi)存用來存放由 new 創(chuàng)建的對象和數(shù)組磷雇,在堆中分配的內(nèi)存凰盔,由 Java 虛擬機的自動垃圾回收器來管理。在堆中產(chǎn)生了一個數(shù)組或者對象之后倦春,還可以在棧中定義一個特殊的變量,讓棧中的這個變量的取值等于數(shù)組或?qū)ο笤诙褍?nèi)存中的首地址落剪,棧中的這個變量就成了數(shù)組或?qū)ο蟮囊米兞空霰荆院缶涂梢栽诔绦蛑惺褂脳V械囊米兞縼碓L問堆中的數(shù)組或者對象,引用變量就相當于是為數(shù)組或者對象起的一個名稱忠怖。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呢堰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凡泣,更是在濱河造成了極大的恐慌枉疼,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋拟,死亡現(xiàn)場離奇詭異骂维,居然都是意外死亡,警方通過查閱死者的電腦和手機贺纲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門航闺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事潦刃∥甏耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵乖杠,是天一觀的道長分扎。 經(jīng)常有香客問我,道長胧洒,這世上最難降的妖魔是什么畏吓? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮略荡,結果婚禮上庵佣,老公的妹妹穿的比我還像新娘。我一直安慰自己汛兜,他們只是感情好巴粪,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粥谬,像睡著了一般肛根。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漏策,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天派哲,我揣著相機與錄音,去河邊找鬼掺喻。 笑死芭届,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的感耙。 我是一名探鬼主播褂乍,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼即硼!你這毒婦竟也來了逃片?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤只酥,失蹤者是張志新(化名)和其女友劉穎褥实,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裂允,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡损离,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绝编。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片草冈。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怎棱,到底是詐尸還是另有隱情哩俭,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布拳恋,位于F島的核電站凡资,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谬运。R本人自食惡果不足惜隙赁,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梆暖。 院中可真熱鬧伞访,春花似錦、人聲如沸轰驳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽级解。三九已至冒黑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勤哗,已是汗流浹背抡爹。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芒划,地道東北人冬竟。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像民逼,于是被迫代替她去往敵國和親泵殴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 時間觀念缴挖!專注力! 1.早上在教室寫作業(yè)時不夠?qū)W⒎俑ǎ亩獾臎]有把握好時間映屋,導致最后任務沒有完成! 加強專注力的...
    橘子俠閱讀 152評論 0 0
  • 周瑜與煙水亭 一個城市大都會有一個城市的標志同蜻。如果說煙水亭是九江這座城市的標志棚点,相信沒有多少人會反對。位于潯城中心...
    百齡語閱讀 1,184評論 0 0
  • 這么晚回來湾蔓,家里又沒水了瘫析,好崩潰,嗚嗚嗚
    FineYoga蕓蕓閱讀 128評論 2 1
  • 總有人說你變了咸包,卻沒有人問過你經(jīng)歷了什么……
    橘色清揚閱讀 163評論 1 3