面試題答案詳解_第1頁(yè)
面試題答案詳解_第2頁(yè)
面試題答案詳解_第3頁(yè)
面試題答案詳解_第4頁(yè)
面試題答案詳解_第5頁(yè)
已閱讀5頁(yè),還剩406頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、筆試題之 Java 基礎(chǔ)部分基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法, 線程的語(yǔ)法,集合的語(yǔ)法,io 的語(yǔ)法,虛擬機(jī)方面的語(yǔ)法,其他。有些題來(lái)自網(wǎng)上搜集整理,有些題來(lái)自傳智播客學(xué)員面試后的反饋,說(shuō)真的,少數(shù)一些網(wǎng)上的面試題,懷疑其是否還有存在價(jià)值!1、一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?可以有多個(gè)類,但只能有一個(gè) public 的類,并且 public 的類名必須與文件名相一致。2、Java 有沒(méi)有 goto?java 中的保留字,現(xiàn)在沒(méi)有在 java 中使用。3、說(shuō)說(shuō)&和&&

2、;的區(qū)別。&和&&都可以用作邏輯與的運(yùn)算符,表示邏輯與(and),當(dāng)運(yùn)算符兩邊的表true 時(shí),的結(jié)果整個(gè)運(yùn)算結(jié)果才為 true,否則,只要有一方為 false,則結(jié)果為 false。&&還具有短路的功能,即如果第一個(gè)表if(str != null為 false,則不再計(jì)算第二個(gè)表,例如,對(duì)于&& !str.equals(“”)表NullPointerException,當(dāng) str 為 null 時(shí),后面的表執(zhí)行,所以出現(xiàn)如果將&&改為&,則會(huì)拋出 NullPointerException 異常。If(x=33 &

3、amp; +y>0) y 會(huì)增長(zhǎng),If(x=33 && +y>0)增長(zhǎng)&還可以用作位運(yùn)算符,當(dāng)&操作符兩邊的表們通常不是 boolean 類型時(shí),&表示按位與操作,我使用 0x0f 來(lái)與一個(gè)整數(shù)進(jìn)行&運(yùn)算,來(lái)獲取該整數(shù)的最低 4 個(gè) bit 位,例如,0x31 & 0x0f 的結(jié)果為 0x01。備注:這道題先說(shuō)兩者的共同點(diǎn),再說(shuō)出&&和&的特殊之處,并列舉一些經(jīng)典的例子來(lái)表明自己理解透徹深入、實(shí)際經(jīng)驗(yàn)豐富。4、在 JAVA 中如何跳出當(dāng)前的多重嵌套循環(huán)?在 Java 中,要想跳出多重循環(huán),可以在外面的循

4、環(huán)語(yǔ)句前定義一個(gè)標(biāo)號(hào),然后在里層循環(huán)體的代碼中使用帶有標(biāo)號(hào)的 break 語(yǔ)句,即可跳出外層循環(huán)。例如,ok:for(int i=0;i<10;i+)for(int j=0;j<10;j+)System.out.println(“i=”+ i + “,j=” + j);if(j = 5) break ok;另外,我個(gè)人通常并不使用標(biāo)號(hào)這種方式,而是讓外層的循環(huán)條件表循環(huán)體的結(jié)果可以受到里層代碼的,例如,要在二維數(shù)組中查找到某個(gè)數(shù)字。int arr = 1,2,3,4,5,6,7,9;boolean found = false;for(int i=0;i<arr.length

5、&& !found;i+)for(int j=0;j<arri.length;j+)System.out.println(“i=”+i+“,j=”+j);if(arrij =5)found = true;break;5、switch 語(yǔ)句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?在 switch(expr1)中,expr1 只能是一個(gè)整數(shù)表式可以是 int或者枚舉常量(更大字體),整數(shù)表達(dá)基本類型或 Integer 包裝類型,由于,byte,short,char 都可以隱含轉(zhuǎn)換為 int,所以,這些類型以及這些類型的包裝類型也是可以

6、的。顯然,long 和 String 類型都不符合 switch 的語(yǔ)被隱式轉(zhuǎn)換成 int定,并且不能類型,所以,它們不能作用于 swtich 語(yǔ)句中。6、short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?對(duì)于 short s1 = 1; s1 = s1 + 1; 由于 s1+1 運(yùn)算時(shí)會(huì)自動(dòng)提升表int 型,再賦值的類型,所以結(jié)果是給 short 類型 s1 時(shí),編譯器將報(bào)告需要強(qiáng)制轉(zhuǎn)換類型的錯(cuò)誤。對(duì)于 short s1 = 1; s1 += 1;由于 += 是 java 語(yǔ)言規(guī)定的運(yùn)算符,java 編譯器會(huì)對(duì)它進(jìn)行特殊處理

7、,因此可以正確編譯。7、char 型變量中能不能存貯一個(gè)中文漢字?為什么?char 型變量是用來(lái)char 型變量Unicode 編碼的字符的,unicode 編碼字符集中包含了漢字,所以,中當(dāng)然可以漢字啦。不過(guò),如果某個(gè)特殊的漢字沒(méi)有被包含在 unicode 編碼字符集中,那么,這個(gè) char型變量中就不能的變量也是占這個(gè)特殊漢字。補(bǔ)充說(shuō)明:unicode 編碼占用兩個(gè)字節(jié),所以,char 類型用兩個(gè)字節(jié)。備注:后面一部分回答雖然不是在正面回答題目,但是,為了展現(xiàn)的學(xué)識(shí)和表現(xiàn)題理解對(duì)問(wèn)的透徹深入,可以回答一些相關(guān)的知識(shí),做到知無(wú)不言,言無(wú)不盡。8、用最有效率的方法算出 2 乘以 8 等於幾?2

8、 << 3,因?yàn)閷⒁粋€(gè)數(shù)左移 n 位,就相當(dāng)于乘以了 2 的n 次方,那么,一個(gè)數(shù)乘以 8 只要將其左移 3 位即可,而位運(yùn)算 cpu 直接支持的,效率最高,所以,2 乘以 8 等於幾的最效率的方法是 2 << 3。9、請(qǐng)?jiān)O(shè)計(jì)一個(gè)一百億的計(jì)算器首先要明白這道題目的考查點(diǎn)是什么,一是大家首先要對(duì)計(jì)算機(jī)原理的底層細(xì)節(jié)要清楚、要知道加減法的位運(yùn)算原理和知道計(jì)算機(jī)中的算術(shù)運(yùn)算會(huì)發(fā)生越界的情況,二是要具備一定的面向?qū)ο蟮脑O(shè)計(jì)思想。首先,計(jì)算機(jī)中用固定數(shù)量的幾個(gè)字節(jié)來(lái)的數(shù)值,所以計(jì)算機(jī)中能夠表示的數(shù)值是有一定的范圍的,為了便于講解和理解,我們先以 byte 類型的整數(shù)為例,它用 1

