一些關(guān)于Java基礎(chǔ)的面試題

1.面向?qū)ο缶幊逃心男┨攸c谷扣?

1.抽象:? ?抽象就是忽略一個主題中與當前目標無關(guān)的那些方面,以便更充分地注意與當前目標有關(guān)的方面捎琐。抽象并不打算了解全部問題会涎,而只是選擇其中的一部分,暫時不用部分細節(jié)瑞凑。比如末秃,我們要設(shè)計一個學(xué)生成績管理系統(tǒng),考察學(xué)生這個對象時籽御,我們只關(guān)心他的班級练慕、學(xué)號惰匙、成績等,而不用去關(guān)心他的身高铃将、體重這些信息项鬼。抽象包括兩個方面,一是過程抽象劲阎,二是數(shù)據(jù)抽象绘盟。過程抽象是指任何一個明確定義功能的操作都可被使用者看作單個的實體看待,盡管這個操作實際上可能由一系列更低級的操作來完成哪工。數(shù)據(jù)抽象定義了數(shù)據(jù)類型和施加于該類型對象上的操作奥此,并限定了對象的值只能通過使用這些操作修改和觀察。

2.繼承:? ?繼承是一種聯(lián)結(jié)類的層次模型雁比,并且允許和鼓勵類的重用叛买,它提供了一種明確表述共性的方法性芬。對象的一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性惠奸,新類稱為原始類的派生類(子類)飘痛,而原始類稱為新類的基類(父類)宇整。派生類可以從它的基類那里繼承方法和實例變量晌坤,并且類可以修改或增加新的方法使之更適合特殊的需要。這也體現(xiàn)了大自然中一般與特殊的關(guān)系丈牢。繼承性很好的解決了軟件的可重用性問題祭钉。比如說,所有的Windows應(yīng)用程序都有一個窗口己沛,它們可以看作都是從一個窗口類派生出來的慌核。但是有的應(yīng)用程序用于文字處理,有的應(yīng)用程序用于繪圖申尼,這是由于派生出了不同的子類垮卓,各個子類添加了不同的特性。

3.封裝:? ? 封裝是面向?qū)ο蟮奶卣髦皇δ唬菍ο蠛皖惛拍畹闹饕匦?/b>粟按。封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面霹粥。面向?qū)ο笥嬎闶加谶@個基本概念灭将,即現(xiàn)實世界可以被描繪成一系列完全自治、封裝的對象后控,這些對象通過一個受保護的接口訪問其他對象宗侦。一旦定義了一個對象的特性,則有必要決定這些特性的可見性忆蚀,即哪些特性對外部世界是可見的矾利,哪些特性用于表示內(nèi)部狀態(tài)。在這個階段定義對象的接口馋袜。通常男旗,應(yīng)禁止直接訪問一個對象的實際表示,而應(yīng)通過操作接口訪問對象欣鳖,這稱為信息隱藏察皇。事實上,信息隱藏是用戶對封裝性的認識泽台,封裝則為信息隱藏提供支持什荣。封裝保證了模塊具有較好的獨立性,使得程序維護修改較為容易怀酷。對應(yīng)用程序的修改僅限于類的內(nèi)部稻爬,因而可以將應(yīng)用程序修改帶來的影響減少到最低限度。

4. 多態(tài):? ?多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)蜕依。比如同樣的加法桅锄,把兩個時間加在一起和把兩個整數(shù)加在一起肯定完全不同。又比如样眠,同樣的選擇編輯-粘貼操作友瘤,在字處理程序和繪圖程序中有不同的效果。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性檐束。多態(tài)性語言具有靈活辫秧、抽象、行為共享被丧、代碼共享的優(yōu)勢盟戏,很好的解決了應(yīng)用程序函數(shù)同名問題。

面向?qū)ο蟪绦蛟O(shè)計具有許多優(yōu)點:

1晚碾、開發(fā)時間短抓半,效率高,可靠性高格嘁,所開發(fā)的程序更強壯笛求。由于面向?qū)ο缶幊痰目芍赜眯裕梢栽趹?yīng)用程序中大量采用成熟的類庫糕簿,從而縮短了開發(fā)時間探入。

