java常見(jiàn)面試題史上最全最經(jīng)典希望對(duì)你有用_第1頁(yè)
java常見(jiàn)面試題史上最全最經(jīng)典希望對(duì)你有用_第2頁(yè)
java常見(jiàn)面試題史上最全最經(jīng)典希望對(duì)你有用_第3頁(yè)
java常見(jiàn)面試題史上最全最經(jīng)典希望對(duì)你有用_第4頁(yè)
java常見(jiàn)面試題史上最全最經(jīng)典希望對(duì)你有用_第5頁(yè)
已閱讀5頁(yè),還剩115頁(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)介

java常見(jiàn)面試題史上最全最經(jīng)典希望對(duì)你有用資料僅供參考1.Java基礎(chǔ)部分基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)法,集合的語(yǔ)法,io的語(yǔ)法,虛擬機(jī)方面的語(yǔ)法。1、一個(gè)".java"源文件中是否能夠包括多個(gè)類(不是內(nèi)部類)?有什么限制?能夠有多個(gè)類,但只能有一個(gè)public的類,而且public的類名必須與文件名相一致。2、Java有沒(méi)有g(shù)oto?java中的保留字,現(xiàn)在沒(méi)有在java中使用。3、說(shuō)說(shuō)&和&&的區(qū)別。&和&&都能夠用作邏輯與的運(yùn)算符,表示邏輯與(and),當(dāng)運(yùn)算符兩邊的表示式的結(jié)果都為true時(shí),整個(gè)運(yùn)算結(jié)果才為true,否則,只要有一方為false,則結(jié)果為false。&&還具有短路的功能,即如果第一個(gè)表示式為false,則不再計(jì)算第二個(gè)表示式。&還能夠用作位運(yùn)算符,當(dāng)&操作符兩邊的表示式不是boolean類型時(shí),&表示按位與操作。4、在JAVA中如何跳出當(dāng)前的多重嵌套循環(huán)?在Java中,要想跳出多重循環(huán),能夠在外面的循環(huán)語(yǔ)句前定義一個(gè)標(biāo)號(hào),然后在里層循環(huán)體的代碼中使用帶有標(biāo)號(hào)的break語(yǔ)句,即可跳出外層循環(huán)。5、switch語(yǔ)句能否作用在byte上,能否作用在long上,能否作用在String上?在switch(expr1)中,expr1只能是一個(gè)整數(shù)表示式或者枚舉常量(更大字體),整數(shù)表示式能夠是int基本類型或Integer包裝類型,由于,byte,short,char都能夠隱含轉(zhuǎn)換為int,因此,這些類型以及這些類型的包裝類型也是能夠的。顯然,long和String類型都不符合switch的語(yǔ)法規(guī)定,而且不能被隱式轉(zhuǎn)換成int類型,因此,它們不能作用于swtich語(yǔ)句中。6、shorts1=1;s1=s1+1;有什么錯(cuò)?shorts1=1;s1+=1;有什么錯(cuò)?對(duì)于shorts1=1;s1=s1+1;由于s1+1運(yùn)算時(shí)會(huì)自動(dòng)提升表示式的類型,因此結(jié)果是int型,再賦值給short類型s1時(shí),編譯器將報(bào)告需要強(qiáng)制轉(zhuǎn)換類型的錯(cuò)誤。對(duì)于shorts1=1;s1+=1;由于+=是java語(yǔ)言規(guī)定的運(yùn)算符,java編譯器會(huì)對(duì)它進(jìn)行特殊處理,因此能夠正確編譯。7、char型變量中能不能存貯一個(gè)中文漢字?為什么?char型變量是用來(lái)存儲(chǔ)Unicode編碼的字符的,unicode編碼字符集中包含了漢字,因此,char型變量中當(dāng)然能夠存儲(chǔ)漢字啦。不過(guò),如果某個(gè)特殊的漢字沒(méi)有被包含在unicode編碼字符集中,那么,這個(gè)char型變量中就不能存儲(chǔ)這個(gè)特殊漢字。補(bǔ)充說(shuō)明:unicode編碼占用兩個(gè)字節(jié),因此,char類型的變量也是占用兩個(gè)字節(jié)。8、用最有效率的方法算出2乘以8等於幾?2<<3,10、使用final關(guān)鍵字修飾一個(gè)變量時(shí),是引用不能變,還是引用的對(duì)象不能變?使用final關(guān)鍵字修飾一個(gè)變量時(shí),是指引用變量不能變,引用變量所指向的對(duì)象中的內(nèi)容還是能夠改變的。11、"=="和equals方法究竟有什么區(qū)別?==操作符專門(mén)用來(lái)比較兩個(gè)變量的值是否相等,也就是用于比較變量所對(duì)應(yīng)的內(nèi)存中所存儲(chǔ)的數(shù)值是否相同,要比較兩個(gè)基本類型的數(shù)據(jù)或兩個(gè)引用變量是否相等,只能用==操作符。如果一個(gè)變量指向的數(shù)據(jù)是對(duì)象類型的,那么,這時(shí)候涉及了兩塊內(nèi)存,對(duì)象本身占用一塊內(nèi)存(堆內(nèi)存),變量也占用一塊內(nèi)存,例如Objetobj=newObject();變量obj是一個(gè)內(nèi)存,newObject()是另一個(gè)內(nèi)存,此時(shí),變量obj所對(duì)應(yīng)的內(nèi)存中存儲(chǔ)的數(shù)值就是對(duì)象占用的那塊內(nèi)存的首地址。對(duì)于指向?qū)ο箢愋偷淖兞?,如果要比較兩個(gè)變量是否指向同一個(gè)對(duì)象,即要看這兩個(gè)變量所對(duì)應(yīng)的內(nèi)存中的數(shù)值是否相等,這時(shí)候就需要用==操作符進(jìn)行比較。equals方法是用于比較兩個(gè)獨(dú)立對(duì)象的內(nèi)容是否相同,就好比去比較兩個(gè)人的長(zhǎng)相是否相同,它比較的兩個(gè)對(duì)象是獨(dú)立的。例如,對(duì)于下面的代碼:Stringa=newString("foo");Stringb=newString("foo");兩條new語(yǔ)句創(chuàng)立了兩個(gè)對(duì)象,然后用a/b這兩個(gè)變量分別指向了其中一個(gè)對(duì)象,這是兩個(gè)不同的對(duì)象,它們的首地址是不同的,即a和b中存儲(chǔ)的數(shù)值是不相同的,因此,表示式a==b將返回false,而這兩個(gè)對(duì)象中的內(nèi)容是相同的,因此,表示式a.equals(b)將返回true。12、靜態(tài)變量和實(shí)例變量的區(qū)別?在語(yǔ)法定義上的區(qū)別:靜態(tài)變量前要加static關(guān)鍵字,而實(shí)例變量前則不加。在程序運(yùn)行時(shí)的區(qū)別:實(shí)例變量屬于某個(gè)對(duì)象的屬性,必須創(chuàng)立了實(shí)例對(duì)象,其中的實(shí)例變量才會(huì)被分配空間,才能使用這個(gè)實(shí)例變量。靜態(tài)變量不屬于某個(gè)實(shí)例對(duì)象,而是屬于類,因此也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)立任何實(shí)例對(duì)象,靜態(tài)變量就會(huì)被分配空間,靜態(tài)變量就能夠被使用了??傊?,實(shí)例變量必須創(chuàng)立對(duì)象后才能夠經(jīng)過(guò)這個(gè)對(duì)象來(lái)使用,靜態(tài)變量則能夠直接使用類名來(lái)引用。13、是否能夠從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用?不能夠。因?yàn)榉莝tatic方法是要與對(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)用。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ú)法表示出未賦值的情況。例如,要想表示出沒(méi)有參加考試和考試成績(jī)?yōu)?的區(qū)別,則只能使用Integer。在JSP開(kāi)發(fā)中,Integer的默認(rèn)為null,因此用el表示式在文本框中顯示時(shí),值為空白字符串,而int默認(rèn)的默認(rèn)值為0,因此用el表示式在文本框中顯示時(shí),結(jié)果為0,因此,int不適合作為web層的表單數(shù)據(jù)的類型。在Hibernate中,如果將OID定義為Integer類型,那么Hibernate就能夠根據(jù)其值是否為null而判斷一個(gè)對(duì)象是否是臨時(shí)的,如果將OID定義為了int類型,還需要在hbm映射文件中設(shè)置其unsaved-value屬性為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)的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對(duì)應(yīng),例如,ceil的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3)的結(jié)果為12,Math.ceil(-11.3)的結(jié)果是-11;floor的英文意義是地板,該方法就表示向下取整,Math.ceil(11.6)的結(jié)果為11,Math.ceil(-11.6)的結(jié)果是-12;最難掌握的是round方法,它表示“四舍五入”,算法為Math.floor(x+0.5),即將原來(lái)的數(shù)字加上0.5后再向下取整,因此,Math.round(11.5)的結(jié)果為12,Math.round(-11.5)的結(jié)果為-11。16、下面的代碼有什么不妥之處?1.if(username.equals(“zxx”){}2.intx=1;returnx==1?true:false;17、請(qǐng)說(shuō)出作用域public,private,protected,以及不寫(xiě)時(shí)的區(qū)別這四個(gè)作用域的可見(jiàn)范圍如下表所示。說(shuō)明:如果在修飾的元素上面沒(méi)有寫(xiě)任何訪問(wèn)修飾符,則表示friendly。作用域當(dāng)前類同一package子孫類其它packagepublic√√√√protected√√√×friendly√√××private√×××18、Overload和Override的區(qū)別。Overloaded的方法是否能夠改變返回值的類型?重載Overload表示同一個(gè)類中能夠有多個(gè)名稱相同的方法,但這些方法的參數(shù)列表各不相同(即參數(shù)個(gè)數(shù)或類型不同)。重寫(xiě)Override表示子類中的方法能夠與父類中的某個(gè)方法的名稱和參數(shù)完全相同,經(jīng)過(guò)子類創(chuàng)立的實(shí)例對(duì)象調(diào)用這個(gè)方法時(shí),將調(diào)用子類中的定義方法,這相當(dāng)于把父類中定義的那個(gè)完全相同的方法給覆蓋了,這也是面向?qū)ο缶幊痰亩鄳B(tài)性的一種表現(xiàn)。在覆蓋要注意以下的幾點(diǎn):1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個(gè)方法,并沒(méi)有對(duì)其進(jìn)行覆蓋。在使用重載要注意以下的幾點(diǎn):1、在使用重載時(shí)只能經(jīng)過(guò)不同的參數(shù)樣式。例如,不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類型必須不一樣,例如能夠是fun(int,float),可是不能為fun(int,int));2、不能經(jīng)過(guò)訪問(wèn)權(quán)限、返回類型、拋出的異常進(jìn)行重載;3、方法的異常類型和數(shù)目不會(huì)對(duì)重載造成影響;4、對(duì)于繼承來(lái)說(shuō),如果某一方法在父類中是訪問(wèn)權(quán)限是priavte,那么就不能在子類對(duì)其進(jìn)行重載,如果定義的話,也只是定義了一個(gè)新方法,而不會(huì)達(dá)到重載的效果。如果幾個(gè)Overloaded的方法的參數(shù)列表不一樣,它們的返回者類型當(dāng)然也能夠不一樣。如果兩個(gè)方法的參數(shù)列表完全一樣,是否能夠讓它們的返回值不同來(lái)實(shí)現(xiàn)重載Overload。這是不行的19、構(gòu)造器Constructor是否可被override?構(gòu)造器Constructor不能被繼承,因此不能重寫(xiě)Override,但能夠被重載Overload。20、接口是否可繼承接口?抽象類是否可實(shí)現(xiàn)(implements)接口?抽象類是否可繼承具體類(concreteclass)?抽象類中是否能夠有靜態(tài)的main方法?接口能夠繼承接口。抽象類能夠?qū)崿F(xiàn)(implements)接口,抽象類是否可繼承具體類。抽象類中能夠有靜態(tài)的main方法。只有記住抽象類與普通類的唯一區(qū)別就是不能創(chuàng)立實(shí)例對(duì)象和允許有abstract方法。21、寫(xiě)clone()方法時(shí),一般都有一行代碼,是什么?clone有缺省行為,super.clone();因?yàn)槭紫纫迅割愔械某蓡T復(fù)制到位,然后才是復(fù)制自己的成員。22、面向?qū)ο蟮奶卣饔心男┓矫婷嫦驅(qū)ο蟮木幊陶Z(yǔ)言有4個(gè)主要的特征。1封裝:封裝是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ),封裝的目標(biāo)就是要實(shí)現(xiàn)軟件部件的“高內(nèi)聚、低耦合”,防止程序相互依賴性而帶來(lái)的變動(dòng)影響。把握一個(gè)原則:把對(duì)同一事物進(jìn)行操作的方法和相關(guān)的方法放在同一個(gè)類中,把方法和它操作的數(shù)據(jù)放在同一個(gè)類中。抽象:抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個(gè)類,這個(gè)類只考慮這些事物的相似和共性之處,而且會(huì)忽略與當(dāng)前主題和目標(biāo)無(wú)關(guān)的那些方面,將注意力集中在與當(dāng)前目標(biāo)有關(guān)的方面。繼承:在定義和實(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)系,提高了軟件的可重用性和可擴(kuò)展性。多態(tài):多態(tài)是指程序中定義的引用變量所指向的具體類型和經(jīng)過(guò)該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量倒底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定。因?yàn)樵诔绦蜻\(yùn)行時(shí)才確定具體的類,這樣,不用修改源程序代碼,就能夠讓引用變量綁定到各種不同的類實(shí)現(xiàn)上,從而導(dǎo)致該引用調(diào)用的具體方法隨之改變,即不修改程序代碼就能夠改變程序運(yùn)行時(shí)所綁定的具體代碼,讓程序能夠選擇多個(gè)運(yùn)行狀態(tài),這就是多態(tài)性。多態(tài)性增強(qiáng)了軟件的靈活性和擴(kuò)展性。23、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?靠的是父類或接口定義的引用變量能夠指向子類或具體實(shí)現(xiàn)類的實(shí)例對(duì)象,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法,而不是引用變量的類型中定義的方法。24、abstractclass和interface有什么區(qū)別?含有abstract修飾符的class即為抽象類,abstract類不能創(chuàng)立的實(shí)例對(duì)象。含有abstract方法的類必須定義為abstractclass,abstractclass類中的方法不必是抽象的。abstractclass類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn),因此,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果的子類沒(méi)有實(shí)現(xiàn)抽象父類中的所有抽象方法,那么子類也必須定義為abstract類型。接口(interface)能夠說(shuō)成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認(rèn)為publicabstract類型,接口中的成員變量類型默認(rèn)為publicstaticfinal。下面比較一下兩者的語(yǔ)法區(qū)別:1.抽象類能夠有構(gòu)造方法,接口中不能有構(gòu)造方法。2.抽象類中能夠有普通成員變量,接口中沒(méi)有普通成員變量3.抽象類中能夠包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。4.抽象類中的抽象方法的訪問(wèn)類型能夠是public,protected和(默認(rèn)類型,雖然eclipse下不報(bào)錯(cuò),但應(yīng)該也不行),但接口中的抽象方法只能是public類型的,而且默認(rèn)即為publicabstract類型。5.抽象類中能夠包含靜態(tài)方法,接口中不能包含靜態(tài)方法6.抽象類和接口中都能夠包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問(wèn)類型能夠任意,但接口中定義的變量只能是publicstaticfinal類型,而且默認(rèn)即為publicstaticfinal類型。7.一個(gè)類能夠?qū)崿F(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類。25、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?abstract的method不能夠是static的,因?yàn)槌橄蟮姆椒ㄊ且蛔宇悓?shí)現(xiàn)的,而static與子類扯不上關(guān)系!native方法表示該方法要用另外一種依賴平臺(tái)的編程語(yǔ)言實(shí)現(xiàn)的,不存在著被子類實(shí)現(xiàn)的問(wèn)題,因此,它也不能是抽象的,不能與abstract混用。關(guān)于synchronized與abstract合用的問(wèn)題,我覺(jué)得也不行,因?yàn)樵谖規(guī)啄甑膶W(xué)習(xí)和開(kāi)發(fā)中,從來(lái)沒(méi)見(jiàn)到過(guò)這種情況,而且我覺(jué)得synchronized應(yīng)該是作用在一個(gè)具體的方法上才有意義。而且,方法上的synchronized同步所使用的同步鎖對(duì)象是this,而抽象方法上無(wú)法確定this是什么。26、什么是內(nèi)部類?StaticNestedClass和InnerClass的不同。內(nèi)部類就是在一個(gè)類的內(nèi)部定義的類,內(nèi)部類中不能定義靜態(tài)成員,內(nèi)部類能夠直接訪問(wèn)外部類中的成員變量,內(nèi)部類能夠定義在外部類的方法外面,也能夠定義在外部類的方法體中。在方法外部定義的內(nèi)部類前面能夠加上static關(guān)鍵字,從而成為StaticNestedClass,它不再具有內(nèi)部類的特性,所有,從狹義上講,它不是內(nèi)部類。StaticNestedClass與普通類在運(yùn)行時(shí)的行為和功能上沒(méi)有什么區(qū)別,只是在編程引用時(shí)的語(yǔ)法上有一些差別,它能夠定義成public、protected、默認(rèn)的、private等多種類型,而普通類只能定義成public和默認(rèn)的這兩種類型。在外面引用StaticNestedClass類的名稱為“外部類名.內(nèi)部類名”。在外面不需要?jiǎng)?chuàng)立外部類的實(shí)例對(duì)象,就能夠直接創(chuàng)立StaticNestedClass,例如,假設(shè)Inner是定義在Outer類中的StaticNestedClass,那么能夠使用如下語(yǔ)句創(chuàng)立Inner類:Outer.Innerinner=newOuter.Inner();由于staticNestedClass不依賴于外部類的實(shí)例對(duì)象,因此,staticNestedClass能訪問(wèn)外部類的非static成員變量。當(dāng)在外部類中訪問(wèn)StaticNestedClass時(shí),能夠直接使用StaticNestedClass的名字,而不需要加上外部類的名字了,在StaticNestedClass中也能夠直接引用外部類的static的成員變量,不需要加上外部類的名字。在靜態(tài)方法中定義的內(nèi)部類也是StaticNestedClass,這時(shí)候不能在類前面加static關(guān)鍵字,靜態(tài)方法中的StaticNestedClass與普通方法中的內(nèi)部類的應(yīng)用方式很相似,它除了能夠直接訪問(wèn)外部類中的static的成員變量,還能夠訪問(wèn)靜態(tài)方法中的局部變量,可是,該局部變量前必須加final修飾符。27、內(nèi)部類能夠引用它的包含類的成員嗎?有沒(méi)有什么限制?完全能夠。如果不是靜態(tài)內(nèi)部類,那沒(méi)有什么限制!如果你把靜態(tài)嵌套類當(dāng)作內(nèi)部類的一種特例,那在這種情況下不能夠訪問(wèn)外部類的普通成員變量,而只能訪問(wèn)外部類中的靜態(tài)成員,28、AnonymousInnerClass(匿名內(nèi)部類)是否能夠extends(繼承)其它類,是否能夠implements(實(shí)現(xiàn))interface(接口)?能夠繼承其它類或?qū)崿F(xiàn)其它接口。不但是能夠,而是必須!29、super.getClass()方法調(diào)用下面程序的輸出結(jié)果是多少?importjava.util.Date;publicclassTestextendsDate{publicstaticvoidmain(String[]args){newTest().test();}publicvoidtest(){System.out.println(super.getClass().getName());}}結(jié)果是Test。在test方法中,直接調(diào)用getClass().getName()方法,返回的是Test類名,由于getClass()在Object類中定義成了final,子類不能覆蓋該方法,因此,在test方法中調(diào)用getClass().getName()方法,其實(shí)就是在調(diào)用從父類繼承的getClass()方法,等效于調(diào)用super.getClass().getName()方法,因此,super.getClass().getName()方法返回的也應(yīng)該是Test。如果想得到父類的名稱,應(yīng)該用如下代碼:getClass().getSuperClass().getName();30、String是最基本的數(shù)據(jù)類型嗎?基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。java.lang.String類是final類型的,因此不能夠繼承這個(gè)類、不能修改這個(gè)類。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer類31、Strings="Hello";s=s+"world!";這兩行代碼執(zhí)行后,原始的String對(duì)象中的內(nèi)容到底變了沒(méi)有?沒(méi)有。因?yàn)镾tring被設(shè)計(jì)成不可變(immutable)類,因此它的所有對(duì)象都是不可變對(duì)象。在這段代碼中,s原先指向一個(gè)String對(duì)象,內(nèi)容是"Hello",然后我們對(duì)s進(jìn)行了+操作,那么s所指向的那個(gè)對(duì)象是否發(fā)生了改變呢?答案是沒(méi)有。這時(shí),s不指向原來(lái)那個(gè)對(duì)象了,而指向了另一個(gè)String對(duì)象,內(nèi)容為"Helloworld!",原來(lái)那個(gè)對(duì)象還存在于內(nèi)存之中,只是s這個(gè)引用變量不再指向它了。32、是否能夠繼承String類?String類是final類故不能夠繼承。33、Strings=newString("xyz");創(chuàng)立了幾個(gè)StringObject?二者之間有什么區(qū)別??jī)蓚€(gè)或一個(gè),”xyz”對(duì)應(yīng)一個(gè)對(duì)象,這個(gè)對(duì)象放在字符串常量緩沖區(qū),常量”xyz”不論出現(xiàn)多少遍,都是緩沖區(qū)中的那一個(gè)。NewString每寫(xiě)一遍,就創(chuàng)立一個(gè)新的對(duì)象,它一句那個(gè)常量”xyz”對(duì)象的內(nèi)容來(lái)創(chuàng)立出一個(gè)新String對(duì)象。如果以前就用過(guò)’xyz’,這句代表就不會(huì)創(chuàng)立”xyz”自己了,直接從緩沖區(qū)拿。34、String和StringBuffer的區(qū)別JAVA平臺(tái)提供了兩個(gè)類:String和StringBuffer,它們能夠儲(chǔ)存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類提供了數(shù)值不可改變的字符串。而這個(gè)StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候你就能夠使用StringBuffer。典型地,你能夠使用StringBuffers來(lái)動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。另外,String實(shí)現(xiàn)了equals方法,newString(“abc”).equals(newString(“abc”)的結(jié)果為true,而StringBuffer沒(méi)有實(shí)現(xiàn)equals方法,因此,newStringBuffer(“abc”).equals(newStringBuffer(“abc”)的結(jié)果為false。接著要舉一個(gè)具體的例子來(lái)說(shuō)明,我們要把1到100的所有數(shù)字拼起來(lái),組成一個(gè)串。StringBuffersbf=newStringBuffer();for(inti=0;i<100;i++){sbf.append(i);}上面的代碼效率很高,因?yàn)橹粍?chuàng)立了一個(gè)StringBuffer對(duì)象,而下面的代碼效率很低,因?yàn)閯?chuàng)立了101個(gè)對(duì)象。Stringstr=newString();for(inti=0;i<100;i++){str=str+i;}String覆蓋了equals方法和hashCode方法,而StringBuffer沒(méi)有覆蓋equals方法和hashCode方法,因此,將StringBuffer對(duì)象存儲(chǔ)進(jìn)Java集合類中時(shí)會(huì)出現(xiàn)問(wèn)題。35、如何把一段逗號(hào)分割的字符串轉(zhuǎn)換成一個(gè)數(shù)組?如果不查jdkapi,我很難寫(xiě)出來(lái)!我能夠說(shuō)說(shuō)我的思路:1 用正則表示式,代碼大概為:String[]result=orgStr.split(“,”);2 用StingTokenizer,代碼為:StringTokenizertokener=StringTokenizer(orgStr,”,”);String[]result=newString[tokener.countTokens()];Inti=0;while(tokener.hasNext(){result[i++]=toker.nextToken();}36、數(shù)組有沒(méi)有l(wèi)ength()這個(gè)方法?String有沒(méi)有l(wèi)ength()這個(gè)方法?數(shù)組沒(méi)有l(wèi)ength()這個(gè)方法,有l(wèi)ength的屬性。String有有l(wèi)ength()這個(gè)方法。37、下面這條語(yǔ)句一共創(chuàng)立了多少個(gè)對(duì)象:Strings="a"+"b"+"c"+"d";答:對(duì)于如下代碼:Strings1="a";Strings2=s1+"b";Strings3="a"+"b";System.out.println(s2=="ab");System.out.println(s3=="ab");第一條語(yǔ)句打印的結(jié)果為false,第二條語(yǔ)句打印的結(jié)果為true,這說(shuō)明javac編譯能夠?qū)ψ址A恐苯酉嗉拥谋硎臼竭M(jìn)行優(yōu)化,不必要等到運(yùn)行期去進(jìn)行加法運(yùn)算處理,而是在編譯時(shí)去掉其中的加號(hào),直接將其編譯成一個(gè)這些常量相連的結(jié)果。題目中的第一行代碼被編譯器在編譯時(shí)優(yōu)化后,相當(dāng)于直接定義了一個(gè)”abcd”的字符串,因此,上面的代碼應(yīng)該只創(chuàng)立了一個(gè)String對(duì)象。寫(xiě)如下兩行代碼,Strings="a"+"b"+"c"+"d";System.out.println(s=="abcd");最終打印的結(jié)果應(yīng)該為true。38、try{}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally{}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?結(jié)論:finally中的代碼比return和break語(yǔ)句后執(zhí)行40、final,finally,finalize的區(qū)別。final用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。內(nèi)部類要訪問(wèn)局部變量,局部變量必須定義成final類型。finally是異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行。finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,能夠覆蓋此方法提供垃圾收集時(shí)的其它資源回收,例如關(guān)閉文件等。JVM不保證此方法總被調(diào)用41、運(yùn)行時(shí)異常與一般異常有何異同?異常表示程序運(yùn)行過(guò)程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的一般操作中可能遇到的異常,是一種常見(jiàn)運(yùn)行錯(cuò)誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,可是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。42、error和exception有什么區(qū)別?error表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能指望程序能處理這樣的情況。exception表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況。43、Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。異常是指java程序運(yùn)行時(shí)(非編譯)所發(fā)生的非正常情況或錯(cuò)誤。Java對(duì)異常進(jìn)行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個(gè)子類:Error和Exception,Error表示應(yīng)用程序本身無(wú)法克服和恢復(fù)的一種嚴(yán)重問(wèn)題,程序只有死的份了,例如,說(shuō)內(nèi)存溢出和線程死鎖等系統(tǒng)問(wèn)題。Exception表示程序還能夠克服和恢復(fù)的問(wèn)題,其中又分為系統(tǒng)異常和普通異常,系統(tǒng)異常是軟件本身缺陷所導(dǎo)致的問(wèn)題,也就是軟件開(kāi)發(fā)人員考慮不周所導(dǎo)致的問(wèn)題,軟件使用者無(wú)法克服和恢復(fù)這種問(wèn)題,但在這種問(wèn)題下還能夠讓軟件系統(tǒng)繼續(xù)運(yùn)行或者讓軟件死掉,例如,數(shù)組腳本越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException)、類轉(zhuǎn)換異常(ClassCastException);普通異常是運(yùn)行環(huán)境的變化或異常所導(dǎo)致的問(wèn)題,是用戶能夠克服的問(wèn)題,例如,網(wǎng)絡(luò)斷線,硬盤(pán)空間不夠,發(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異常。44、請(qǐng)寫(xiě)出你最常見(jiàn)到的5個(gè)runtimeexception。所謂系統(tǒng)異常,就是…..,它們都是RuntimeException的子類,在jdkdoc中查RuntimeException類,就能夠看到其所有的子類列表,也就是看到了所有的系統(tǒng)異常。我比較有印象的系統(tǒng)異常有:NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException。45、JAVA語(yǔ)言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中能夠拋出異常嗎?46、java中有幾種方法能夠?qū)崿F(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法?stop()和suspend()方法為何不推薦使用?java5以前,有如下兩種:第一種:newThread(){}.start();這表示調(diào)用Thread子類對(duì)象的run方法,newThread(){}表示一個(gè)Thread的匿名子類的實(shí)例對(duì)象,子類加上run方法后的代碼如下:newThread(){publicvoidrun(){}}.start();第二種:newThread(newRunnable(){}).start();這表示調(diào)用Thread對(duì)象接受的Runnable對(duì)象的run方法,newRunnable(){}表示一個(gè)Runnable的匿名子類的實(shí)例對(duì)象,runnable的子類加上run方法后的代碼如下:newThread(newRunnable(){publicvoidrun(){}}).start();從java5開(kāi)始,還有如下一些線程池創(chuàng)立多線程的方式:ExecutorServicepool=Executors.newFixedThreadPool(3)for(inti=0;i<10;i++){pool.execute(newRunable(){publicvoidrun(){}});}Executors.newCachedThreadPool().execute(newRunable(){publicvoidrun(){}});Executors.newSingleThreadExecutor().execute(newRunable(){publicvoidrun(){}});有兩種實(shí)現(xiàn)方法,分別使用newThread()和newThread(runnable)形式,第一種直接調(diào)用thread的run方法,因此,我們往往使用Thread子類,即newSubThread()。第二種調(diào)用runnable的run方法。有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口用synchronized關(guān)鍵字修飾同步方法反對(duì)使用stop(),是因?yàn)樗话踩?。它?huì)解除由線程獲取的所有鎖定,而且如果對(duì)象處于一種不連貫狀態(tài),那么其它線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問(wèn)題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時(shí)候,目標(biāo)線程會(huì)停下來(lái),但卻依然持有在這之前獲得的鎖定。此時(shí),其它任何線程都不能訪問(wèn)鎖定的資源,除非被"掛起"的線程恢復(fù)運(yùn)行。對(duì)任何線程來(lái)說(shuō),如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何一個(gè)鎖定的資源,就會(huì)造成死鎖。因此不應(yīng)該使用suspend(),而應(yīng)在自己的Thread類中置入一個(gè)標(biāo)志,指出線程應(yīng)該活動(dòng)還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個(gè)notify()重新啟動(dòng)線程。47、sleep()和wait()有什么區(qū)別?(網(wǎng)上的答案:sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其它線程,可是監(jiān)控狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep不會(huì)釋放對(duì)象鎖。wait是Object類的方法,對(duì)此對(duì)象調(diào)用wait方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。)48、同步和異步有何異同,在什么情況下分別使用她們?舉例說(shuō)明。如果數(shù)據(jù)將在線程間共享。例如正在寫(xiě)的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫(xiě)過(guò)了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來(lái)執(zhí)行的方法,而且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。49.下面兩個(gè)方法同步嗎?(自己創(chuàng)造)classTest{synchronizedstaticvoidsayHello3(){}synchronizedvoidgetX(){}}50、多線程有幾種實(shí)現(xiàn)方法?同步有幾種實(shí)現(xiàn)方法?多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notifywait():使一個(gè)線程處于等待狀態(tài),而且釋放所持有的對(duì)象的lock。sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)51、啟動(dòng)一個(gè)線程是用run()還是start()?.啟動(dòng)一個(gè)線程是調(diào)用start()方法,使線程就緒狀態(tài),以后能夠被調(diào)度為運(yùn)行狀態(tài),一個(gè)線程必須關(guān)聯(lián)一些具體的執(zhí)行代碼,run()方法是該線程所關(guān)聯(lián)的執(zhí)行代碼。52、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?分幾種情況:1.其它方法前是否加了synchronized關(guān)鍵字,如果沒(méi)加,則能。2.如果這個(gè)方法內(nèi)部調(diào)用了wait,則能夠進(jìn)入其它synchronized方法。3.如果其它個(gè)方法都加了synchronized關(guān)鍵字,而且內(nèi)部沒(méi)有調(diào)用wait,則不能。4.如果其它方法是static,它用的同步鎖是當(dāng)前類的字節(jié)碼,與非靜態(tài)的方法不能同步,因?yàn)榉庆o態(tài)的方法用的是this。53、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系一個(gè)程序中能夠有多條執(zhí)行線索同時(shí)執(zhí)行,一個(gè)線程就是程序中的一條執(zhí)行線索,每個(gè)線程上都關(guān)聯(lián)有要執(zhí)行的代碼,即能夠有多段程序代碼同時(shí)運(yùn)行,每個(gè)程序至少都有一個(gè)線程,即main方法執(zhí)行的那個(gè)線程。如果只是一個(gè)cpu,它怎么能夠同時(shí)執(zhí)行多段程序呢?這是從宏觀上來(lái)看的,cpu一會(huì)執(zhí)行a線索,一會(huì)執(zhí)行b線索,切換時(shí)間很快,給人的感覺(jué)是a,b在同時(shí)執(zhí)行,好比大家在同一個(gè)辦公室上網(wǎng),只有一條鏈接到外部網(wǎng)線,其實(shí),這條網(wǎng)線一會(huì)為a傳數(shù)據(jù),一會(huì)為b傳數(shù)據(jù),由于切換時(shí)間很短暫,因此,大家感覺(jué)都在同時(shí)上網(wǎng)。狀態(tài):就緒,運(yùn)行,synchronize阻塞,wait和sleep掛起,結(jié)束。wait必須在synchronized內(nèi)部調(diào)用。調(diào)用線程的start方法后線程進(jìn)入就緒狀態(tài),線程調(diào)度系統(tǒng)將就緒狀態(tài)的線程轉(zhuǎn)為運(yùn)行狀態(tài),遇到synchronized語(yǔ)句時(shí),由運(yùn)行狀態(tài)轉(zhuǎn)為阻塞,當(dāng)synchronized獲得鎖后,由阻塞轉(zhuǎn)為運(yùn)行,在這種情況能夠調(diào)用wait方法轉(zhuǎn)為掛起狀態(tài),當(dāng)線程關(guān)聯(lián)的代碼執(zhí)行完后,線程變?yōu)榻Y(jié)束狀態(tài)。54、簡(jiǎn)述synchronized和java.util.concurrent.locks.Lock的異同?主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能主要不同點(diǎn):Lock有比synchronized更精確的線程語(yǔ)義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,而且必須在finally從句中釋放。Lock還有更強(qiáng)大的功能,例如,它的tryLock方法能夠非阻塞方式去拿鎖。55、設(shè)計(jì)4個(gè)線程,其中兩個(gè)線程每次對(duì)j增加1,另外兩個(gè)線程對(duì)j每次減少1。寫(xiě)出程序。以下程序使用內(nèi)部類實(shí)現(xiàn)線程,對(duì)j增減的時(shí)候沒(méi)有考慮順序問(wèn)題。56、子線程循環(huán)10次,接著主線程循環(huán)100,接著又回到子線程循環(huán)10次,接著再回到主線程又循環(huán)100,如此循環(huán)50次,請(qǐng)寫(xiě)出程序。57、介紹Collection框架的結(jié)構(gòu)答:隨意發(fā)揮題,天南海北誰(shuí)便談,只要讓別覺(jué)得你知識(shí)淵博,理解透徹即可。58、Collection框架中實(shí)現(xiàn)比較要實(shí)現(xiàn)什么接口comparable/comparator59、ArrayList和Vector的區(qū)別答:這兩個(gè)類都實(shí)現(xiàn)了List接口(List接口繼承了Collection接口),她們都是有序集合,即存儲(chǔ)在這兩個(gè)集合中的元素的位置都是有順序的,相當(dāng)于一種動(dòng)態(tài)的數(shù)組,我們以后能夠按位置索引號(hào)取出某個(gè)元素,,而且其中的數(shù)據(jù)是允許重復(fù)的,這是HashSet之類的集合的最大不同處,HashSet之類的集合不能夠按索引號(hào)去檢索其中的元素,也不允許有重復(fù)的元素(原來(lái)題目問(wèn)的與hashset沒(méi)有任何關(guān)系,但為了說(shuō)清楚ArrayList與Vector的功能,我們使用對(duì)比喻式,更有利于說(shuō)明問(wèn)題)。接著才說(shuō)ArrayList與Vector的區(qū)別,這主要包括兩個(gè)方面:.(1)同步性:Vector是線程安全的,也就是說(shuō)是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不同步的。如果只有一個(gè)線程會(huì)訪問(wèn)到集合,那最好是使用ArrayList,因?yàn)樗豢紤]線程安全,效率會(huì)高些;如果有多個(gè)線程會(huì)訪問(wèn)到集合,那最好是使用Vector,因?yàn)椴恍枰覀冏约涸偃タ紤]和編寫(xiě)線程安全的代碼。備注:對(duì)于Vector&ArrayList、Hashtable&HashMap,要記住線程安全的問(wèn)題,記住Vector與Hashtable是舊的,是java一誕生就提供了的,它們是線程安全的,ArrayList與HashMap是java2時(shí)才提供的,它們是線程不安全的。因此,我們講課時(shí)先講老的。(2)數(shù)據(jù)增長(zhǎng):ArrayList與Vector都有一個(gè)初始的容量大小,當(dāng)存儲(chǔ)進(jìn)它們里面的元素的個(gè)數(shù)超過(guò)了容量時(shí),就需要增加ArrayList與Vector的存儲(chǔ)空間,每次要增加存儲(chǔ)空間時(shí),不是只增加一個(gè)存儲(chǔ)單元,而是增加多個(gè)存儲(chǔ)單元,每次增加的存儲(chǔ)單元的個(gè)數(shù)在內(nèi)存空間利用與程序效率之間要取得一定的平衡。Vector默認(rèn)增長(zhǎng)為原來(lái)兩倍,而ArrayList的增長(zhǎng)策略在文檔中沒(méi)有明確規(guī)定(從源代碼看到的是增長(zhǎng)為原來(lái)的1.5倍)。ArrayList與Vector都能夠設(shè)置初始的空間大小,Vector還能夠設(shè)置增長(zhǎng)的空間大小,而ArrayList沒(méi)有提供設(shè)置增長(zhǎng)空間的方法??偨Y(jié):即Vector增長(zhǎng)原來(lái)的一倍,ArrayList增加原來(lái)的0.5倍。60、HashMap和Hashtable的區(qū)別(條理上還需要整理,也是先說(shuō)相同點(diǎn),再說(shuō)不同點(diǎn))HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),她們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,在只有一個(gè)線程訪問(wèn)的情況下,效率要高于Hashtable。HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Mapinterface的一個(gè)實(shí)現(xiàn)。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問(wèn)Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一樣,因此性能不會(huì)有很大的差異。就HashMap與HashTable主要從三方面來(lái)說(shuō)。一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)二.同步性:Hashtable是線程安全的,也就是說(shuō)是同步的,而HashMap是線程序不安全的,不是同步的三.值:只有HashMap能夠讓你將空值作為一個(gè)表的條目的key或value61、List和Map區(qū)別?一個(gè)是存儲(chǔ)單列數(shù)據(jù)的集合,另一個(gè)是存儲(chǔ)鍵和值這樣的雙列數(shù)據(jù)的集合,List中存儲(chǔ)的數(shù)據(jù)是有順序,而且允許重復(fù);Map中存儲(chǔ)的數(shù)據(jù)是沒(méi)有順序的,其鍵是不能重復(fù)的,它的值是能夠有重復(fù)的。62、List,Set,Map是否繼承自Collection接口?List,Set是,Map不是63、List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?首先,List與Set具有相似性,它們都是單列元素的集合,因此,它們有一個(gè)功共同的父接口,叫Collection。Set里面不允許有重復(fù)的元素,所謂重復(fù),即不能有兩個(gè)相等(注意,不是僅僅是相同)的對(duì)象List表示有先后順序的集合,注意,不是那種按年齡、按大小、按價(jià)格之類的排序。當(dāng)我們多次調(diào)用add(Obje)方法時(shí),每次加入的對(duì)象就像火車(chē)站買(mǎi)票有排隊(duì)順序一樣,按先來(lái)后到的順序排序。有時(shí)候,也能夠插隊(duì),即調(diào)用add(intindex,Obje)方法,就能夠指定當(dāng)前對(duì)象在集合中的存放位置。一個(gè)對(duì)象能夠被重復(fù)存儲(chǔ)進(jìn)List中,每調(diào)用一次add方法,這個(gè)對(duì)象就被插入進(jìn)集合中一次,其實(shí),并不是把這個(gè)對(duì)象本身存儲(chǔ)進(jìn)了集合中,而是在集合中用一個(gè)索引變量指向這個(gè)對(duì)象,當(dāng)這個(gè)對(duì)象被add多次時(shí),即相當(dāng)于集合中有多個(gè)索引指向了這個(gè)對(duì)象。List除了能夠以Iterator接口取得所有的元素,再逐一遍歷各個(gè)元素之外,還能夠調(diào)用get(indexi)來(lái)明確說(shuō)明取第幾個(gè)。Map與List和Set不同,它是雙列的集合,其中有put方法,定義如下:put(objkey,objvalue),每次存儲(chǔ)時(shí),要存儲(chǔ)一對(duì)key/value,不能存儲(chǔ)重復(fù)的key,這個(gè)重復(fù)的規(guī)則也是按equals比較相等。取則能夠根據(jù)key獲得相應(yīng)的value,即get(Objectkey)返回值為key所對(duì)應(yīng)的value。另外,也能夠獲得所有的key的結(jié)合,還能夠獲得所有的value的結(jié)合,還能夠獲得key和value組合成的Map.Entry對(duì)象的集合。List以特定次序來(lái)持有元素,可有重復(fù)元素。Set無(wú)法擁有重復(fù)元素,內(nèi)部排序。Map保存key-value值,value可多值。HashSet按照hashcode值的某種運(yùn)算方式進(jìn)行存儲(chǔ),而不是直接按hashCode值的大小進(jìn)行存儲(chǔ)。例如,"abc">78,"def">62,"xyz">65在hashSet中的存儲(chǔ)順序不是62,65,78,這些問(wèn)題感謝以前一個(gè)叫崔健的學(xué)員提出,最后經(jīng)過(guò)查看源代碼給她解釋清楚,看本次培訓(xùn)學(xué)員當(dāng)中有多少能看懂源碼。LinkedHashSet按插入的順序存儲(chǔ),那被存儲(chǔ)對(duì)象的hashcode方法還有什么作用呢?學(xué)員想想!hashset集合比較兩個(gè)對(duì)象是否相等,首先看hashcode方法是否相等,然后看equals方法是否相等。new兩個(gè)Student插入到HashSet中,看HashSet的size,實(shí)現(xiàn)hashcode和equals方法后再看size。同一個(gè)對(duì)象能夠在Vector中加入多次。往集合里面加元素,相當(dāng)于集合里用一根繩子連接到了目標(biāo)對(duì)象。往HashSet中卻加不了多次的。64、說(shuō)出ArrayList,Vector,LinkedList的存儲(chǔ)性能和特性ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,可是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,因此索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),一般性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,可是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,因此插入速度較快。LinkedList也是線程不安全的,LinkedList提供了一些方法,使得LinkedList能夠被當(dāng)作堆棧和隊(duì)列來(lái)使用。65、去掉一個(gè)Vector集合中重復(fù)的元素VectornewVector=newVector();For(inti=0;i<vector.size();i++){Objectobj=vector.get(i);if(!newVector.contains(obj);newVector.add(obj);}還有一種簡(jiǎn)單的方式,HashSetset=newHashSet(vector);66、Collection和Collections的區(qū)別。Collection是集合類的上級(jí)接口,繼承與她的接口主要有Set和List.Collections是針對(duì)集合類的一個(gè)幫助類,她提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操作。67、Set里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢?是用==還是equals()?它們有何區(qū)別?Set里的元素是不能重復(fù)的,元素重復(fù)與否是使用equals()方法進(jìn)行判斷的。equals()和==方法決定引用值是否指向同一對(duì)象equals()在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類型相配的話,返回真值68、你所知道的集合類都有哪些?主要方法?最常見(jiàn)的集合類是List和Map。List的具體實(shí)現(xiàn)包括ArrayList和Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲(chǔ)和操作任何類型對(duì)象的元素列表。List適用于按數(shù)值索引訪問(wèn)元素的情形。Map提供了一個(gè)更通用的元素存儲(chǔ)方法。Map集合類用于存儲(chǔ)元素對(duì)(稱作"鍵"和"值"),其中每個(gè)鍵映射到一個(gè)值。ArrayList/VectoràListàCollectionHashSet/TreeSetàSetPropetiesàHashTableàMapTreemap/HashMap我記的不是方法名,而是思想,我知道它們都有增刪改查的方法,但這些方法的具體名稱,我記得不是很清楚,對(duì)于set,大概的方法是add,remove,contains;對(duì)于map,大概的方法就是put,remove,contains等,因?yàn)?,我只要在eclispe下按點(diǎn)操作符,很自然的這些方法就出來(lái)了。我記住的一些思想就是List類會(huì)有g(shù)et(intindex)這樣的方法,因?yàn)樗軌虬错樞蛉≡兀鴖et類中沒(méi)有g(shù)et(intindex)這樣的方法。List和set都能夠迭代出所有元素,迭代時(shí)先要得到一個(gè)iterator對(duì)象,因此,set和list類都有一個(gè)iterator方法,用于返回那個(gè)iterator對(duì)象。map能夠返回三個(gè)集合,一個(gè)是返回所有的key的集合,另外一個(gè)返回的是所有value的集合,再一個(gè)返回的key和value組合成的EntrySet對(duì)象的集合,map也有g(shù)et方法,參數(shù)是key,返回值是key對(duì)應(yīng)的value。69、兩個(gè)對(duì)象值相同(x.equals(y)==true),但卻可有不同的hashcode,這句話對(duì)不對(duì)?對(duì)。如果對(duì)象要保存在HashSet或HashMap中,它們的equals相等,那么,它們的hashcode值就必須相等。如果不是要保存在HashSet或HashMap,則與hashcode沒(méi)有什么關(guān)系了,這時(shí)候hashcode不等是能夠的,例如arrayList存儲(chǔ)的對(duì)象就不用實(shí)現(xiàn)hashcode,當(dāng)然,我們沒(méi)有理由不實(shí)現(xiàn),一般都會(huì)去實(shí)現(xiàn)的。70、TreeSet里面放對(duì)象,如果同時(shí)放入了父類和子類的實(shí)例對(duì)象,那比較時(shí)使用的是父類的compareTo方法,還是使用的子類的compareTo方法,還是拋異常?。☉?yīng)該是沒(méi)有針對(duì)問(wèn)題的確切的答案,當(dāng)前的add方法放入的是哪個(gè)對(duì)象,就調(diào)用哪個(gè)對(duì)象的compareTo方法,至于這個(gè)compareTo方法怎么做,就看當(dāng)前這個(gè)對(duì)象的類中是如何編寫(xiě)這個(gè)方法的)71、說(shuō)出一些常見(jiàn)的類,包,接口,請(qǐng)各舉5個(gè)要讓人家感覺(jué)你對(duì)javaee開(kāi)發(fā)很熟,因此,不能僅僅只列corejava中的那些東西,要多列你在做ssh項(xiàng)目中涉及的那些東西。就寫(xiě)你最近寫(xiě)的那些程序中涉及的那些類。常見(jiàn)的類:BufferedReaderBufferedWriterFileReaderFileWirterStringIntegerjava.util.Date,System,Class,List,HashMap常見(jiàn)的包;java.langjava.iojava.utiljava.sql,javax.servlet,org.apache.strtuts.action,org.hibernate常見(jiàn)的接口:RemoteListMapDocumentNodeList,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、Session(Hibernate),HttpSession72、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請(qǐng)說(shuō)出她們分別是哪些類?字節(jié)流,字符流。字節(jié)流繼承于InputStreamOutputStream,字符流繼承于InputStreamReaderOutputStreamWriter。在java.io包中還有許多其它的流,主要是為了提高性能和使用方便。73、字節(jié)流與字符流的區(qū)別要把一片二進(jìn)制數(shù)據(jù)數(shù)據(jù)逐一輸出到某個(gè)設(shè)備中,或者從某個(gè)設(shè)備中逐一讀取一片二進(jìn)制數(shù)據(jù),不論輸入輸出設(shè)備是什么,我們要用統(tǒng)一的方式來(lái)完成這些操作,用一種抽象的方式進(jìn)行描述,這個(gè)抽象描述方式起名為IO流,對(duì)應(yīng)的抽象類為OutputStream和InputStream,不同的實(shí)現(xiàn)類就代表不同的輸入和輸出設(shè)備,它們都是針對(duì)字節(jié)進(jìn)行操作的。在應(yīng)用中,經(jīng)常要完全是字符的一段文本輸出去或讀進(jìn)來(lái),用字節(jié)流能夠嗎?計(jì)算機(jī)中的一切最終都是二進(jìn)制的字節(jié)形式存在。對(duì)于“中國(guó)”這些字符,首先要得到其對(duì)應(yīng)的字節(jié),然后將字節(jié)寫(xiě)入到輸出流。讀取時(shí),首先讀到的是字節(jié),可是我們要把它顯示為字符,我們需要將字節(jié)轉(zhuǎn)換成字符。由于這樣的需求很廣泛,人家專門(mén)提供了字符流的包裝類。底層設(shè)備永遠(yuǎn)只接受字節(jié)數(shù)據(jù),有時(shí)候要寫(xiě)字符串到底層設(shè)備,需要將字符串轉(zhuǎn)成字節(jié)再進(jìn)行寫(xiě)入。字符流是字節(jié)流的包裝,字符流則是直接接受字符串,它內(nèi)部將串轉(zhuǎn)成字節(jié),再寫(xiě)入底層設(shè)備,這為我們向IO設(shè)別寫(xiě)入或讀取字符串提供了一點(diǎn)點(diǎn)方便。74、什么是java序列化,如何實(shí)現(xiàn)java序列化?或者請(qǐng)解釋Serializable接口的作用。我們有時(shí)候?qū)⒁粋€(gè)java對(duì)象變成字節(jié)流的形式傳出去或者從一個(gè)字節(jié)流中恢復(fù)成一個(gè)java對(duì)象,例如,要將java對(duì)象存儲(chǔ)到硬盤(pán)或者傳送給網(wǎng)絡(luò)上的其它計(jì)算機(jī),這個(gè)過(guò)程我們能夠自己寫(xiě)代碼去把一個(gè)java對(duì)象變成某個(gè)格式的字節(jié)流再傳輸,可是,jre本身就提供了這種支持,我們能夠調(diào)用OutputStream的writeObject方法來(lái)做,如果要讓java幫我們做,要被傳輸?shù)膶?duì)象必須實(shí)現(xiàn)serializable接口,這樣,javac編譯時(shí)就會(huì)進(jìn)行特殊處理,編譯的類才能夠被writeObject方法操作,這就是所謂的序列化。需要被序列化的類必須實(shí)現(xiàn)Serializable接口,該接口是一個(gè)mini接口,其中沒(méi)有需要實(shí)現(xiàn)的方法,implementsSerializable只是為了標(biāo)注該對(duì)象是可被序列化的。例如,在web開(kāi)發(fā)中,如果對(duì)象被保存在了Session中,tomcat在重啟時(shí)要把Session對(duì)象序列化到硬盤(pán),這個(gè)對(duì)象就必須實(shí)現(xiàn)Serializable接口。如果對(duì)象要經(jīng)過(guò)分布式系統(tǒng)進(jìn)行網(wǎng)絡(luò)傳輸或經(jīng)過(guò)rmi等遠(yuǎn)程調(diào)用,這就需要在網(wǎng)絡(luò)上傳輸對(duì)象,被傳輸?shù)膶?duì)象就必須實(shí)現(xiàn)Serializable接口。75、描述一下JVM加載class文件的原理機(jī)制?JVM中類的裝載是由ClassLoader和它的子類來(lái)實(shí)現(xiàn)的,JavaClassLoader是一個(gè)重要的Java運(yùn)行時(shí)系統(tǒng)組件。它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類文件的類。76、heap和stack有什么區(qū)別。java的內(nèi)存分為兩類,一類是棧內(nèi)存,一類是堆內(nèi)存。棧內(nèi)存是指程序進(jìn)入一個(gè)方法時(shí),會(huì)為這個(gè)方法單獨(dú)分配一塊私屬存儲(chǔ)空間,用于存儲(chǔ)這個(gè)方法內(nèi)部的局部變量,當(dāng)這個(gè)方法結(jié)束時(shí),分配給這個(gè)方法的棧會(huì)釋放,這個(gè)棧中的變量也將隨之釋放。堆是與棧作用不同的內(nèi)存,一般用于存放不放在當(dāng)前方法棧中的那些數(shù)據(jù),例如,使用new創(chuàng)立的對(duì)象都放在堆里,因此,它不會(huì)隨方法的結(jié)束而消失。方法中的局部變量使用final修飾后,放在堆中,而不是棧中。77、GC是什么?為什么要有GC?GC是垃圾收集的意思(GabageCollection),內(nèi)存處理是編程人員容易出現(xiàn)問(wèn)題的地方,忘記或者錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能能夠自動(dòng)監(jiān)測(cè)對(duì)象是否超過(guò)作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的,Java語(yǔ)言沒(méi)有提供釋放已分配內(nèi)存的顯示操作方法。78、垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制。Java語(yǔ)言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c++程序員最頭疼的內(nèi)存管理的問(wèn)題迎刃而解,它使得Java程序員在編寫(xiě)程序的時(shí)候不再需要考慮內(nèi)存管理。由于有個(gè)垃圾回收機(jī)制,Java中的對(duì)象不再有"作用域"的概念,只有對(duì)象的引用才有"作用域"。垃圾回收能夠有效的防止內(nèi)存泄露,有效的使用能夠使用的內(nèi)存。垃圾回收器一般是作為一個(gè)單獨(dú)的低級(jí)別的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)死亡的或者長(zhǎng)時(shí)間沒(méi)有使用的對(duì)象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行垃圾回收?;厥諜C(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。79、垃圾回收器的基本原理是什么?垃圾回收器能夠馬上回收內(nèi)存嗎?有什么辦法主動(dòng)通知虛擬機(jī)進(jìn)行垃圾回收?對(duì)于GC來(lái)說(shuō),當(dāng)程序員創(chuàng)立對(duì)象時(shí),GC就開(kāi)始監(jiān)控這個(gè)對(duì)象的地址、大小以及使用情況。一般,GC采用有向圖的方式記錄和管理堆(heap)中的所有對(duì)象。經(jīng)過(guò)這種方式確定哪些對(duì)象是"可達(dá)的",哪些對(duì)象是"不可達(dá)的"。當(dāng)GC確定一些對(duì)象為"不可達(dá)"時(shí),GC就有責(zé)任回收這些內(nèi)存空間。能夠。程序員能夠手動(dòng)執(zhí)行System.gc(),通知GC運(yùn)行,可是Java語(yǔ)言規(guī)范并不保證GC一定會(huì)執(zhí)行。80、什么時(shí)候用assert。assertion(斷言)在軟件開(kāi)發(fā)中是一種常見(jiàn)的調(diào)試方式,很多開(kāi)發(fā)語(yǔ)言中都支持這種機(jī)制。在實(shí)現(xiàn)中,assertion就是在程序中的一條語(yǔ)句,它對(duì)一個(gè)boolean表示式進(jìn)行檢查,一個(gè)正確程序必須保證這個(gè)boolean表示式的值為true;如果該值為false,說(shuō)明程序已經(jīng)處于不正確的狀態(tài)下,assert將給出警告或退出。一般來(lái)說(shuō),assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查一般在開(kāi)發(fā)和測(cè)試時(shí)開(kāi)啟。為了提高性能,在軟件發(fā)布后,assertion檢查一般是關(guān)閉的。81、java中會(huì)存在內(nèi)存泄漏嗎,請(qǐng)簡(jiǎn)單描述。所謂內(nèi)存泄露就是指一個(gè)不再被程序使用的對(duì)象或變量一直被占據(jù)在內(nèi)存中。java中有垃圾回收機(jī)制,它能夠保證一對(duì)象不再被引用的時(shí)候,即對(duì)象編程了孤兒的時(shí)候,對(duì)象將自動(dòng)被垃圾回收器從內(nèi)存中清除掉。由于Java使用有向圖的方式進(jìn)行垃圾回收管理,能夠消除引用循環(huán)的問(wèn)題,例如有兩個(gè)對(duì)象,相互引用,只要它們和根進(jìn)程不可達(dá)的,那么GC也是能夠回收它們的82、能不能自己寫(xiě)個(gè)類,也叫java.lang.String?能夠,但在應(yīng)用的時(shí)候,需要用自己的類加載器去加載,否則,系統(tǒng)的類加載器永遠(yuǎn)只是去加載jre.jar包中的那個(gè)java.lang.String。由于在tomcat的web應(yīng)用程序中,都是由webapp自己的類加載器先自己加載WEB-INF/classess目錄中的類,然后才委托上級(jí)的類加載器加載,如果我們?cè)趖omcat的web應(yīng)用程序中寫(xiě)一個(gè)java.lang.String,這時(shí)候Servlet程序加載的就是我們自己寫(xiě)的java.lang.String,可是這么干就會(huì)出很多潛在的問(wèn)題,原來(lái)所有用了java.lang.String類的都將出現(xiàn)問(wèn)題。例如,運(yùn)行下面的程序:packagejava.lang;publicclassString{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println("string");}}報(bào)告的錯(cuò)誤如下:java.lang.NoSuchMethodError:mainExceptioninthread"main"這是因?yàn)榧虞d了jre自帶的java.lang.String,而該類中沒(méi)有main方法。83.Java代碼查錯(cuò)1.abstractclassName{privateStringname;publicabstractbooleanisStupidName(Stringname){}}大俠們,這有何錯(cuò)誤?答案:錯(cuò)。abstractmethod必須以分號(hào)結(jié)尾,且不帶花括號(hào)。2.publicclassSomething{voiddoSomething(){privateStrings="";intl=s.length();}}有錯(cuò)嗎?答案:錯(cuò)。局部變量前不能放置任何訪問(wèn)修飾符(private,public,和protected)。final能夠用來(lái)修飾局部變量(final如同abstract和strictfp,都是非訪問(wèn)修飾符,strictfp只能修飾class和method而非variable)。3.abstractclassSomething{privateabstractStringdoSomething();}這仿佛沒(méi)什么錯(cuò)吧?答案:錯(cuò)。abstract的methods不能以private修飾。abstract的methods就是讓子類implement(實(shí)現(xiàn))具體細(xì)節(jié)的,怎么能夠用private把a(bǔ)bstractmethod封鎖起來(lái)呢?(同理,abstractmethod前不能加final)。4.publicclassSomething{publicintaddOne(finalintx){return++x;}}這個(gè)比較明顯。答案:錯(cuò)。intx被修飾成final,意味著x不能在addOnemethod中被修改。5.publicclassSomething{publicstaticvoidmain(String[]args){Othero=newOther();newSomething().addOne(o);}publicvoidaddOne(finalOthero){o.i++;}}classOther{publicinti;}和上面的很相似,都是關(guān)于final的問(wèn)題,這有錯(cuò)嗎?答案:正確。在addOnemethod中,參數(shù)o被修飾成final。如果在addOnemethod里我們修改了o的reference(比如:o=newOther();),那么如同上例這題也是錯(cuò)的。但這里修改的是o的membervairable(成員變量),而o的reference并沒(méi)有改變。6.classSomething{inti;publicvoiddoSomething(){System.out.println("i="+i);}}有什么錯(cuò)呢?看不出來(lái)啊。答案:正確。輸出的是"i=0"。inti屬於instantvariable(實(shí)例變量,或叫成員變量)。instantvariable有default的defaultvalue是0。7.classSomething{finalinti;publicvoiddoSomething(){System.out.println("i="+i);}}和上面一題只有一個(gè)地方不同,就是多了一個(gè)final。這難道就錯(cuò)了嗎?答案:錯(cuò)。finalinti是個(gè)final的instantvariable(實(shí)例變量,或叫成員變量)。final的instantvariable沒(méi)有defaultvalue,必須在constructor(構(gòu)造器)結(jié)束之前被賦予一個(gè)明確的值。能夠修改為"finalinti=0;"。8.publicclassSomething{publicstaticvoidmain(String[]args){Somethings=newSomething();System.out.println("s.doSomething()returns"+doSomething());}publicStringdoSomething(){return"Dosomething...";}}看上去很完美。答案:錯(cuò)??瓷先ピ趍ain里calldoSomething沒(méi)有什么問(wèn)題,畢竟兩個(gè)methods都在同一個(gè)class里。但仔細(xì)看,main是static的。staticmethod不能直接callnon-staticmethods??筛某?System.out.println("s.doSomething()returns"+s.doSomething());"。同理,staticmethod不能訪問(wèn)non-staticinstantvariable。9.此處,Something類的文件名叫OtherThing.javaclassSomething{privatestaticvoidmain(String[]something_to_do){System.out.println("Dosomething...");}}這個(gè)仿佛很明顯。答案:正確。從來(lái)沒(méi)有人說(shuō)過(guò)Java的Class名字必須和其文件名相同。但publicclass的名字必須和文件名相同。10.interfaceA{intx=0;}classB{intx=1;}classCextendsBimplementsA{publicvoidpX(){System.out.println(x);}publicstaticvoidmain(String[]args){newC().pX();}}答案:錯(cuò)誤。在編譯時(shí)會(huì)發(fā)生錯(cuò)誤(錯(cuò)誤描述不同的JVM有不同的信息,意思就是未明確的x調(diào)用,兩個(gè)x都匹配(就象在同時(shí)importjava.util和java.sql兩個(gè)包時(shí)直接聲明Date一樣)。對(duì)于父類的變量,能夠用super.x來(lái)明確,而接口的屬性默認(rèn)隱含為publicstaticfinal.因此能夠經(jīng)過(guò)A.x來(lái)明確。11.interfacePlayable{voidplay();}interfaceBounceable{voidplay();}interfaceRollableextendsPlayable,Bounceable{Ballba

溫馨提示

  • 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)論