9、 個(gè)字節(jié)進(jìn)行最大數(shù)值范圍,表示的為-128 到+127。-1 在內(nèi)存中對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)為 11111111,如果兩個(gè)-1 相加,不考慮 Java運(yùn)算時(shí)的類型提升,運(yùn)算后會(huì)產(chǎn)生進(jìn)位,二進(jìn)制結(jié)果為 1,11111110,由于進(jìn)位后超過(guò)了 byte 類型的間,所以進(jìn)位部空分被舍棄,即最終的結(jié)果為 11111110,也就是-2,這正好利用溢位的方式實(shí)現(xiàn)了負(fù)數(shù)的運(yùn)算。-128 在內(nèi)存中對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)為 10000000,如果兩個(gè)-128 相加,不考慮 Java 運(yùn)算時(shí)的類型提升,運(yùn)算后會(huì)產(chǎn)生進(jìn)位,二進(jìn)制結(jié)果為 1,00000000,由于進(jìn)位后超過(guò)了 byte 類型的即最終的結(jié)果空間,所以進(jìn)位部分被舍棄

10、,為 00000000,也就是 0,這樣的結(jié)果顯然不是我們期望的,這說(shuō)明計(jì)算機(jī)中的算術(shù)運(yùn)算是會(huì)發(fā)生越界情況的,兩個(gè)數(shù)值的運(yùn)算結(jié)果不能超過(guò)計(jì)算機(jī)中的該類型的數(shù)值范圍。由于 Java 中涉及表算時(shí)的類型自運(yùn)動(dòng)提升,我們無(wú)法用 byte 類型來(lái)做演示這種問(wèn)題和現(xiàn)象的實(shí)驗(yàn),大家可以用下面一個(gè)使用整數(shù)做實(shí)驗(yàn)的例子程序體驗(yàn)一下:inta =Integer.MAX_VALUE;intb =Integer.MAX_VALUE;intsum= a + b;System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);先不考慮 long 類型,由于 int 的正數(shù)范圍為 2 的 3

11、1 次方,表示的最大數(shù)值約等于2*1000*1000*1000,也就是 20 億的大小,所以,要實(shí)現(xiàn)一個(gè)一百億的計(jì)算器,我們得示很大的整數(shù),設(shè)計(jì)一個(gè)類可以用于表并且提供了與另外一個(gè)整數(shù)進(jìn)行加減乘除的功能,大概功能如下:()這個(gè)類內(nèi)部有兩個(gè)成員變量,一個(gè)表示符號(hào),另一個(gè)用字節(jié)數(shù)組表示數(shù)值的二進(jìn)制數(shù)()有一個(gè)構(gòu)造方法,把一個(gè)包含有多位數(shù)值的字符串轉(zhuǎn)換到內(nèi)部的符號(hào)和字節(jié)數(shù)組中()提供加減乘除的功能public class BigIntegerint sign;byteval;publicBiginteger(Stringval)sign =;val = ;public BigInteger add(

12、BigInteger other)publicBigIntegersubtract(BigIntegerother)publicBigIntegermultiply(BigIntegerother)publicBigIntegerdivide(BigInteger other)備注:要想寫(xiě)出這個(gè)類的完整代碼,是非常復(fù)雜的,如果有的話,可以參看 jdk 中自帶的java.math.BigInteger 類的源碼。面試的人也知道誰(shuí)都不可能在短時(shí)間內(nèi)寫(xiě)出這個(gè)類的完整代碼的,他要的是你是否有這方面的概念和意識(shí),他最重要的還是考查你的能力,所以,你不要因?yàn)閷?xiě)出完整的無(wú)法最終結(jié)果就放棄答這道題,你要做的就

13、是你比別人寫(xiě)得多,證明你比別人強(qiáng),你有這方面的思想意識(shí)就可以了,畢竟別人可能連題目的意思都看不懂,什么都沒(méi)寫(xiě),你要敢于答這道題,即使只答了一部分,與那些什么都不懂的人區(qū)別出來(lái),拉開(kāi)了距離,算是矮子中的高個(gè),機(jī)會(huì)當(dāng)然就屬于你了。另外,中的框架代碼也很重要,體現(xiàn)了一些面向?qū)ο笤O(shè)計(jì)的功底,特別是其中的方法命名很專業(yè),用的英文單詞很精準(zhǔn),這也是能力、經(jīng)驗(yàn)、專業(yè)性、英語(yǔ)水平等多個(gè)方面的體現(xiàn),會(huì)給人留下很好的印象,在編程能力和其他方面條件差不多的情,英語(yǔ)好除了可以使你獲得機(jī)會(huì)外,薪水可以高出一千元。10、使用 final 關(guān)鍵字修飾一個(gè)變量時(shí),是不能變,還是的對(duì)象不能變?使用 final 關(guān)鍵字修飾一個(gè)變

14、量時(shí),是指是可以改變量不能變,變量所指向的對(duì)象中的內(nèi)容還變的。例如,對(duì)于如下語(yǔ)句:final StringBuffer a=new StringBuffer("immutable");執(zhí)行如下語(yǔ)句將報(bào)告編譯期錯(cuò)誤:a=new StringBuffer("");但是,執(zhí)行如下語(yǔ)句則可以通過(guò)編譯:a.append(" broken!");有人在定義方法的參數(shù)時(shí),可能想采用如下形式來(lái)方法內(nèi)部修改傳進(jìn)來(lái)的參數(shù)對(duì)象:public void method(final StringBuffer param)實(shí)際上,這是辦不到的,在該方法內(nèi)部仍然可以