2、應(yīng)用程序更易于維護懂诗、更新和升級蜂嗽。繼承和封裝使得應(yīng)用程序的修改帶來的影響更加局部化。

2.String和StringBuffer殃恒、StringBuilder的區(qū)別植旧?

1.String:是對象不是原始類型.為不可變對象,一旦被創(chuàng)建,就不能修改它的值.對于已經(jīng)存在的String對象的修改都是重新創(chuàng)建一個新的對象,然后把新的值保存進去.String 是final類,即不能被繼承

2.StringBuffer:是一個可變對象,當對他進行修改的時候不會像String那樣重新建立對象辱揭。它只能通過構(gòu)造函數(shù)來建立對象被建立以后,在內(nèi)存中就會分配內(nèi)存空間,并初始保存一個null.向StringBuffer中付值的時候可以通過它的append方法.線程安全,執(zhí)行速度慢病附。

3.StringBuilder:是一個可變對象问窃。線程不安全,執(zhí)行速度快完沪。

3.Int和Interger有什么區(qū)別域庇?

Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型);

int 是java 的原始數(shù)據(jù)類型覆积,Integer 是java 為int 提供的封裝類听皿。

Java 為每個原始類型提供了封裝類:

原始類型: boolean,char,byte,short,int,long,float,double

封裝類型:Boolean,Character宽档,Byte尉姨,Short,Integer雌贱,Long啊送,F(xiàn)loat,Double引用類型和原始類型的行為完全不同欣孤,并且它們具有不同的語義馋没。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題降传,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲篷朵,當引用類型和原始類型用作某個類的實例數(shù)據(jù)時所指定的缺省值。對象引用實例變量的缺省值為null婆排,而原始類型實例變量的缺省值與它們的類型有關(guān)声旺。

4.String類能否被繼承?

不能

String類方法頭部是:Public final class String extends Object,之所以不能被繼承是因為有修飾關(guān)鍵字final

final可以修飾類段只、變量和方法腮猖。

final修飾類的時候,這個類就不能被繼承了赞枕,類中的所有方法也就被隱式的變?yōu)榱薴inal方法澈缺;

final修飾變量的時候,相當于常量炕婶,只能被賦值一次姐赡,賦值以后就不能改變,這就表示了final修飾的變量必須初始化柠掂,初始化可以在聲明變量的時候项滑,也可以在構(gòu)造函數(shù)中初始化;

final修飾方法的類可以被繼承涯贞,但是final修飾的方法無法被覆寫枪狂。

5.棧與堆的概念及區(qū)別危喉。

?棧內(nèi)存:棧內(nèi)存首先是一片內(nèi)存區(qū)域,存儲的都是局部變量摘完,凡是定義在方法中的都是局部變量(方法外的是全局變量)姥饰,for循環(huán)內(nèi)部定義的也是局部變量,是先加載函數(shù)才能進行局部變量的定義孝治,所以方法先進棧,然后再定義變量审磁,變量有自己的作用域谈飒,一旦離開作用域,變量就會被釋放态蒂。棧內(nèi)存的更新速度很快杭措,因為局部變量的生命周期都很短。

? ? ?? 堆內(nèi)存:存儲的是數(shù)組和對象(其實數(shù)組就是對象)钾恢,凡是new建立的都是在堆中手素,堆中存放的都是實體(對象),實體用于封裝數(shù)據(jù)瘩蚪,而且是封裝多個(實體的多個屬性)泉懦,如果一個數(shù)據(jù)消失,這個實體也沒有消失疹瘦,還可以用崩哩,所以堆是不會隨時釋放的,但是棧不一樣言沐,棧里存放的都是單個變量邓嘹,變量被釋放了,那就沒有了险胰。堆里的實體雖然不會被釋放汹押,但是會被當成垃圾,Java有垃圾回收機制不定時的收取起便。

6.&與&&的區(qū)別棚贾?

