![高軟面試題java部分_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/20ff2e56-f375-4f71-8325-783173d0c7f9/20ff2e56-f375-4f71-8325-783173d0c7f91.gif)
![高軟面試題java部分_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/20ff2e56-f375-4f71-8325-783173d0c7f9/20ff2e56-f375-4f71-8325-783173d0c7f92.gif)
![高軟面試題java部分_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/20ff2e56-f375-4f71-8325-783173d0c7f9/20ff2e56-f375-4f71-8325-783173d0c7f93.gif)
![高軟面試題java部分_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/20ff2e56-f375-4f71-8325-783173d0c7f9/20ff2e56-f375-4f71-8325-783173d0c7f94.gif)
![高軟面試題java部分_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/27/20ff2e56-f375-4f71-8325-783173d0c7f9/20ff2e56-f375-4f71-8325-783173d0c7f95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、(一)Java 部分1、JDK 中哪些類是不能繼承的?【信雅達(dá)面試題】【參考】不能繼承的是類是那些用 final 關(guān)鍵字修飾的類。一般比較基本的類型或防止擴(kuò)展類無意間破壞原來方法的實現(xiàn)的類型都應(yīng)該是 final 的。2、String 是最基本的數(shù)據(jù)類型嗎? 【天能智健面試題】【參考】基本數(shù)據(jù)類型包括 byte、int、char、long、float、double、boolean 和 short。所以 String 不屬于基本數(shù)據(jù)類型范疇內(nèi),但 String 屬于最常見一種類接口數(shù)組類型。3、Java 對象初始化順序?【騰鵬科技面試題】【參考】分為兩種,一種是本類的初始化,一種是含有父類的初始化
2、順序。這里來說,本類的初始化順序是:靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構(gòu)造函數(shù)繼承類的初始化順序是:父類靜態(tài)變量、父類靜態(tài)初始化塊、子類靜態(tài)變量、子類靜態(tài)初始塊、父類變量、父類初始化塊、父類構(gòu)造函數(shù)、子類變量、子類初始化塊、子類構(gòu)造函數(shù)?!痉治觥縮taticSystem.out.println("靜態(tài)塊");System.out.println("初始化模塊"); public ClassName() System.out.println("構(gòu)造方法");說明:原則上回答全面的話,應(yīng)該是完整的說出帶有繼承的這種類的初始化過程,下
3、面有個步驟可以參考:1. 裝載程序的時候首先找到的是它的基(父)類,如果有多層基(父)類則會一級一級的往上找最后找到根基(父)類。2. 執(zhí)行根基礎(chǔ)(父)類中的 static 初始化,再執(zhí)行下一個衍生類中的 static,依此類推,一直保持這個順序。3. 此時類已經(jīng)裝載完畢,開始創(chuàng)建對象,所有的基本數(shù)據(jù)類型都會設(shè)成它們的默認(rèn)值,對象句柄設(shè)為 null4. 調(diào)用基礎(chǔ)(父)類的構(gòu)造方法,基礎(chǔ)(父)類的構(gòu)建采用與衍生類構(gòu)造方法完全相同的處理過程。5. 構(gòu)造方法初始完之后,進(jìn)行變量的初始化。6. 執(zhí)行構(gòu)造方法中剩余的部分。4、寫幾個線程安全類,不安全的,支持排序的類名?【軟通動力面試題】【參考Ø
4、;Ø】線程安全類:Vector 、Hashtable、Stack。線程不安全的類:ArrayList、Linkedlist、HashSet、TreeSet、HashMap、TreeMap 等。支持排序的類有 HashSet、LinkedHashSet、TreeSet 等(Set 接口下的實現(xiàn)都支持排序)ØØ【分析】此題主要考查集合框架的知識。在集合框架中 Collection 接口為集合的根類型,提供集合操作的常用 API 方法,該接口下派生出兩個子接口,一個是不支持排序的 List 接口, 一個是有自身排序的 Set 接口,所以回答排序與不排序分別從兩接口的實現(xiàn)
5、中在作答。線程安全上來說,Vector 類比同屬于 List 接口的 ArrayList 要早,是一個線程安全的類,在JDK1.2 以后才推出一個異步的 ArrayList 類,比 Vector 類效率高。同理 Stack 繼承自 Vector 也線程安全的類,另外在在 Map 接口的實現(xiàn)在 Hashtable 也是個線程安全的類。5、哪幾個方法可以實現(xiàn)一個線程?【上海華信面試題】【參考】一是繼承 Thread ,重寫 Thread 類的方法 run 方法;另種是實現(xiàn) runnable 接口并實現(xiàn) run 方法?!痉治觥靠疾榫€程的基本實現(xiàn),很多公司喜歡考查這方面知識,另外補(bǔ)充一下關(guān)于線程的 r
6、un方法,在多線程 API 中啟動一個線程是調(diào)用 start()方法,線程進(jìn)入就緒狀態(tài)。6、STOP()和 SUSPEND()不推薦使用的原因?【參考】stop()是因為它不安全。它會解除由線程獲取的所有鎖定,當(dāng)在一個線程對象上調(diào)用 stop()方法時,這個線程對象所運行的線程就會立即停止,假如一個線程正在執(zhí)行:synchronizedvoid x = 3; y = 4;由于方法是同步的,多個線程時總能保證 x,y 被同時賦值,而如果一個線程正在執(zhí)行到 x = 3;時,被調(diào)用了 stop()方法,即使在同步塊中,它也干脆地 stop 了, 這樣就產(chǎn)生了 整的殘廢數(shù)據(jù)。而多線程編程中最最基礎(chǔ)的條
7、件要保證數(shù)據(jù)的完整性,所以請忘記線程的 stop 方法,以后我們再也不要說“停止線程”了。而且如果對象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。suspend()方法容易發(fā)生死鎖。調(diào)用 suspend()的時候,目標(biāo)線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能鎖定的,除非被"掛起"的線程恢復(fù)運行。對任何線程來說,如果它們想恢復(fù)目標(biāo)線程,同時又試圖使用任何一個鎖定的,就 會造成死鎖。所以不應(yīng)該使用 suspend(),而應(yīng)在自己的 Thread 類中置入一個標(biāo)志,指出線程應(yīng)該活動還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用 wait()
8、命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個 notify()重新啟動線程?!痉治觥?、"="和 equals 方法有什么區(qū)別?【軟】【參考】=操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應(yīng)的內(nèi)存中所的數(shù)值是否相同,要比較兩個基本類型的數(shù)據(jù)或兩個符。變量是否相等,只能用=操作如果一個變量指向的數(shù)據(jù)是對象類型的,那么,這時候涉及了兩塊內(nèi)存,對象本身占用一塊內(nèi)存(堆內(nèi)存),變量也占用一塊內(nèi)存,例如 Objet obj = new Object();變量 obj 是一個內(nèi)存,new Object()是另一個內(nèi)存,此時,變量 obj 所對應(yīng)的內(nèi)存中的數(shù)值就是
9、對象占用的那塊內(nèi)存的首地址。對于指向?qū)ο箢愋偷淖兞?,如果要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應(yīng)的內(nèi)存中的數(shù)值是否相等,這時候就需要用=操作符進(jìn)行比較。equals 方法是用于比較兩個相同,它比較的兩個對象是對象的內(nèi)容是否相同,就好比去比較兩個人的長相是否的。例如,對于下面的代碼:Stringa=new String("foo"); Stringb=new String("foo");兩條 new 語句創(chuàng)建了兩個對象,然后用 a,b 這兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即 a 和b 中的數(shù)值是不相同
10、的,所以,表達(dá)式 a=b 將返回 false,而這兩個對象中的內(nèi)容是相同的,所以,表達(dá)式 a.equals(b)將返回true。在實際開發(fā)中,我們經(jīng)常要比較傳遞進(jìn)行來的字符串內(nèi)容是否等,例如,String input= ;input.equals(“quit”),如果一個類沒有自己定義 equals 方法,那么它將繼承 Object類的 equals 方法,Object 類的 equals 方法的實現(xiàn)代碼如下:boolean equals(Object o) returnthis=o;這說明,如果一個類沒有自己定義 equals 方法,它默認(rèn)的 equals 方法(從 Object 類繼承的)
11、就是使用=操作符,也是在比較兩個變量指向的對象是否是同一對象,這時候使用equals 和使用=會得到同樣的結(jié)果,如果比較的是兩個的對象則總返回 false。如果你編寫的類希望能夠比較該類創(chuàng)建的兩個實例對象的內(nèi)容是否相同,那么你必須覆蓋 equals方法,由你自己寫代碼來決定在什么情況即可認(rèn)為兩個對象的內(nèi)容是相同的。8、靜態(tài)變量和實例變量的區(qū)別?【參考】在語法定義上的區(qū)別:靜態(tài)變量前要加 static 關(guān)鍵字,而實例變量前則不加。在程序運行時的區(qū)別:實例變量屬于某個對象的屬性,必須創(chuàng)建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態(tài)變量不屬于某個實例對象,而是屬于類,所以也稱
12、為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實例對象,靜態(tài)變量就會被分配空間,靜態(tài)變量就可以被使用了??傊?,實例變量必須創(chuàng)建對象后才可以通過這個對象來使用,靜態(tài)變量則可以直接使用類名來。例如,對于下面的程序,無論創(chuàng)建多少個實例對象,永遠(yuǎn)都只分配了一個 staticVar 變量,并且每創(chuàng)建一個實例對象,這個 staticVar 就會加 1;但是,每創(chuàng)建一個實例對象,就會分配一個 instanceVar,即可能分配多個 instanceVar,并且每個 instanceVar 的值都只自加了 1 次。public class VariantTestpublic static int stati
13、cVar = 0; public int instanceVar = 0;public VariantTest()staticVar+; instanceVar+;System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instanceVar);備注:這個解答除了說清楚兩者的區(qū)別外,最后還用一個具體的應(yīng)用例子來說明兩者的差異,體現(xiàn)了自己有很好的解說問題和設(shè)計案例的能力,思維敏捷,超過一般程序員,有寫作能力!9、構(gòu)造器的名能不能和類的名字相同?【參考】構(gòu)造器的名稱必須與類名相同?!痉治觥繕?gòu)造器或構(gòu)造函數(shù)(有些書這樣叫)主要用
14、來對類的成員變量進(jìn)行初始化,當(dāng)類創(chuàng)建實例時調(diào)用。10、在一個主方法類可不可以調(diào)用一個非靜態(tài)的方法?【參考】不可以調(diào)用。因為 Java 的主方法(main)方法本身也是 static 類型方法,一個 static類型方法,發(fā)起對另一個 static 方法的調(diào)用沒有問題?!痉治觥快o態(tài)方法可以調(diào)用其它的靜態(tài)方法,但是不能調(diào)用非靜態(tài)方法,這個好比 Java 中的類變量與實例變量的關(guān)系。類變量是被所有類成員共享,而實例變量只被該實例共享,11、GC 是什么,為什么要使用它?【阿斯拓】【參考】GC 是收集的意思(Gabage Collection),內(nèi)存處理是編程容易出現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收
15、會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至,Java 提供的 GC 功能可以自動監(jiān)測對象是否超過作用域,從而達(dá)到自動回收內(nèi)存的目的,Java 語言沒有提供已分配內(nèi)存的顯示操作方法?!痉治觥?2、說一下回收的原理,可以直接從內(nèi)存中回收嗎?【參考】Java 語言中一個顯著的特點就是引入了回收機(jī)制,使 c+程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得 Java 程序員在編寫程序的時候不再需要考慮內(nèi)存管理?;厥湛梢杂行У姆乐箖?nèi)存泄露,有效的使用可以使用的內(nèi)存?;厥掌魍ǔJ亲鳛橐粋€單獨的低級別的線程運行,不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)的或者長時間沒有使用的對象進(jìn)行清除和回收,程序員不能實時的調(diào)用回收器對某個對象或所有
16、對象進(jìn)行回收,因回收,為 Java 語言規(guī)范并不保證 GC 一定會執(zhí)行。回收機(jī)制有分代回收和標(biāo)記增量回收?!痉治觥?3、Java 的異常有哪幾種,有什么區(qū)別?【參考】兩大類,一般異常和運行時異常。一般異常,這些異常是在定義方法時拋出的,這些異常必需用try catch 拋出,或 throws 處理,如果不處理,程序?qū)⒕幾g失敗。比如:IOException、FileNotFoundException、SQLException 等。運行時異常是程序運行時可能報出的異常??梢杂?try catch 抓取,也可以不做任何處理。例如:NullPointerException 異常就是一種比較常見的運行時
17、異常?!痉治觥?4、Integer 與 int 的區(qū)別?【參考】int 是 java 提供的 8 種原始數(shù)據(jù)類型之一,另外 Java 為每個原始類型提供了封裝類,Integer 是 java 為 int 提供的封裝類。int 的默認(rèn)值為 0,而 Integer 的默認(rèn)值為 null,即Integer 可以區(qū)分出未賦值和值為 0 的區(qū)別,int 則無法表達(dá)出未賦值的情況。15、Java Reflection 是什么?【】【參考】JAVA 反射,Reflection 是 Java 程序開發(fā)語言的特征之一,它允許運行中的 Java 程序?qū)ψ陨磉M(jìn)行檢查,或者說"自審",并能直接操作
18、程序的內(nèi)部屬性。【分析】16、寫幾個 java.lang.Object 類中的方法名稱?!緟⒖肌恐饕?equals()、toString()、getClass()、hashCode()、clone()、notify()、wait()、notify()方法?!痉治觥窟@種題能記多少個就說多少個,不一定要求你所有的都記住,但是要理解其中部分重要方法的含義和作用。17、&和&&的區(qū)別?【參考】&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當(dāng)運算符兩邊的表達(dá)式的結(jié)果都為 true 時,整個運算結(jié)果才為 true,否則,只要有一方為 false,
19、則結(jié)果為 false。&&還具有短路的功能,即如果第一個表達(dá)式為 false,則不再計算第二個表達(dá)式。&還可以用作位運算符,當(dāng)&操作符兩邊的表達(dá)式不是 boolean 類型時,&表示按位與操作,我們通常使用 0x0f 來與一個整數(shù)進(jìn)行&運算,來獲取該整數(shù)的最低 4 個 bit 位?!痉治觥肯日f分別說兩者的作用,再說出&&和&各自的不同之處。18、數(shù)組有沒有 length()這個方法,String 有沒有 length()這個方法?!緟⒖肌繑?shù)組沒有 length()方法,但有 length 屬性String 有 length
20、()方法?!痉治觥靠疾槠綍r使用數(shù)組和字符串的一些細(xì)節(jié),一般在使用19、String s=new String(“xyz”)創(chuàng)建了幾個對象【參考】2 個 string 對象,一個是=null 的s,一個是=“xyz”的 string兩個或一個”xyz”對應(yīng)一個對象,這個對象放在字符串常量緩沖區(qū),常量”xyz”不管出現(xiàn)多少遍,都是緩沖區(qū)中的那一個。New String 每寫一遍,就創(chuàng)建一個新的對象,它一句那個常量”xyz”對象的內(nèi)容來創(chuàng)建出一個新 String 對象。如果以前就用過xyz,這句代表就 創(chuàng)建”xyz”自己了,直接從緩沖區(qū)拿?!痉治觥?0、最常見的 runtime exception
21、運行時異常?【參考】ClassCastException(類型轉(zhuǎn)換異常)、NumberFormatException(格式化異常)、ArrayIndexOutOfBoundsException ( 數(shù)組越界異常)、ArithmeticException ( 算術(shù)異常)、NullPointerException(空指針異常)等等【分析】這道題主要考查大家平時在項目開發(fā)過程中經(jīng)常遇到的一些異常類型信息,通過這些異常來考查大家的項目經(jīng)驗與項目排錯能力。21、用 JDBC 來實現(xiàn)數(shù)據(jù)庫可以采用下面的幾個步驟:【參考】1、2、3、4、5、6、7、通過驅(qū)動器管理器獲取連接接口(Connection)。獲得
22、 Statement 或它的子類。指定 Statement 中的參數(shù)。通過 StatementSQL 語句。檢查并處理返回的結(jié)果。關(guān)閉 Statement。關(guān)閉連接接【分析】22、Error 和 exception 的區(qū)別與【參考】error 表示恢復(fù)不是不可能,但很?的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢,網(wǎng)絡(luò)故障等,不可能指望程序能處理的一類錯誤。Exception 表示一種由程序設(shè)計或?qū)崿F(xiàn)問題,像我們常說的異常處理,就是屬于這類, 一般程序可以捕獲和處理這些異常。【分析】這道題的難點在Error 很多時候由于我們無法重現(xiàn)這種Error 導(dǎo)致很多同學(xué)甚至不知道Error 到底是什么,所以很容
23、易把題目中的兩種錯誤劃上等號。23、String s = "Hello"s = s + " world!"這兩行代碼執(zhí)行后,原始的 String對象中的內(nèi)容到底變了沒有?【參考】沒有。因為 String 被設(shè)計成不可變(immutable)類,所以它的所有對象都是不可變對象。在這段代碼中,s 原先指向一個 String 對象,內(nèi)容是 "Hello",然后我們對 s 進(jìn)行了+操作,那么s 所指向的那個對象是否發(fā)生了改變呢?是沒有。這時,s 不指向原來那個對象了,而指向了另一個 String 對象,內(nèi)容為"Helloworld!
24、",原來那個對象還存在于內(nèi)存之中,只是 s 這個變量不再指向它了。通過上面的說明,我們很容易導(dǎo)出另一個結(jié)論,如果經(jīng)常對字符串進(jìn)行各種各樣的修改,或者說,不可預(yù)見的修改,那么使用 String 來代表字符串的話會引起很大的內(nèi)存開銷。因為String 對象建立之后不能再改變,所以對于每一個不同的字符串,都需要一個 String 對象來表示。這時,應(yīng)該考慮使用 StringBuffer 類,它允許修改,而不是每個不同的字符串都要生成一個新的對象。并且,這兩種類的對象轉(zhuǎn)換十分容易。同時,我們還可以知道,如果要使用內(nèi)容相同的字符串,不必每次都 new 一個 String。例如我們要在構(gòu)造器中對
25、一個名叫 s 的 String當(dāng)這樣做:變量進(jìn)行初始化,把它設(shè)置為初始值,應(yīng)public private.publicclass DemoString s;Demos = "InitialValue".而非s = new String("Initial Value");后者每次都會調(diào)用構(gòu)造器,生成新對象,性能低下且內(nèi)存開銷大,并且沒有意義,因為 String 對象不可改變,所以對于內(nèi)容相同的字符串,只要一個 String 對象來表示就可以了。也就說,多次調(diào)用上面的構(gòu)造器創(chuàng)建多個對象,他們的 String 類型屬性 s 都指向同一個對象。上面的結(jié)論還基于這
26、樣一個事實:對于字符串常量,如果內(nèi)容相同,Java 認(rèn)為它們代表同一個 String 對象。而用關(guān)鍵字 new 調(diào)用構(gòu)造器,總是會創(chuàng)建一個新的對象,無論內(nèi)容是否相同。至于為什么要把 String 類設(shè)計成不可變類,是它的用途決定的。其實不只 String,很多 Java標(biāo)準(zhǔn)類庫中的類都是不可變的。在開發(fā)一個系統(tǒng)的時候,我們有時候也需要設(shè)計不可變類, 來傳遞一組相關(guān)的值,這也是面向?qū)ο笏枷氲捏w現(xiàn)。不可變類有一些優(yōu)點,比如因為它的對象是只讀的,所以多線程并發(fā)也有任何問題。當(dāng)然也有一些缺點,比如每個不同的能上的問題。所以 Java 標(biāo)準(zhǔn)類庫還提供了一個可狀態(tài)都要一個對象來代表,可能會造變版本,即 S
27、tringBuffer。24、面向?qū)ο蟮奶卣饔心男┓矫??【參考】面向?qū)ο蟮木幊陶Z言有封裝、繼承u 封裝、多態(tài)等 3 個主要的特征。封裝是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ),封裝的目標(biāo)就是要實現(xiàn)軟件部件的“高內(nèi)聚、低耦合”,防止程序相互依賴性而帶來的變動影響。面向?qū)ο蟮姆庋b就是把描述一個對象的屬性和行為的代碼封裝在一個“模塊”中,也就是一個類中,屬性用變量定義,行為用方法進(jìn)行定義,方法可以直接u 繼承同一個對象中的屬性。在定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎(chǔ)之上來進(jìn)行,把這個已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并可以加入若干新的內(nèi)容,或修改原來的方法使之更適合特殊的需要,這就
28、是繼承。繼承是子類自動共享父類數(shù)據(jù)和方法的機(jī)制,這是類之間的一種關(guān)系,提高了軟件的可重用性和可擴(kuò)展性。u 多態(tài)多態(tài)是指程序中定義的變量所指向的具體類型和通過該變量發(fā)出的方法調(diào)用在編程時并不確定,而是在程序運行期間才確定,即一個變量倒底會指向哪個類的實例對象,該變量發(fā)出的方法調(diào)用到底是哪個類中實現(xiàn)的方法,必須在由程序運行期間才能決定。因為在程序運行時才確定具體的類,這樣,不用修改源程序代碼,就可以讓變量綁定到各種不同的類實現(xiàn)上,從而導(dǎo)致該調(diào)用的具體方法隨之改變,即不修改程序代碼就可以改變程序運行時所綁定的具體代碼,讓程序可以選擇多個運行狀態(tài),這就是多態(tài)性。多態(tài)性增強(qiáng)了軟件的靈活性和擴(kuò)展性。25、
29、JVM 工作原理?運行 jvm 字符碼的工作是由解釋器來完成的。解釋執(zhí)行過程分三步進(jìn)行: 代碼的裝入、代碼的校驗、和代碼的執(zhí)行。裝入代碼的工作由“類裝載器 class loader”完成。類裝載器負(fù)責(zé)裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被調(diào)用的類。當(dāng)類裝載器裝入一個類時,該類被放在自己的名字空間中。除了通過符號自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本臺計算機(jī)的所有類都在同一地址空間中,而所有從外部引進(jìn)的類,都有一個自己的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進(jìn)的類相互影響。當(dāng)裝入了運行程序需要的
30、所有類后,解釋器便可確定整個可執(zhí)行程序的內(nèi)存布局。解釋器為符號與特定的地址空間建立對應(yīng)關(guān)系及表。通過在這一階段確定代碼的內(nèi)布局,java 很好地解決了由超類改變而使子類的問題,同時也防止了代碼的校驗器可以發(fā)現(xiàn)操作數(shù)棧益處、行了。Java 字節(jié)碼的執(zhí)行有兩種方式:。隨后,被裝入的代碼由字節(jié)碼校驗器進(jìn)行檢查。數(shù)據(jù)類型轉(zhuǎn)化等多種錯誤。通過校驗后,代碼便開始執(zhí)1)即時編譯方式:解釋器先將字節(jié)編譯成碼,然后再執(zhí)行該碼。2)解釋執(zhí)行方式:解釋器通過每次解釋并執(zhí)行一小段代碼來完成 java 字節(jié)。碼程序的所有操作。26、說說 Java 中的內(nèi)存分配?Java 把內(nèi)存分成兩種,一種叫做棧內(nèi)存,一種叫做堆內(nèi)存在
31、函數(shù)中定義的一些基本類型的變量和對象的變量都是在函數(shù)的棧內(nèi)存中分配。當(dāng)在一段代碼塊中定義一個變量時,java 就在棧中為這個變量分配內(nèi)存空間,當(dāng)超過變量的作用域后,java 會自動掉為該變量分配的內(nèi)存空間,該內(nèi)存空間可以立刻被另作它用。堆內(nèi)存用于存放由 new 創(chuàng)建的對象和數(shù)組。在堆中分配的內(nèi)存,由 java 虛擬機(jī)自動垃圾回收器來管理。在堆中產(chǎn)生了一個數(shù)組或者對象后,還可以在棧中定義一個特殊的變量,這個變量的取值等于數(shù)組或者對象在堆內(nèi)存中的首地址,在棧中的這個特殊的變量就變成了數(shù)組或者對象的變量,以后就可以在程序中使用棧內(nèi)存中的變量來堆中的數(shù)組或者對象,變量相當(dāng)于為數(shù)組或者對象起的一個別名,
32、或者代號。變量是普通變量,定義時在棧中分配內(nèi)存,變量在程序運行到作用域外。而數(shù)組對象本身在堆中分配,即使程序運行到使用 new 產(chǎn)生數(shù)組和對象的語句所在地代碼塊之外,數(shù)組和對象本身占用的堆內(nèi)存也被,數(shù)組和對象在沒有變量指向它的時候,才變成,不能再被使用,但是仍然占著內(nèi)存,在隨后的一個不確定的時間被垃圾回收器掉。這個也是 java 比較占內(nèi)存的主要原因。但是在寫程序的時候,可以人為的控制。27、final, finally, finalize 的區(qū)別。【參考final內(nèi)部類要】用于屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。局部變量,局部變量必須定義成 final 類型,例如,
33、一段代碼finally 是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。finalize 是 Object 類的一個方法,在收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,回收,例如關(guān)閉文件等。JVM 不保證此方法總被可以覆蓋此方法提供調(diào)用收集時的其他28、Extends 和 Implement 的不同?【參考】extends 是繼承父類,只要那個類不是為 final 或者那個類定義為 abstract 的就能繼承,JAVA 中不支持多重繼承,但是可以用接口來實現(xiàn),這樣就要用到 implements,繼承只能繼承一個類,但 implements 可以實現(xiàn)多個接口,用逗號比如 class A extends
34、 B implements C,D,E就行了29、抽象類是否可以沒有抽象方法?為什么?【參考】可以在 java 中用 abstract 關(guān)鍵字來修飾一個類時,這個類叫做抽象類。抽象類中不一定要包含 abstract 方法,但一個類中包含了 abstract 方法,則這個類必為 abstract 類。須30、靜態(tài)的多態(tài)和動態(tài)的多態(tài)的區(qū)別?【參考】靜態(tài)的多態(tài): 即為重載 ;方法名相同,參數(shù)個數(shù)或類型不相同。(overloading)動態(tài)的多態(tài): 即為重寫;子類覆蓋父類的方法,將子類的實例傳與父類的調(diào)用的是子類的方法實現(xiàn)接口的實例傳與接口的調(diào)用的實現(xiàn)類的方法。31、說出一些常用的類,包,接口,請各舉
35、 5 個?【參考】常用的類:String、StringBuffer、 Integer 、Vector、ArrayList、Hashtable等常用的包:java.langjava.iojava.util 、java.sql 。常用的接口:集合中的List、Set、 Map接口;與Servlet API相關(guān)的Servlet接口、HttpServletRequest,HttpServletResponse,HttpSession接口等。32、Collections 和 Collection 的區(qū)別【天晟科技】【參考】Collection 是個 java.util 下的接口,它是各種集合結(jié)構(gòu)的父接口
36、,定義了集合對象的基本操作方法。Collections 是個 java.util 下的工具類,它包含有各種有關(guān)集合操作的靜態(tài)方法,主要是針對集合類的一個幫助類或者叫包裝類,它提供一系列對各種集合的搜索,排序,線程安全化等操作方法。33、Class.forName 的作用?為什么要用?【參考】按參數(shù)中指定的字符串形式的類名去搜索并加載相應(yīng)的類,如果該類字節(jié)碼已經(jīng)被加載過,則返回代表該字節(jié)碼的 Class 實例對象,否則,按類加載器的委托機(jī)制去搜索和加載該類,如果所有的類加載器都無法加載到該類,則拋出 ClassNotFoundException。加載完這個 Class 字節(jié)碼后,接著就可以使用
37、Class 字節(jié)碼的 newInstance 方法去創(chuàng)建該類的實例對象了。有時候,我們程序中所有使用的具體類名在設(shè)計時(即開發(fā)時)無法確定,只有程序運行時才能確定,這時候就需要使用 Class.forName 去動態(tài)加載該類,這個類名通常是在配置文件中配置的,例如,spring 的 ioc 中每次依賴注入的具體類就是這樣配置的,jdbc 的驅(qū)動類名通常也是通過配置文件來配置的,以便在換驅(qū)動類名。交付使用后不用修改源程序就可以更34、接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承具體類【天威誠信面試題】【參考】接口可以繼承接口。抽象類可以實現(xiàn)(implem
38、ents)接口,抽象類是否可繼承具體類。抽象類中可以有靜態(tài)的 main 方法。備注:只要明白了接口和抽象類的本質(zhì)和作用,這些問題都很好回答,你想想,如果你是 java 語言的設(shè)計者,你是否會提供這樣的支持,如果不提供的話,有什么理由嗎?如果你沒有道理不提供,那就是肯定的了。只有記住抽象類與普通類的唯一區(qū)別就是不能創(chuàng)建實例對象和允許有 abstract 方法。35、char 型變量中能不能存貯一個中文漢字?為什么?【參考】char 型變量是用來以,char 型變量中當(dāng)然可以Unicode 編碼的字符的,unicode 編碼字符集中包含了漢字,所漢字啦。不過,如果某個特殊的漢字沒有被包含在 uni
39、code編碼字符集中,那么,這個 char 型變量中就不能這個特殊漢字。補(bǔ)充說明:unicode編碼占用兩個字節(jié),所以,char 類型的變量也是占用兩個字節(jié)。36、寫 clone()方法時,通常都有一行代碼,是什么?【參考】clone 有缺省行為,super.clone();因為首先要把父類中的成員己的成員。到位,然后才是自37、說說常用集合類有哪些?有哪些方法?【參考】通常我們使用的集合類都大多是由 List、Set、Map 這三類接口派生出來的類,例如:ArrayList、Vector、LinkedList、Stack、TreeSet、Hashtable、HashMap 等集合類的大部分方
40、法都是由 Collection 接口定義的,主要包括有:add(E e)、remove(Object e)、addAll(),remove()、contains(Object obj)、clear()等38、請說出作用域 public,private,protected,以及不寫時的區(qū)別?【天威誠信面試題】【參考】這四個作用域的可見范圍如下表所示。說明:如果在修飾的元素上面沒有寫任何修飾符,則表示 friendly。作用域public protected friendlyprivate同一類同一 package 子孫類其他 package××××
41、5;×備注:只要記住了有 4 種權(quán)限,4 個范圍,然后將全選和范圍在水平和垂直方向上分別按排從小到大或從大到小的順序排列,就很容易畫出上面的圖了。39、構(gòu)造器 Constructor 是否可被 override? 【億陽通訊面試題】【參考】構(gòu)造器 Constructor 不能被繼承,因此不能重寫 Override,但可以被重載 Overload。40、是否可以從一個 static 方法內(nèi)部發(fā)出對非 static 方法的調(diào)用? 【世承軟件面試題】【參考】不可以。因為非 static 方法是要與對象關(guān)聯(lián)在一起的,必須創(chuàng)建一個對象后,才可以在該對象上進(jìn)行方法調(diào)用,而 static 方法調(diào)用
42、時不需要創(chuàng)建對象,可以直接調(diào)用。41、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?【霧隱美地傳媒】【參考】Math 類中提供了三個與取整有關(guān)的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對應(yīng),例如,ceil 的英文意義是天花板,該方法就表示向上取整, 所以,Math.ceil(11.3)的結(jié)果為 12,Math.ceil(-11.3)的結(jié)果是-11;floor 的英文意義是地板,該方法就表示向下取整,所以,Math.floor(11.6)的結(jié)果為 11,Math.floor(-11.6) 的結(jié)果是-12;最難掌握的是
43、 round 方法,它表示“四舍五入”,算法為 Math.floor(x+0.5), 即將原來的數(shù)字加上 0.5 后再向下取整, 所以, Math.round(11.5) 的結(jié)果為 12 ,Math.round(-11.5)的結(jié)果為-11。42、abstract class(抽象類)和 interface(接口)有什么區(qū)別? 【題】應(yīng)用中心面試【參考】含有 abstract 修飾符的 class 即為抽象類,abstract 類不能創(chuàng)建的實例對象。含有abstract 方法的類必須定義為 abstract class,abstract class 類中的方法不必是抽象的。 abstract c
44、lass 類中定義抽象方法必須在具體(Concrete)子類中實現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果的子類沒有實現(xiàn)抽象父類中的所有抽象方法,那么子類也必須定義為 abstract 類型。接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認(rèn)為 public abstract 類型,接口中的成員變量類型默認(rèn)為 public static final。下面比較一下兩者的語法區(qū)別:1. 抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。2. 抽象類中可以有普通成員變量,接口中沒有普通成員變量3. 抽象類中可以包含非抽象的普通方法,接口中的所有
45、方法必須都是抽象的,不能有非抽象的普通方法。4. 抽象類中的抽象方法的類型可以是 public,protected 和(默認(rèn)類型,雖然eclipse 下不報錯,但應(yīng)該也不行),但接口中的抽象方法只能是 public 類型的,并且默認(rèn)即為 public abstract 類型。5. 抽象類中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法6. 抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的類型可以任意,但接口中定義的變量只能是 public static final 類型,并且默認(rèn)即為 public static final 類型。7. 一個類可以實現(xiàn)多個接口,但只能繼承一個抽象類。下面
46、接著再說說兩者在應(yīng)用上的區(qū)別:【分析】這道題的思路是先從總體解釋抽象類和接口的基本概念,然后再比較兩者的語法細(xì)節(jié), 最后再說兩者的應(yīng)用區(qū)別。比較兩者語法細(xì)節(jié)區(qū)別的條理是:先從一個類中的構(gòu)造方法、普通成員變量和方法(包括抽象方法),靜態(tài)變量和方法,繼承性等方面來回答。43、Collection 框架中實現(xiàn)比較要實現(xiàn)什么接口?【參考】Comparable、Comparator 接口44、是否可以繼承 String 類?【參考】String 類是 final 類故不可以繼承。45、String 和 StringBuffer 的區(qū)別【參考】JAVA 平臺提供了兩個類:String 和 StringBu
47、ffer,它們可以儲存和操作字符串,即包含多個字符的字符數(shù)據(jù)。String 類表示內(nèi)容不可改變的字符串。而 StringBuffer 類表示內(nèi)容可以被修改的字符串。當(dāng)你知道字符數(shù)據(jù)要改變的時候你就可以使用 StringBuffer。典型地, 你可以使用 StringBuffers 來動態(tài)構(gòu)造字符數(shù)據(jù)。另外,String 實現(xiàn)了 equals 方法,new String(“abc”).equals(new String(“abc”)的結(jié)果為 true,而 StringBuffer 沒有實現(xiàn) equals方法,所以,new StringBuffer(“abc”).equals(new String
48、Buffer(“abc”)的結(jié)果為 false。String 覆蓋了 equals 方法和 hashCode 方法,而 StringBuffer 沒有覆蓋 equals 方法和hashCode 方法,所以,將 StringBuffer 對象進(jìn) Java 集合類中時會出現(xiàn)問題。46、StringBuffer 與 StringBuilder 的區(qū)別【參考】StringBuffer 和 StringBuilder 類都表示內(nèi)容可以被修改的字符串,StringBuilder是線程不安全的,運行效率高,如果一個字符串變量是在方法里面定義,這種情況只可能有一個線程它,不存在不安全的因素了,則用 Strin
49、gBuilder。如果要在類里面定義成員變量,并且這個類的實例對象會在多線程環(huán)境下使用,那么最好用 StringBuffer。47、try 里有一個 return 語句,那么緊跟在這個 try 后的 finally被執(zhí)行,什么時候被執(zhí)行,在 return 前還是后? 【杭州天眼科技】【參考】是在 return 之前?!痉治觥砍绦虼a的運行結(jié)果:publicclass Test public static void main(String args) 里的 code 會/ TODO Auto-generatedSystem.out.println(newmethod stubTest().tes
50、t();static int test()int x = 1; tryreturn x;finally+x;執(zhí)行結(jié)果1運行結(jié)果是 1,為什么呢?主函數(shù)調(diào)用子函數(shù)并得到結(jié)果的過程,好比主函數(shù)準(zhǔn)備一個空罐子,當(dāng)子函數(shù)要返回結(jié)果時,先把結(jié)果放在罐子里,然后再將程序邏輯返回到主函數(shù)。所謂返回,就是子函數(shù)說,我不運行了,你主函數(shù)繼續(xù)運行吧,這沒什么結(jié)果可言,結(jié)果是在說這話之前放進(jìn)罐子里的。下面的程序代碼輸出的結(jié)果是多少?public classsmallTpublic staticsmallT t intb=voidmain(String args)= newsmallT();t.get();Syste
51、m.out.println(b);public intget()tryreturn 1 ;finallyreturn 2 ;返回的結(jié)果是 2。我可以通過下面一個例子程序來幫助我解釋這個,從下面例子的運行結(jié)果中可以發(fā)現(xiàn),try 中的 return 語句調(diào)用的函數(shù)先于 finally 中調(diào)用的函數(shù)執(zhí)行,也就是說 return 語句先執(zhí)行,finally 語句后執(zhí)行,所以,返回的結(jié)果是 2。Return 并不是讓函數(shù)馬上返回,而是return 語句執(zhí)行后,將把返回結(jié)果放置進(jìn)函數(shù)棧中,此時函數(shù)并不是馬上返回,它要執(zhí)行finally 語句后才真正開始返回。在講解 時可以用下面的程序來幫助分析:publi
52、c class Test /* param args add by zxx ,Dec 9, 2008*/public static void main(String args) / TODO Auto-generated method stub System.out.println(new Test().test();int test()tryreturn func1();finallyreturn func2();int func1()System.out.println("func1"); return 1;int func2()System.out.println(&
53、quot;func2"); return 2;執(zhí)行結(jié)果func1 func2 2結(jié)論:finally 中的代碼比 return 和 break 語句后執(zhí)行。48、Java 中的異常處理機(jī)制的簡單原理和應(yīng)用。【參考】異常是指 java 程序運行時(非編譯)所發(fā)生的情況或錯誤,與現(xiàn)實生活中的事件很相似,現(xiàn)實生活中的可以包含發(fā)生的時間、地點、人物、情節(jié)等信息,可以用一個對象來表示,Java 使用面向?qū)ο蟮姆绞絹硖幚懋惓?,它把程序中發(fā)生的每個異常也都分別封裝到一個對象來表示的,該對象中包含有異常的信息。Java 對異常進(jìn)行了分類,不同類型的異常分別用不同的 Java 類表示,所有異常的根類為
54、 java.lang.Throwable,Throwable 下面又派生了兩個子類:Error 和 Exception,Error 表示應(yīng)用程序本身無法克服和恢復(fù)的一種嚴(yán)重問題,程序只有死的份了,例如,說內(nèi)存溢出和線程死鎖等系統(tǒng)問題。Exception 表示程序還能夠克服和恢復(fù)的問題,其中又分為系統(tǒng)異常和普通異常,系統(tǒng)異常是軟件本身缺陷所導(dǎo)致的問題,也就是軟件開發(fā)考慮不周所導(dǎo)致的問題,軟件使用者無法克服和恢復(fù)這種問題,但在這種問題下還可以讓軟件系統(tǒng)繼續(xù)運行或者讓軟件死掉,例如,數(shù)組越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerExcep
55、tion)、類轉(zhuǎn)換異常(ClassCastException);普通異常是運行環(huán)境的變化或異常所導(dǎo)致的問題,是用戶能夠克服的問題,例如,網(wǎng)絡(luò)斷線,硬盤空間不夠,發(fā)生這樣的異常后,程序不應(yīng)該死掉。java 為系統(tǒng)異常和普通異常提供了不同的解決方案,編譯器強(qiáng)制普通異常必須 try.catch處理或用 throws繼續(xù)拋給上層調(diào)用方法處理,所以普通異常也稱為 checked 異常,而系統(tǒng)異??梢蕴幚硪部梢圆惶幚?,所以,編譯器不強(qiáng)制用try.catch 處理或用throws所以系統(tǒng)異常也稱為 unchecked 異常。,49、多線程有幾種實現(xiàn)方法?同步有幾種實現(xiàn)方法?【參考】多線程有兩種實現(xiàn)方法,分別是繼承 Thread 類與實現(xiàn) Runnable 接口。同步的實現(xiàn)方面有兩種,分別是 synchronized,wait 與 notify 。a.b.wait():使一個線程處于等待狀態(tài),并且所持有的對象的 lock。sleep():使一個正在運行的線程處于睡眠狀態(tài),是一個靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException 異常。notify():喚醒一個處于等待狀態(tài)的線
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年罐頭盒蠟燭項目可行性研究報告
- 2025年靈芝醬鵪鶉項目可行性研究報告
- 2025至2030年中國雷帕酶素數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年雙門無斗文件柜項目投資價值分析報告
- 全新廠房轉(zhuǎn)讓協(xié)議合同
- 勞務(wù)承包合同變更協(xié)議書
- 月付房屋租賃合同范本
- 鄉(xiāng)鎮(zhèn)簡裝修房屋出租合同范本
- 裝飾工程施工分包合同范本
- 企業(yè)管理咨詢的合同
- 營銷管理方案中的定價策略與盈利模式
- 2024年西寧城市職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 2024年臨沂市高三一模(學(xué)業(yè)水平等級考試模擬試題)物理試卷
- 廣州獵德大橋三維曲面塔清水混凝土施工技術(shù)
- 我國糖尿病視網(wǎng)膜病變臨床診療指南2022解讀
- 高級茶藝師技能鑒定(協(xié)會版)備考題庫-下(多選、判斷題匯總)
- 特種設(shè)備作業(yè)人員體檢表(叉車)
- c30混凝土路面施工方案
- 加強(qiáng)師德師風(fēng)建設(shè)學(xué)校師德師風(fēng)警示教育講座培訓(xùn)課件
- 豬飼料購銷合同書
- 電商運營銷售計劃Excel模版
評論
0/150
提交評論