15、增加如下代碼來(lái)修改參數(shù)對(duì)象:param.append("a");11、"="和 equals 方法究竟有什么區(qū)別?(單獨(dú)把一個(gè)東西說(shuō)清楚,然后再說(shuō)清楚另一個(gè),這樣,它們的區(qū)別自然就出來(lái)了,混在一起說(shuō),則很難說(shuō)清楚)=操作符專門(mén)用來(lái)比較兩個(gè)變量的值是否相等,也就是用于比較變量所對(duì)應(yīng)的內(nèi)存中所數(shù)值是的否相同,要比較兩個(gè)基本類型的數(shù)據(jù)或兩個(gè)變量是否相等,只能用=操作符。如果一個(gè)變量指向的數(shù)據(jù)是對(duì)象類型的,那么,這時(shí)候涉及了兩塊內(nèi)存,對(duì)象本身占用一塊內(nèi)存(堆內(nèi)存),變量也占用一塊內(nèi)存,例如 Objet obj = new Object();變量 obj 是一個(gè)內(nèi)

16、存,new Object()是另一個(gè)內(nèi)存,此時(shí),變量 obj 所對(duì)應(yīng)的內(nèi)存中對(duì)象類型的的數(shù)值就是對(duì)象占用的那塊內(nèi)存的首地址。對(duì)于指向變量,如果要比較兩個(gè)變量是否指向同一個(gè)對(duì)象,即要看這兩個(gè)變量所對(duì)應(yīng)的內(nèi)存中的數(shù)值是否相等,這時(shí)候就需要用=操作符進(jìn)行比較。equals 方法是用于比較兩個(gè)同,它比較對(duì)象的內(nèi)容是否相同,就好比去比較兩個(gè)人的長(zhǎng)相是否相的兩個(gè)對(duì)象是的。例如,對(duì)于下面的代碼:String a=newString("foo");String b=newString("foo");兩條 new 語(yǔ)句創(chuàng)建了兩個(gè)對(duì)象,然后用 a,b 這兩個(gè)變量分別指向了其

17、中一個(gè)對(duì)象,這是兩個(gè)不同的對(duì)象,它們的首地址是不同的,即 a 和 b 中false,而這的數(shù)值是不相同的,所以,表a=b 將返回兩個(gè)對(duì)象中的內(nèi)容是相同的,所以,表a.equals(b)將返回 true。在實(shí)際開(kāi)發(fā)中,我們經(jīng)常要比較傳遞進(jìn)行來(lái)的字符串內(nèi)容是否等,例如,String input= ;input.equals(“quit”),許多人稍不注意就使用=進(jìn)行比較了,這是錯(cuò)誤的,隨便從網(wǎng)上找?guī)讉€(gè)項(xiàng)目實(shí)戰(zhàn)的教學(xué)法。看看,里面就有大量這樣的錯(cuò)誤。記住,字符串的比較基本上都是使用 equals 方如果一個(gè)類沒(méi)有定義 equals 方法,那么它將繼承 Object 類的 equals 方法,Obje

18、ct 類的equals 方法的實(shí)現(xiàn)代碼如下:boolean equals(Object o)return this=o;這說(shuō)明,如果一個(gè)類沒(méi)有的)就是使定義 equals 方法,它默認(rèn)的 equals 方法(從 Object 類繼承用=操作符,也是在比較兩個(gè)變量指向的對(duì)象是否是同一對(duì)象,這時(shí)候使用 equals 和使用= 會(huì)得到同樣的結(jié)果,如果比較的是兩個(gè)的兩個(gè)實(shí)例對(duì)的對(duì)象則總返回 false。如果你編寫(xiě)的類希望能夠比較該類創(chuàng)建象的內(nèi)容是否相同,那么你必須覆蓋 equals 方法,由你為兩個(gè)對(duì)象的寫(xiě)代碼來(lái)決定在什么情況即可認(rèn)內(nèi)容是相同的。12、靜態(tài)變量和實(shí)例變量的區(qū)別?在語(yǔ)法定義上的區(qū)別:靜態(tài)

19、變量前要加 static 關(guān)鍵字,而實(shí)例變量前則不加。在才會(huì)被行時(shí)的區(qū)別:實(shí)例變量屬于某個(gè)對(duì)象的屬性,必須創(chuàng)建了實(shí)例對(duì)象,其中的實(shí)例變量分配空間,才能使用這個(gè)實(shí)例變量。靜態(tài)變量不屬于某個(gè)實(shí)例對(duì)象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實(shí)例對(duì)象,靜態(tài)變量就會(huì)被分配空間,靜態(tài)變量就可以被使用了。總之,實(shí)例變量必須創(chuàng)建對(duì)象后才可以通過(guò)這個(gè)對(duì)象來(lái)使用,靜態(tài)變量則可以直接使用類名來(lái)。例如,對(duì)于下面的程序,無(wú)論創(chuàng)建多少個(gè)實(shí)例對(duì)象,永遠(yuǎn)都只分配了一個(gè) staticVar 變量,并且每創(chuàng)建一個(gè)實(shí)例對(duì)象,這個(gè) staticVar 就會(huì)加 1;但是,每創(chuàng)建一個(gè)實(shí)例對(duì)象,就會(huì)分配一個(gè)i

20、nstanceVar,即可能分配多個(gè) instanceVar,并且每個(gè) instanceVar 的值都只自加了 1 次。public class VariantTestpublicstatic int staticVar=0;publicint instanceVar = 0;publicVariantTest()staticVar+;instanceVar+;System.out.println(“staticVar=”+ staticVar + ”,instanceVar=”+ instanceVar);備注:這個(gè)解答除了說(shuō)清楚兩者的區(qū)別外,最后還用一個(gè)具體的應(yīng)用例子來(lái)說(shuō)明兩者的差異, 體

21、現(xiàn)了有很好的解說(shuō)問(wèn)題和設(shè)計(jì)案例的能力,思維敏捷,超過(guò)一般程序員,有寫(xiě)作能力!13、是否可以從一個(gè) static 方法內(nèi)部發(fā)出對(duì)非 static 方法的調(diào)用?不可以。因?yàn)榉?static 方法是要與對(duì)象關(guān)聯(lián)在一起的,必須創(chuàng)建一個(gè)對(duì)象后,才可以在該對(duì)象上進(jìn)行方法調(diào)用,而 static 方法調(diào)用時(shí)不需要?jiǎng)?chuàng)建對(duì)象,可以直接調(diào)用。也就是說(shuō),當(dāng)一個(gè) static 方法被調(diào)用時(shí),可能還沒(méi)有創(chuàng)建任何實(shí)例對(duì)象,如果從一個(gè) static 方法中發(fā)出對(duì)非 static 方法的調(diào)用,那個(gè)非static 方法是關(guān)聯(lián)到哪個(gè)對(duì)象上的呢?這個(gè)邏輯無(wú)法成立,所以,一個(gè) static 方法內(nèi)部發(fā)出對(duì)非 static 方法的調(diào)用。