&是位運算符,表示按位與運算缨睡,&&是邏輯運算符鸟悴,表示邏輯與(and)。

7.語句float f=1.3奖年;編譯能否通過细诸?

不能,應(yīng)該用強制類型轉(zhuǎn)換陋守,如下所示:float f=(float)1.3

8.short s1 = 1; s1 = s1 + 1;有什么錯?short s1 = 1; s1 += 1;有什么錯?

第一句有錯震贵,s1=s1+1需要進行強制轉(zhuǎn)換利赋,寫成s1=(short)(s1+1);

第二句沒有錯;

java規(guī)范有這樣的規(guī)則:高位轉(zhuǎn)低位需要強制轉(zhuǎn)換猩系;低位轉(zhuǎn)高位自動轉(zhuǎn)換媚送。

9.java語言中,有沒有g(shù)oto關(guān)鍵字寇甸?

goto是java語言中的保留字塘偎,目前還沒有在java中使用。

其實goto這個詞是C語言中的拿霉,goto語句通常與條件語句配合使用吟秩,可用來實現(xiàn)條件轉(zhuǎn)移, 構(gòu)成循環(huán)绽淘,跳出循環(huán)體等功能涵防。而在結(jié)構(gòu)化程序語言中一般不主張使用goto語句, 以免造成程序流程的混亂沪铭,使理解和調(diào)試程序都產(chǎn)生困難壮池。但是在java語言中,goto這個詞只是作為了保留字杀怠,還沒有使用椰憋。那是因為java語言講究簡單,方便驮肉。

10.數(shù)組有沒有l(wèi)ength()這個方法熏矿?String有沒有l(wèi)ength()這個方法?

數(shù)組沒有l(wèi)ength()這個方法离钝,但有l(wèi)ength這個屬性票编,用來表示數(shù)組的長度;String有l(wèi)ength()這個方法,用來得到字符串的長度卵渴,沒有l(wèi)ength這個屬性慧域。

11.接口與繼承的區(qū)別?

理論上:類只能單繼承浪读,接口可以多繼承(接口應(yīng)該叫實現(xiàn))昔榴;

區(qū)別1:不同的修飾符修飾(interface),(extends)

區(qū)別2:在面向?qū)ο缶幊讨锌梢杂卸嗬^承!但是只支持接口的多繼承,不支持’繼承’的多繼承哦

? ? ? ? ? ?而繼承在java中具有單根性,子類只能繼承一個父類

區(qū)別3:在接口中只能定義全局常量,和抽象方法

? ????????而在繼承中可以定義屬性方法,變量,常量等…

區(qū)別4:某個接口被類實現(xiàn)時,在類中一定要實現(xiàn)接口中的抽象方法

? ? ? ? ? 而繼承想調(diào)用那個方法就調(diào)用那個方法,毫無壓力

你可以有多個干爹(接口),但只能有一個親爹( 繼承)

12.Math.round(11.5)等於多少? Math.round(-11.5)等於多少碘橘?

Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回與參數(shù)最接近的長整數(shù)互订,參數(shù)加1/2后求其floor。

13.Static Nested Class 和 Inner Class的不同

Nested Class (一般是C++的說法)痘拆,Inner Class (一般是JAVA的說法)仰禽。Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。

注: 靜態(tài)內(nèi)部類(Inner Class)意味著

1.創(chuàng)建一個static內(nèi)部類的對象,不需要一個外部類對象吐葵,

2.不能從一個static內(nèi)部類的一個對象訪問一個外部類對象规揪。

14.error和exception有什么區(qū)別?

error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴重問題温峭。比如說內(nèi)存溢出猛铅。不可能指望程序能處理這樣的情況 ;

exception 表示一種設(shè)計或?qū)崿F(xiàn)問題凤藏。也就是說奸忽,它表示如果程序運行正常,從不會發(fā)生的情況揖庄。

15.List, Set, Map是否繼承自Collection接口

List月杉,Set是,Map不是抠艾。

16.接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承實體類(concrete class)

