隨筆-144  評(píng)論-80  文章-1  trackbacks-0

          第一,談?wù)刦inal, finally, finalize的區(qū)別。
          final?修飾符(關(guān)鍵字)如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖儭1宦暶鳛閒inal的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載
          finally再異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。
          finalize方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。

          第二,Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)
          匿名的內(nèi)部類是沒(méi)有名字的內(nèi)部類。不能extends(繼承) 其它類,但一個(gè)內(nèi)部類可以作為一個(gè)接口,由另一個(gè)內(nèi)部類實(shí)現(xiàn)。

          第三,Static Nested Class 和 Inner Class的不同,說(shuō)得越多越好(面試題有的很籠統(tǒng))。
          Nested Class (一般是C++的說(shuō)法),Inner Class (一般是JAVA的說(shuō)法)。Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。具體可見(jiàn)
          http: //www.frontfree.net/articles/services/view.asp?id=704&page=1
          注: 靜態(tài)內(nèi)部類(Inner Class)意味著1創(chuàng)建一個(gè)static內(nèi)部類的對(duì)象,不需要一個(gè)外部類對(duì)象,2不能從一個(gè)static內(nèi)部類的一個(gè)對(duì)象訪問(wèn)一個(gè)外部類對(duì)象

          第四,&和&&的區(qū)別。
          &是位運(yùn)算符。&&是布爾邏輯運(yùn)算符。

          第五,HashMap和Hashtable的區(qū)別。
          都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。
          HashMap 類沒(méi)有分類或者排序。它允許一個(gè) null 鍵和多個(gè) null 值。
          Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因?yàn)樗峭降摹?

          第六,Collection 和 Collections的區(qū)別。
          Collections是個(gè)java.util下的類,它包含有各種有關(guān)集合操作的靜態(tài)方法。
          Collection是個(gè)java.util下的接口,它是各種集合結(jié)構(gòu)的父接口。

          第七,什么時(shí)候用assert。
          斷言是一個(gè)包含布爾表達(dá)式的語(yǔ)句,在執(zhí)行這個(gè)語(yǔ)句時(shí)假定該表達(dá)式為 true。如果表達(dá)式計(jì)算為 false,那么系統(tǒng)會(huì)報(bào)告一個(gè) AssertionError。它用于調(diào)試目的:
          assert(a > 0); // throws an AssertionError if a <= 0
          斷言可以有兩種形式:
          assert Expression1 ;
          assert Expression1 : Expression2 ;
          Expression1 應(yīng)該總是產(chǎn)生一個(gè)布爾值。
          Expression2 可以是得出一個(gè)值的任意表達(dá)式。這個(gè)值用于生成顯示更多調(diào)試信息的 String 消息。
          斷言在默認(rèn)情況下是禁用的。要在編譯時(shí)啟用斷言,需要使用 source 1.4 標(biāo)記:
          javac -source 1.4 Test.java
          要在運(yùn)行時(shí)啟用斷言,可使用 -enableassertions 或者 -ea 標(biāo)記。
          要在運(yùn)行時(shí)選擇禁用斷言,可使用 -da 或者 -disableassertions 標(biāo)記。
          要系統(tǒng)類中啟用斷言,可使用 -esa 或者 -dsa 標(biāo)記。還可以在包的基礎(chǔ)上啟用或者禁用斷言。
          可以在預(yù)計(jì)正常情況下不會(huì)到達(dá)的任何位置上放置斷言。斷言可以用于驗(yàn)證傳遞給私有方法的參數(shù)。不過(guò),斷言不應(yīng)該用于驗(yàn)證傳遞給公有方法的參數(shù),因?yàn)椴还苁欠駟⒂昧藬嘌裕蟹椒ǘ急仨殭z查其參數(shù)。不過(guò),既可以在公有方法中,也可以在非公有方法中利用斷言測(cè)試后置條件。另外,斷言不應(yīng)該以任何方式改變程序的狀態(tài)。

          第八,GC是什么? 為什么要有GC? (基礎(chǔ))。
          GC是垃圾收集器。Java 程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿?huì)自動(dòng)進(jìn)行管理。要請(qǐng)求垃圾收集,可以調(diào)用下面的方法之一:
          System.gc()
          Runtime.getRuntime().gc()

          第九,String s = new String("xyz");創(chuàng)建了幾個(gè)String Object?
          兩個(gè)對(duì)象,一個(gè)是“xyx”,一個(gè)是指向“xyx”的引用對(duì)象s。

          第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
          Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
          第二十一,abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?
          都不能

          第二十二,接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(implements)接口? 抽象類是否可繼承實(shí)體類(concrete class)?
          接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。

          第二十三,啟動(dòng)一個(gè)線程是用run()還是start()?
          啟動(dòng)一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來(lái)停止一個(gè)線程。

          第二十四,構(gòu)造器Constructor是否可被override?
          構(gòu)造器Constructor不能被繼承,因此不能重寫(xiě)Overriding,但可以被重載Overloading。

          第二十五,是否可以繼承String類?
          String類是final類故不可以繼承。

          第二十六,當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?
          不能,一個(gè)對(duì)象的一個(gè)synchronized方法只能由一個(gè)線程訪問(wèn)。

          第二十七,try {}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally {}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?
          會(huì)執(zhí)行,在return前執(zhí)行。

          第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
          有C背景的程序員特別喜歡問(wèn)這種問(wèn)題。

          2 << 3

          第二十九,兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)?
          不對(duì),有相同的hash code。

          第三十,當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?
          是值傳遞。Java 編程語(yǔ)言只由值傳遞參數(shù)。當(dāng)一個(gè)對(duì)象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí),參數(shù)的值就是對(duì)該對(duì)象的引用。對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變,但對(duì)象的引用是永遠(yuǎn)不會(huì)改變的。

          第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
          switch(expr1)中,expr1是一個(gè)整數(shù)表達(dá)式。因此傳遞給 switch 和 case 語(yǔ)句的參數(shù)應(yīng)該是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

          第三十二,編程題: 寫(xiě)一個(gè)Singleton出來(lái)。
          Singleton模式主要作用是保證在Java應(yīng)用程序中,一個(gè)類Class只有一個(gè)實(shí)例存在。
          一般Singleton模式通常有幾種種形式:
          第一種形式: 定義一個(gè)類,它的構(gòu)造函數(shù)為private的,它有一個(gè)static的private的該類變量,在類初始化時(shí)實(shí)例話,通過(guò)一個(gè)public的getInstance方法獲取對(duì)它的引用,繼而調(diào)用其中的方法。
          public class Singleton {
            private Singleton(){}
            //在自己內(nèi)部定義自己一個(gè)實(shí)例,是不是很奇怪?
            //注意這是private 只供內(nèi)部調(diào)用
            private static Singleton instance = new Singleton();
            //這里提供了一個(gè)供外部訪問(wèn)本class的靜態(tài)方法,可以直接訪問(wèn)  
            public static Singleton getInstance() {
              return instance;   
             }
          }
          第二種形式:
          public class Singleton {
            private static Singleton instance = null;
            public static synchronized Singleton getInstance() {
            //這個(gè)方法比上面有所改進(jìn),不用每次都進(jìn)行生成對(duì)象,只是第一次     
            //使用時(shí)生成實(shí)例,提高了效率!
            if (instance==null)
              instance=new Singleton();
          return instance;   }
          }
          其他形式:
          定義一個(gè)類,它的構(gòu)造函數(shù)為

          posted on 2005-03-10 17:36 小力力力 閱讀(223) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 松江区| 万全县| 西和县| 泰州市| 平武县| 胶南市| 朝阳市| 苗栗市| 林州市| 买车| 常熟市| 澄江县| 温宿县| 临夏市| 安国市| 老河口市| 盐津县| 德江县| 达孜县| 拉萨市| 临湘市| 大冶市| 响水县| 盐山县| 仁布县| 泰安市| 武川县| 太保市| 镇平县| 乌拉特中旗| 宝应县| 古浪县| 甘洛县| 东辽县| 浪卡子县| 利津县| 同仁县| 天津市| 阜新市| 南城县| 荔浦县|