22、14、Integer 與 int 的區(qū)別int 是 java 提供的 8 種原始數(shù)據(jù)類型之一。Java 為每個(gè)原始類型提供了封裝類,Integer 是java 為 int 提供的封裝類。int 的默認(rèn)值為 0,而 Integer 的默認(rèn)值為 null,即 Integer 可以區(qū)分出未賦值和值為 0 的區(qū)別,int 則無(wú)法表達(dá)出未賦值的情況,例如,要想表達(dá)出沒(méi)有參加只能使用 Integer。和成績(jī)?yōu)?0 的區(qū)別,則在 JSP 開(kāi)發(fā)中,Integer 的默認(rèn)為 null,所以用 el 表串,而 int 默認(rèn)在文本框中顯示時(shí),值為空白字符的默認(rèn)值為 0,所以用 el 表的表單數(shù)據(jù)的在文本框中顯示時(shí),

23、結(jié)果為 0,所以,int 不適合作為 web 層類型。在 Hibernate 中,如果將 OID 定義為 Integer 類型,那么 Hibernate 就可以根據(jù)其值是否為null 而一個(gè)對(duì)象是否是臨時(shí)的,如果將 OID 定義為了 int 類型,還需要在 hbm unsaved-value 屬性文件中設(shè)置其為 0。另外,Integer 提供了多個(gè)與整數(shù)相關(guān)的操作方法,例如,將一個(gè)字符串轉(zhuǎn)換成整數(shù),Integer 中還定義了表示整數(shù)的最大值和最小值的常量。15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?Math 類中提供了三個(gè)與取整有關(guān)的方法:ce

24、il、floor、round,這些方法的作用與它們的英文名稱的含義相對(duì)應(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;最難掌握的是 round 方法,它表示“四舍五入”,算法為Math.floor(x+0.5),即將原來(lái)的數(shù)字加上 0.5 后再向下取整,所以,Math.round(11.5)的結(jié)果為 12,Math.round(-

25、11.5)的結(jié)果為-11。15、下面的代碼有什么不妥之處?1. if(username.equals(“zxx”)2. int x = 1;return x=1?true:false;1、請(qǐng)說(shuō)出作用域 public,private,protected,以及不寫(xiě)時(shí)的區(qū)別這四個(gè)作用域的可見(jiàn)范圍如下表所示。說(shuō)明:如果在修飾的元素上面沒(méi)有寫(xiě)任何修飾符,則表示 friendly。作用域 當(dāng)前類 同一 package 子孫類 其他 packagepublic protected ×friendly × ×private × × ×備注:只要記住了

26、有 4 種別按排權(quán)限,4 個(gè)范圍,然后將全選和范圍在水平和垂直方向上分從小到大或從大到小的順序排列,就很容易畫(huà)出上面的圖了。2、Overload 和 Override 的區(qū)別。Overloaded 的方法是否可以改變返回值的類型?Overload 是重載的意思,Override 是覆蓋的意思,也就是重寫(xiě)。重載 Overload 表示同一個(gè)類中可以有多個(gè)名稱相同的方法,但這些方法的參數(shù)列表各不相同(即參數(shù)個(gè)數(shù)或類型不同)。重寫(xiě) Override 表示子類中的方法可以與父類中的某個(gè)方法的名稱和參數(shù)完全相同,通過(guò)子類創(chuàng)建的實(shí)例對(duì)象調(diào)用這個(gè)方法時(shí),將調(diào)用子類中的定義方法,這相當(dāng)于把父類中定義的那個(gè)完全

27、相同的方法給覆蓋了,這也是面向?qū)ο缶幊痰亩鄳B(tài)性的一種表現(xiàn)。子類覆蓋父類的方法時(shí),只能比父類拋出更少的異常,或者是拋出父類拋出的異常的子異常,因?yàn)樽宇惪梢越鉀Q父類的一些問(wèn)題,不能比父類有問(wèn)題。子類的方法的權(quán)限只能比父類的更大,不能更小。如果父類的方法是 private 類型,那么,子類則不存在覆蓋的限制,相當(dāng)于子類中增加了一個(gè)全新的方法。至于 Overloaded 的方法是否可以改變返回值的類型這個(gè)問(wèn)題,要看你倒底想問(wèn)什么呢?這個(gè)題目很模糊。如果幾個(gè) Overloaded 的方法的參數(shù)列表不一樣,它們的返回者類型當(dāng)然也可以不一樣。但我估計(jì)你想問(wèn)的問(wèn)題是:如果兩個(gè)方法的參數(shù)列表完全一樣,是否可以讓

28、它們的返回值不同來(lái)實(shí)現(xiàn)重載Overload。這是不行的,我們可以用反證法來(lái)說(shuō)明這個(gè)問(wèn)題,因?yàn)槲覀冇袝r(shí)候調(diào)用一個(gè)方法時(shí)也可以不定義返回結(jié)果變量,即不要關(guān)心其返回結(jié)果,例如,我們調(diào)用 map.remove(key)方法時(shí),雖然 remove 方法有返回值,但是我們通常都的方法,僅定義接收返回結(jié)果的變量,這時(shí)候假設(shè)該類中有兩個(gè)名稱和參數(shù)列表完全相同僅是返回類型不同,java 就無(wú)法確定編程者倒底是想調(diào)用哪個(gè)方法了,因?yàn)樗鼰o(wú)法通過(guò)返回結(jié)果類型來(lái)判斷。override 可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方法并且對(duì)其重寫(xiě),以求達(dá)到不同的作用。對(duì)我們來(lái)說(shuō)最熟悉的覆蓋就是對(duì)接口方法的實(shí)現(xiàn),在接口