接口可以繼承接口;抽象類可以實現(xiàn)(implements)接口桨昙;抽象類是否可繼承實體類检号,但前提是實體類必須有明確的構(gòu)造函數(shù)。

17.用最有效率的方法算出2乘以8等於幾蛙酪?

2 << 3

表示 2向左移 3位:2 * 2^3(2的3次方) = 2 * 8齐苛;因為一個數(shù)左移 n位,就相當于 2的 n次方桂塞,那么一個數(shù)乘以 8只要將其左移 3位即可凹蜂,而為運算符的效率最高,所以 2乘以 8等于幾的最有效方法是 2<<3阁危。

18.GC是什么? 為什么要有GC玛痊?

GC是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰狂打,Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達到自動回收內(nèi)存的目的擂煞,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。

19.HashMap與Hashtable區(qū)別趴乡。

1对省、Hashtable比HashMap多提供了elments() 和contains() 兩個方法。HashMap是繼承自AbstractMap類晾捏,而HashTable是繼承自Dictionary類蒿涎。不過它們都實現(xiàn)了同時實現(xiàn)了map、Cloneable(可復(fù)制)惦辛、Serializable(可序列化)這三個接口

2劳秋、Hashtable是線程安全的,它的每個方法中都加入了Synchronize方法。在多線程并發(fā)的環(huán)境下俗批,可以直接使用Hashtable俗或,不需要自己為它的方法實現(xiàn)同步。

3岁忘、HashMap不是線程安全的辛慰,在多線程并發(fā)的環(huán)境下,可能會產(chǎn)生死鎖等問題干像。

雖然HashMap不是線程安全的帅腌,但是它的效率會比Hashtable要好很多。這樣設(shè)計是合理的麻汰。在我們的日常使用當中速客,大部分時間是單線程操作的。HashMap把這部分操作解放出來了五鲫。當需要多線程操作的時候可以使用線程安全的ConcurrentHashMap溺职。ConcurrentHashMap雖然也是線程安全的,但是它的效率比Hashtable要高好多倍位喂。因為ConcurrentHashMap使用了分段鎖浪耘,并不對整個數(shù)據(jù)進行鎖定。

20.ArrayList與LinkList比較塑崖。

ArrayList數(shù)據(jù)結(jié)構(gòu)(數(shù)組結(jié)構(gòu))

LinkList數(shù)據(jù)結(jié)構(gòu)(雙向循環(huán)鏈表結(jié)構(gòu))

結(jié)論:LinkList在增七冲、刪數(shù)據(jù)效率方面要優(yōu)于ArrayList,而ArrayList在改和查方面效率要遠超LinkList

還要說的是规婆,雖然綜合比較之下LinkList的優(yōu)勢要比ArrayList要好澜躺,但是在java中,我們用的比較多的確實ArrayList抒蚜,因為我們的業(yè)務(wù)通常是對數(shù)據(jù)的改和查用的比較多

21.Java中的基本類型和包裝類型區(qū)別掘鄙。

1、包裝類型可以為 null削锰,而基本類型不可以

2通铲、包裝類型可用于泛型,而基本類型不可以

泛型不能使用基本類型器贩,因為使用基本類型時會編譯出錯颅夺。

List list =newArrayList<>();// 提示 Syntax error, insert "Dimensions" to complete ReferenceTypeList list =newArrayList<>(); //這里就不會提示出錯

為什么呢?因為泛型在編譯時會進行類型擦除蛹稍,最后只保留原始類型吧黄,而原始類型只能是 Object 類及其子類——基本類型是個特例。

3唆姐、基本類型比包裝類型更高效

基本類型在棧中直接存儲的具體數(shù)值拗慨,而包裝類型則存儲的是堆中的引用。

4、兩個包裝類型的值可以相同赵抢,但卻不相等

兩個包裝類型的值可以相同剧蹂,但卻不相等——這句話怎么理解呢?來看一段代碼就明明白白了烦却。

Integer chenmo =newInteger(10);

Integer wanger =newInteger(10);

System.out.println(chenmo == wanger);//false

System.out.println(chenmo.equals(wanger ));// true