29、中一般只是對(duì)方法進(jìn)行了,而我們?cè)趯?shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)接口的所有方法。除了這個(gè)典型的用法以外,我們?cè)诶^承中也可能會(huì)在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點(diǎn):1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;4、被覆蓋的方法不能為 private,否則在其子類中只是新定義了一個(gè)方法,并沒(méi)有對(duì)其進(jìn)行覆蓋。overload 對(duì)我們來(lái)說(shuō)可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱相同的方法,通過(guò)定義不同的輸入?yún)?shù)來(lái)區(qū)分這些方法,然后再調(diào)

30、用時(shí),VM 就會(huì)根據(jù)不同的參數(shù)樣式,來(lái)選擇合適的方法執(zhí)行。在使用重載要注意以下的幾點(diǎn):1、在使用重載時(shí)只能通過(guò)不同的參數(shù)樣式。例如,不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類型必須不一樣,例如可以是fun(int,float),但是不能為 fun(int,int));2、不能通過(guò)權(quán)限、返回類型、拋出的異常進(jìn)行重載;3、方法的異常類型和數(shù)目對(duì)重載造成影響;4、對(duì)于繼承來(lái)說(shuō),如果某一方法在父類中是權(quán)限是 priavte,那么就不能在子類對(duì)其進(jìn)行重載,如果定義的話,也只是定義了一個(gè)新方法,而達(dá)到重載的效果。3、4 月 21 號(hào)貢獻(xiàn)的一些題?朱 wenchao,女:3

31、500,21 歲搞了多個(gè)重載方法,參數(shù)分別是 int ,char,和 double,然后將 doublex = 2,傳遞進(jìn)去,會(huì)選擇哪個(gè)方法?說(shuō)說(shuō)對(duì) javaee 中的 session 的理解,你是怎么用 session 的?陳 yong, 4000一個(gè)房子里有椅子,椅子有腿和背,房子與椅子是什么關(guān)系,椅子與腿和背是什么關(guān)系?如果房子有多個(gè)椅子,就是聚合關(guān)系,否則是一種關(guān)聯(lián)關(guān)系,當(dāng)然,聚合是一種特殊的關(guān)聯(lián)。椅子與腿和背時(shí)組合關(guān)系。說(shuō)說(shuō) has a 與 is a 的區(qū)別。答:is-a 表示的是屬于得關(guān)系。比如兔子屬于一種動(dòng)物(繼承關(guān)系)。has-a 表示組合,包含關(guān)系。比如兔子包含有腿,頭等組件

32、;工廠模式的類圖45 月 15 號(hào)貢獻(xiàn)的一些題?1. 線程如何同步和通訊。 同學(xué)回答說(shuō) synchronized 方法或代碼塊!面試官似乎不太滿意!只有多個(gè) synchronized 代碼塊使用的是同一個(gè)監(jiān)視器對(duì)象,這些 synchronized 代碼塊之間才具有線程互斥的效果,假如 a 代碼塊用 obj1 作為監(jiān)視器對(duì)象,假如 b 代碼塊用 obj2 作為監(jiān)視器對(duì)象,那么,兩個(gè)并發(fā)的線程可以同時(shí)分別進(jìn)入這兩個(gè)代碼塊中。 這里還可以分析一下同步的原理。對(duì)于同步方法的分析,所用的同步監(jiān)視器對(duì)象是 this接著對(duì)于靜態(tài)同步方法的分析,所用的同步監(jiān)視器對(duì)象是該類的 Class 對(duì)象接著對(duì)如何實(shí)現(xiàn)代碼

33、塊與方法的同步進(jìn)行分析。2.ClassLoader 如何加載 class 。jvm 里有多個(gè)類加載,每個(gè)類加載可以負(fù)責(zé)加載特置的類,例如,bootstrap 類加載負(fù)責(zé)加載 jre/lib/rt.jar 中的類, 我們extclassloader 負(fù)責(zé)用的 jdk 中的類都位于 rt.jar 中。加載 jar/lib/ext/*.jar 中的類,appclassloader 負(fù)責(zé) classpath 指定的目錄或 jar 中的類。除了bootstrap 之外,其他的類加載器本身也都是 java 類,它們的父類是 ClassLoader。3.Servlet 的生命周期4.抽象類的作用5.Arra

34、yList 如何實(shí)現(xiàn)的數(shù)據(jù)按自定義的方式有序存放class MyBean implements Comparablepublic int compareTo(Object obj)if(! obj instanceof MyBean)throw new ClassCastException()/具體異常的名稱,我要查 jdk 文檔。MyBean other = (MyBean) obj;return age > other.age?1:age=other.age?0:-1;class MyTreeSet private ArrayList datas = new ArrayList();

35、public void add(Object obj)for(int i=0;i<datas.size();i+)if(pareTo(datas.get(i) != 1)datas.add(i,obj);6.分層設(shè)計(jì)的好處;把各個(gè)功能按調(diào)用流程進(jìn)行了模塊化,模塊化帶來(lái)的好處就是可以隨意組合,舉例說(shuō)明:如果要一個(gè)用戶,流程為顯示界面并通過(guò)界面接收用戶的輸入,接著進(jìn)行業(yè)務(wù)邏輯處理,在處理業(yè)務(wù)邏輯又?jǐn)?shù)據(jù)庫(kù),如果這些步驟全部按流水帳的方式放在一個(gè)方法中編寫(xiě),這也是可以的,但這其中的壞處就是,當(dāng)界面要修改時(shí),由于代碼一個(gè)方法內(nèi),可能會(huì)碰壞業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)的碼,同樣,當(dāng)修改業(yè)務(wù)邏輯或數(shù)據(jù)庫(kù)的代碼時(shí),

36、也會(huì)碰壞其他部分的代碼。分層就是要把界面部分、業(yè)務(wù)邏輯部分、數(shù)據(jù)庫(kù)部分的代碼放在各自的方法或類中編寫(xiě),這樣就出現(xiàn)牽一發(fā)而動(dòng)全身的問(wèn)題了。這樣分層后,還可以方便切換各層,譬如原來(lái)的界面是 Swing,現(xiàn)在要改成 BS 界面,如果最初是按分層設(shè)計(jì)的,這時(shí)候不需要涉及業(yè)務(wù)和數(shù)據(jù)的代碼,只需編寫(xiě)一條 web界面就可以了。下面的參考,不建議照搬照套,一定要改成的語(yǔ)言,發(fā)現(xiàn)內(nèi)心的感受:分層的好處:1,實(shí)現(xiàn)了軟件之間的解耦;2.便于進(jìn)行分工3.便于維護(hù)4,提高軟件組件的重用5.便于替換某種,比如持久層用的是 hibernate,需要更換用 toplink,就不用該其他業(yè)務(wù)代碼,直接把配置一改。6.便于功能的

37、擴(kuò)展。7。便于適用用戶需求的不斷變化7.序列化接口的 id 有什么用?對(duì)象經(jīng)常要通過(guò) IO 進(jìn)行傳送,讓你寫(xiě)程序傳遞對(duì)象,你會(huì)怎么做?把對(duì)象的狀態(tài)數(shù)據(jù)用某種格式寫(xiě)入到硬盤(pán),->“zxx,male,28,30000”.,既然大家都要這么干,并且沒(méi)有個(gè)統(tǒng)一的干法,于是,sun 公司就提出一的解決方案,它會(huì)把對(duì)象變成某個(gè)格式進(jìn)行輸入和輸出,這種格式對(duì)程序員來(lái)說(shuō)是透明(transparent)的,但是,我們的某個(gè)類要想能被 sun 的這種方案處理,必須實(shí)現(xiàn) Serializable 接口。ObjectOutputStream.writeObject(obj);Object obj = Objec

38、tInputStream.readObject();假設(shè)兩年前我保存了某個(gè)類的一個(gè)對(duì)象,這兩年來(lái),我修改該類,刪除了某個(gè)屬性和增加了另外一個(gè)屬性,兩年后,我又去那個(gè)保存的對(duì)象,或有什么結(jié)果?未知!sun 的 jdk就會(huì)蒙了。為此,一個(gè)解決辦法就是在類中增加版本后,每一次類的屬性修改,都應(yīng)該把版本號(hào)升級(jí)一下,這樣,在時(shí),比較對(duì)象時(shí)的版本號(hào)與當(dāng)前類的版本號(hào),如果不一致,則直接報(bào)版本號(hào)不同的錯(cuò)!9.hashCode 方法的作用?說(shuō)(網(wǎng)友提供的一段,待改進(jìn):hashcode 這個(gè)方法是用來(lái)鑒定 2 個(gè)對(duì)象是否相等的。那你會(huì)說(shuō),不是還有 equals 這個(gè)方法嗎?不錯(cuò),這 2 個(gè)方法都是用來(lái)2 個(gè)對(duì)象是

39、否相等的。但是他們是有區(qū)別的。一般來(lái)講,equals 這個(gè)方法是給用戶調(diào)用的,如果你想equals 方法,2 個(gè)對(duì)象是否相等,你可以重寫(xiě)然后在代碼中調(diào)用,就可以表面上看或他們是否。簡(jiǎn)單來(lái)講,equals 方法主要是用來(lái)從者從內(nèi)容上看,2 個(gè)對(duì)象是不是相等。舉個(gè)例子,有個(gè)學(xué)生類,屬性只有姓名和們可以認(rèn)為,那么我只要姓名和相等,那么就說(shuō)這 2 個(gè)對(duì)象是相等的。hashcode 方法一般用戶斷 key 是去調(diào)用,比如在 hashmap 中,由于 key 是不可以重復(fù)的,他在判不是重復(fù)的時(shí)候就說(shuō) equals了 hashcode 這個(gè)方法,而且也用到了 equals 方法。這里不可以重復(fù)是和 hash

40、code 只要有一個(gè)不等就可以了!所以簡(jiǎn)單來(lái)講,hashcode 相當(dāng)于是一個(gè)對(duì)象的編碼, 就好像文件中的 md5,他和 equals 不同就在于他返回的是 int 型的,比較起來(lái)不直觀。我們一般在覆蓋 equals 的同時(shí)也要覆蓋 hashcode,讓他們的邏輯一致。舉個(gè)例子,還是剛剛的例子,如果姓名和相等就算 2個(gè)對(duì)象相等的話,那么 hashcode 的方法也要返回姓名的 hashcode 值加上值,這樣從的 hashcode邏輯上,他們就一致了。要從物理上2 個(gè)對(duì)象是否相等,用=就可以了。)10.webservice 問(wèn)得很多11.設(shè)計(jì)出計(jì)算任意正整數(shù)的階層。4.在 oracle 數(shù)據(jù)庫(kù)

41、中需要出前 8 條的 sql 語(yǔ)句怎么寫(xiě)?5.什么是 SOA,談?wù)勀愕?SOA 的理解。service orientied architecture6.如何實(shí)現(xiàn)線的通訊。新題目:編程:1.編寫(xiě)一個(gè)函數(shù)將一個(gè)十六進(jìn)制數(shù)的字符串參數(shù)轉(zhuǎn)換成整數(shù)返回。String str = “13abf”;int len= str.length;int sum= 0;for(inti=0;i<len;i+)char c = str.charAt(len-1-i);int n = Character.digit(c,16);sum += n * (1<<(4*i);其實(shí),也可以用 Integer.p

42、arseInt(str,16),但面試官很可能是想考我們的編碼基本功。編程 2:的還款方式中最常用的是一種叫“等額本息”,還款法,即借款人在約定還款期限內(nèi)的每一期(月)歸還的金額(產(chǎn)生的利息+部分本金)都是相等的,現(xiàn)有一筆總額為T(mén) 元的N 年期住房,年利率為 R,要求算出每一期的還款的本金和利息總額,請(qǐng)寫(xiě)出解決思路和任意一種編程語(yǔ)言實(shí)現(xiàn)的主要代碼。思路:既然是按月還款,要將 N 年按月來(lái)計(jì)算,即要還 N*12,這樣就可以求出每月要還的本金。由于每月要還的那部分本金所欠的時(shí)間不同,所以,它們所產(chǎn)生的利息是不同的,該部分本金的利息為:部分本金額*所欠月數(shù)*月利率。應(yīng)該是這么個(gè)算法,如果利息還計(jì)利息

43、,如果月還款不按年利率來(lái)算,算不明白的。int monthMoney = T/N/12;float monthRate = R/12;int totalMonth = N * 12;float totalRate = 0;for(int i=1;i<=totalMonth;i+)totalRate += monthMoney * monthRate* i;int result = monthMoney + totalRate/N/12;幾道題:1.*Spring 的 DI 是什么(學(xué)員注:除了 IOC,AOP 這些概念,還不太清楚 DI 的概念)2.*任意數(shù)字序列“123456”之類,輸

44、出它們所有的排列組合3.*什么是 AOP(學(xué)員注:會(huì)用,但感覺(jué)說(shuō)不清楚)我注:由上面這些題,可以看出,思想很重要,只有琢磨思想和原理的能很好地回答這些問(wèn)題!2 題的:Stringstr = “xafdvs”;chararr1 = str.toCharArray();chararr2 = Arrays.copyOf(arr1,arr1.length);for(int i=0;i<arr1.length-1;i+)for(int j = i+1;j<arr2.length;j+)syso: arr1i + “,” + arr2j;3 題的:1.概念介紹:所謂 AOP,即 Aspect

45、orientied program,就是面向方面的編程,2.解釋什么是方面:貫穿到系統(tǒng)的各個(gè)模塊中的系統(tǒng)一個(gè)功能就是一個(gè)方面,比如,日志,統(tǒng)一異常處理,事務(wù)處理,檢查,這些功能都是軟件系統(tǒng)的一個(gè)面,而不是一點(diǎn),在各個(gè)模塊中都要出現(xiàn)。3.什么是面向方面編程:把系統(tǒng)的一個(gè)方面的功能封裝成對(duì)象的形式來(lái)處理4.怎么進(jìn)行面向方面編程:把功能模塊對(duì)應(yīng)的對(duì)象作為切面嵌入到原來(lái)的各個(gè)系統(tǒng)模塊中,采用技術(shù),會(huì)調(diào)用目標(biāo),同時(shí)把切面功能的代碼(對(duì)象)加入進(jìn)來(lái),所以,用 spring 配置對(duì)象時(shí)只要要配兩個(gè)屬性,分別表示目標(biāo)和切面對(duì)象(Advisor)。3、構(gòu)造器 Constructor 是否可被 override?

46、構(gòu)造器 Constructor 不能被繼承,因此不能重寫(xiě) Override,但可以被重載 Overload。4、接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(implements)接口? 抽象類是否可繼承具體類(concrete class)? 抽象類中是否可以有靜態(tài)的 main 方法?接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承具體類。抽象類中可以有靜態(tài)的 main 方法。備注:只要明白了接口和抽象類的本質(zhì)和作用,這些問(wèn)題都很好回答,你想想,如果你是java 語(yǔ)言的設(shè)計(jì)者,你是否會(huì)提供這樣的支持,如果不提供的話,有什么理由嗎?如果你沒(méi)不提供,那就是肯定的了。只有記

47、住抽象類與普通類的唯一區(qū)別就是不能創(chuàng)建實(shí)例對(duì)象和有 abstract 方法。5、寫(xiě) clone()方法時(shí),通常都有一行代碼,是什么?clone 有缺省行為,super.clone();因?yàn)槭紫纫迅割愔械某蓡T的成員。到位,然后才是6、面向?qū)ο蟮奶卣饔心男┓矫嬗?jì)算機(jī)軟件系統(tǒng)是現(xiàn)實(shí)生活中的業(yè)務(wù)在計(jì)算機(jī)中的對(duì)象協(xié),而現(xiàn)實(shí)生活中的業(yè)務(wù)其實(shí)就是一個(gè)個(gè)作的過(guò)程。面向?qū)ο缶幊叹褪前船F(xiàn)實(shí)業(yè)務(wù)一樣的方式將程序代碼按一個(gè)個(gè)對(duì)象進(jìn)行組織和編寫(xiě),讓計(jì)算機(jī)系統(tǒng)能夠識(shí)別和理解用對(duì)象方式組織和編寫(xiě)的程序代碼,這樣就可以把現(xiàn)實(shí)生活中的業(yè)務(wù)對(duì)象到計(jì)算機(jī)系統(tǒng)中。面向?qū)ο蟮木幊陶Z(yǔ)言有封裝、繼承 、抽象、多態(tài)等 4 個(gè)主要的特征。1

48、 封裝:封裝是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ),封裝的目標(biāo)就是要實(shí)現(xiàn)軟件部件的“高內(nèi)聚、低耦合”,防止程序相互依賴性而帶來(lái)的變動(dòng)影響。在面向?qū)ο蟮木幊陶Z(yǔ)言中,對(duì)象是封裝的最基本單位,面向?qū)ο蟮姆庋b比傳統(tǒng)語(yǔ)言的封裝更為清晰、更為對(duì)象的屬。面向?qū)ο蟮姆庋b就是把描述一個(gè)性和行為的代碼封裝在一個(gè)“模塊”中,也就是一個(gè)類中,屬性用變量定義,行為用方法進(jìn)行定義,方法可以直接同一個(gè)對(duì)象中的屬性。通常情一起,將一,只要記住讓變量和這個(gè)變量的方法放在個(gè)類中的成員變量全部定義成私有的,只有這個(gè)類就基本上實(shí)的方法才可以到這些成員變量,這現(xiàn)對(duì)象的封裝,就很容易找出要分配到這個(gè)類上的方法了,就基本上算是會(huì)面向?qū)ο蟮木?/p>

49、程了。把握一個(gè)原則:把對(duì)同一事物進(jìn)行操作的方法和相關(guān)的方法放在同一個(gè)類中,把方法和它操作的數(shù)據(jù)放在同一個(gè)類中。例如,人要在黑板上畫(huà)圓,這一共涉及三個(gè)對(duì)象:人、黑板、圓,畫(huà)圓的方法要分配給哪個(gè)對(duì)象呢?由于畫(huà)圓需要使用到圓心和半徑,圓心和半徑顯然是圓的屬性,如果將它們?cè)陬愔卸x成了私有的成員變量,那么,畫(huà)圓的方法必須分配給圓,它才能圓的畫(huà)圓方到圓心和半徑這兩個(gè)屬性,人以后只是調(diào)用法、表示給圓發(fā)給消息而已,畫(huà)圓這個(gè)方法不應(yīng)該分配在人這個(gè)對(duì)象上,這就是面向?qū)ο蟮姆庋b性,即將對(duì)象封裝成一個(gè)高度自治和相對(duì)封閉的,對(duì)象狀態(tài)(屬性)由這個(gè)對(duì)象的行為(方法)來(lái)和改變。一個(gè)更便于理解的例子就是,司機(jī)將火車(chē)剎住了,

50、剎車(chē)的動(dòng)作是分配給司機(jī),還是分配給火車(chē),顯然,應(yīng)該分配給火車(chē),因?yàn)樗緳C(jī)自身是不可能有那么大的力氣將一個(gè)火車(chē)給停下來(lái)的,只有火車(chē)才能完成這一動(dòng)作,火車(chē)需要調(diào)用內(nèi)部的離合器和剎車(chē)片等多個(gè)器件協(xié)作才能完成剎車(chē)這個(gè)動(dòng)作, 司機(jī)剎車(chē)的過(guò)程只是給火車(chē)發(fā)了一個(gè)消息,通知火車(chē)要執(zhí)行剎車(chē)動(dòng)作而已。抽象:抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個(gè)類,這個(gè)類只考慮這些事物的相似和共性之處,并且會(huì)忽略與當(dāng)前主題和目標(biāo)無(wú)關(guān)的那些方面,將注意力集中在與當(dāng)前目標(biāo)有關(guān)的方面。例如,看到一只螞蟻和大象,你能夠想象出它們的相同之處,那就是抽象。抽象包括行為抽象和狀態(tài)抽象兩個(gè)方面。例如,定義一個(gè)類,如下:clas

51、sString name;int age;人本來(lái)是很復(fù)雜的事物,有很多方面,但因?yàn)楫?dāng)前系統(tǒng)只需要了解人的姓名和定,所以上面義的類中只包含姓名和無(wú)關(guān)的這兩個(gè)屬性,這就是一種抽像,使用抽象可以避免考慮一些與目標(biāo)細(xì)節(jié)。我對(duì)抽象的理解就是不要用顯微鏡去看一個(gè)事物的所有方面,這樣涉及的內(nèi)容就太多了,而是要?jiǎng)澐謫?wèn)題的邊界,當(dāng)前系統(tǒng)需要什么,就只考慮什么。繼承:在類實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的所定義的內(nèi)容作為的需要,的內(nèi)容,并可以加入若干新的內(nèi)容,或修改原來(lái)的方法使之更適合特殊這就是繼承。繼承是子類自動(dòng)共享父類數(shù)據(jù)和方法的機(jī)制,這是類之間的一種關(guān)系,提高了軟件的

52、可重用性和可擴(kuò)展性。多態(tài):多態(tài)是指定義的變量所指向的具體類型和通過(guò)該變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在用變量行期間才確定,即一個(gè)變量倒底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由行時(shí)才行期間才能決定。因?yàn)樵诖_定具體的類,這樣,不用修改源程序代碼,就可以讓從變量綁定到各種不同的類實(shí)現(xiàn)上,而導(dǎo)致該調(diào)用的具體方法隨之改變,即不修改程序代碼就可以改變行時(shí)所綁定的具體代碼,讓程序可以選擇多個(gè)運(yùn)行狀態(tài),這就是多態(tài)性。多態(tài)性增強(qiáng)了軟件的靈活性和擴(kuò)展性。例如,下面代碼中的 UserDao 是一個(gè)接口,它定義變量 userDao 指向的實(shí)例對(duì)象由daofactory.g

53、etDao()在執(zhí)行的時(shí)候返回,有時(shí)候指向的是 UserJdbcDao 這個(gè)實(shí)現(xiàn),有時(shí)候指向的是 UserHibernateDao 這個(gè)實(shí)現(xiàn),這樣,不用修改源代碼,就可以改變 userDao 指向的具體類實(shí)現(xiàn),從而導(dǎo)致 userDao.insertUser()方法調(diào)用的具體代碼也隨之改變,即有時(shí)候調(diào)用的是UserJdbcDao 的 insertUser 方法,有時(shí)候調(diào)用的是 UserHibernateDao 的 insertUser 方法:UserDao userDao = daofactory.getDao();userDao.insertUser(user);比喻:人吃飯,你看到的是左手,

54、還是右手?7、java 中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?靠的是父類或接口定義的在變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對(duì)象,而程序調(diào)用的方法運(yùn)行期才動(dòng)態(tài)綁定,就是個(gè)對(duì)象變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那的方法,而不是變量的類型中定義的方法。8、abstract class 和 interface 有什么區(qū)別?含有 abstract 修飾符的 class 即為抽象類,abstract 類不能創(chuàng)建的實(shí)例對(duì)象。含有abstract 方法的類必須定義為 abstract class,abstract class 類中的方法不必是抽象的。abstract class 類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果的子類沒(méi)有實(shí)現(xiàn)抽象父類中的所有抽象方法,那么子類也必須定義為 abstract 類型。接口(interface)可以說(shuō)中的方法定抽象類的一種特例,接口中的所有方法都必須是抽象的。接口義默認(rèn)為 public abstract 類型,接口中的成員變量類型默認(rèn)為 public static final。下面比較一下兩者的語(yǔ)法區(qū)別:1.抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。2.抽象類中可以有普通

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論