兩個包裝類型在使用“==”進行判斷的時候宠叼,判斷的是其指向的地址是否相等。chenmo 和 wanger 兩個變量使用了 new 關(guān)鍵字其爵,導(dǎo)致它們在“==”的時候輸出了 false冒冬。

而?chenmo.equals(wanger)?的輸出結(jié)果為 true,是因為 equals 方法內(nèi)部比較的是兩個 int 值是否相等摩渺。

5简烤、自動裝箱和自動拆箱

既然有了基本類型和包裝類型,肯定有些時候要在它們之間進行轉(zhuǎn)換摇幻。把基本類型轉(zhuǎn)換成包裝類型的過程叫做裝箱(boxing)横侦。反之,把包裝類型轉(zhuǎn)換成基本類型的過程叫做拆箱(unboxing)绰姻。

Java SE5 為了減少開發(fā)人員的工作丈咐,提供了自動裝箱與自動拆箱的功能。

Integer chenmo? = 10;// 自動裝箱

int wanger = chenmo;// 自動拆箱

22. == 與 equals 區(qū)別龙宏。

==操作比較的是兩個變量的值是否相等,對于引用型變量表示的是比較兩個變量在棧中存儲的地址是否相同伤疙。而equals操作表示兩個變量是否是對同一個對象的引用银酗,即堆中的內(nèi)容是否相同。簡單說就是徒像,==比較的是棧內(nèi)容(地址是否相同)黍特,equals比較的是堆內(nèi)容(值是否相同)。因此锯蛀,當equals為真時灭衷,==不一定為真。

Integer c =5;

Integer d =5;

Integer e =new Integer(5);

System.out.println(c==d);? ? //true

System.out.println(c.equals(d));? ? ?//true

System.out.println(c==e);? ?//false

System.out.println(c.equals(e));?? ?//true


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旁涤,一起剝皮案震驚了整個濱河市翔曲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劈愚,老刑警劉巖瞳遍,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異菌羽,居然都是意外死亡掠械,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猾蒂,“玉大人均唉,你說我怎么就攤上這事《遣ぃ” “怎么了舔箭?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長案糙。 經(jīng)常有香客問我限嫌,道長,這世上最難降的妖魔是什么时捌? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任怒医,我火速辦了婚禮,結(jié)果婚禮上奢讨,老公的妹妹穿的比我還像新娘稚叹。我一直安慰自己,他們只是感情好拿诸,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布扒袖。 她就那樣靜靜地躺著,像睡著了一般亩码。 火紅的嫁衣襯著肌膚如雪季率。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天描沟,我揣著相機與錄音飒泻,去河邊找鬼。 笑死吏廉,一個胖子當著我的面吹牛泞遗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播席覆,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼史辙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了佩伤?” 一聲冷哼從身側(cè)響起聊倔,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎生巡,沒想到半個月后方库,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡障斋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年纵潦,在試婚紗的時候發(fā)現(xiàn)自己被綠了徐鹤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡邀层,死狀恐怖返敬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寥院,我是刑警寧澤劲赠,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站秸谢,受9級特大地震影響凛澎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜估蹄,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一塑煎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧臭蚁,春花似錦最铁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至系枪,卻和暖如春雀哨,著一層夾襖步出監(jiān)牢的瞬間私爷,已是汗流浹背震束。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留当犯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓割疾,卻偏偏與公主長得像嚎卫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宏榕,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,090評論 1 32
  • 整理來自互聯(lián)網(wǎng) 1拓诸,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境麻昼,java的開發(fā)工具...
    Ncompass閱讀 1,537評論 0 6
  • 一:java概述: 1奠支,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境抚芦,java的開發(fā)...
    慕容小偉閱讀 1,774評論 0 10
  • 一:java概述:1倍谜,JDK:Java Development Kit迈螟,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,635評論 0 11
  • Java基礎(chǔ)面試 Java基礎(chǔ)面試... 1 1. Java基礎(chǔ)知識... 5 1.1. Java源程序的擴展名是...
    來著何人閱讀 1,178評論 0 1