




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
面試題集
面試題集共分為以下十部分:
一、CoreJava:1一95題1一24頁
基礎(chǔ)及語法:1—61題1—13頁
異常:62—69題13—15頁
集合:70—80題15—18頁
線程:81—90題18—21頁
10&Socket:91—95題21—24頁
二、00AD&UML:96一101題24—25頁
三、XML:102—105題26—29頁
四、SQL:106—109題29—31頁
五、JDBC&Hibernate:110一121題31—35頁
六、Web:122—161題35—44頁
七、EJB&Spring:162—179題44—47頁
八、數(shù)據(jù)結(jié)構(gòu)&算法&計算機基礎(chǔ):180—187題47—51頁
九、C++:188—201題51—55頁
十、Weblogic及其它(附加部分)1——13題55—57頁
一、CoreJava部分:(共95題:基礎(chǔ)91道,中等難度4道)
基礎(chǔ)及語法部分:(共61題:基礎(chǔ)60道、中等難度1道)
1、面向?qū)ο蟮奶卣饔心男┓矫??【基礎(chǔ)】
答:面向?qū)ο蟮奶卣髦饕幸韵聝簜€方面:
1)抽象:抽象就是忽略一個主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便
更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,
而只是選擇其中的一部分,暫時不用部分細(xì)節(jié)。抽象包括兩個方面,
一是過程抽象,二是數(shù)據(jù)抽象。
2)繼承:繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵類的重用,
它提供了一種明確表述共性的方法。對象的一個新類可以從現(xiàn)有的類
中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為
原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類
可以從它的基類那里繼承方法和實例變量,并且類可以修改或增加新
的方法使之更適合特殊的需要。
3)封裝:封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定
義的界面。面向?qū)ο笥嬎闶加谶@個基本概念,即現(xiàn)實世界可以被描繪
成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪
問其他對象。
4)多態(tài)性:多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)
性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行
為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。
2、作用域public,private,protected,以及不寫時的區(qū)別?【基礎(chǔ)】
答:區(qū)別如下:
作用域當(dāng)前類同包子孫類其他
publicVVVV
protectedVVVX
defaultVVXX
privateVXXX
不寫時默認(rèn)為defaulto
3、String是最基本的數(shù)據(jù)類型嗎?【基礎(chǔ)】
答:不是。
4、float型floatf=3.4是否正確?【基礎(chǔ)】
答:不正確;精度不準(zhǔn)確,應(yīng)該用強制類型轉(zhuǎn)換,如下所示:float
f=(float)3.4o
5、語句floatf=:L3;編譯能否通過?【基礎(chǔ)】
答:不能;應(yīng)該用強制類型轉(zhuǎn)換,如下所示:floatf=(float)1.3;。
6、shortsi=1;si=si+1;有什么錯?
shortsi=1;si+=1;有什么錯?【基礎(chǔ)】
答:5死心1=1;51=51+1;$1+1運算結(jié)果是屁型,需要強制轉(zhuǎn)換類
型;
shortsi=1;si+=1;可以正確編譯,自動類型提升。
7、Java有沒有g(shù)ot。?【基礎(chǔ)】
答:goto是java中的保留字,現(xiàn)在沒有在java中使用。
8>int和Integer有什么區(qū)別?【基礎(chǔ)】
答: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,Float,
Double
引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引
用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問
題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當(dāng)引用類型和原始類型用
作某個類的實例數(shù)據(jù)時所指定的缺省值。對象引用實例變量的缺省值
為null,而原始類型實例變量的缺省值與它們的類型有關(guān)。
9、&和&&的區(qū)別?【基礎(chǔ)】
答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與
(and)o
10、簡述邏輯操作(&,/)與條件操作(&&,||)的區(qū)別?【基礎(chǔ)】
答:區(qū)別主要有兩點:a.條件操作只能操作布爾型的,而邏輯操作不僅
可以操作
布爾型,而且可以操作數(shù)值型b.邏輯操作不會產(chǎn)生短路。
11、heap和stack有什么區(qū)別?【基礎(chǔ)】
答:棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成,
棧按照后進(jìn)
先出的方式進(jìn)行處理;堆是棧的一個組成元素。
第3頁共59頁
12、Math.round(11.5)等于多少?Math.round(-11.5)等于多少?【基礎(chǔ)】
答:Math.round(11.5)==12Math.round(-11.5)==-llround方法返回與
參數(shù)
最接近的長整數(shù),參數(shù)加V2后求其floor。
13、swtich是否能作用在byte上,是否能作用在long上,是否能
作用在String
±?【基礎(chǔ)】
答:switch(exprl)中,exprl是一個整數(shù)表達(dá)式。因此傳遞給switch
和case
語句的參數(shù)應(yīng)該是int、short>char或者byte。long,string都不能作
用
于swticho
14、編程題:用最有效率的方法算出2乘以8等於兒?【基礎(chǔ)】
答:2<<3。
15、有沒有l(wèi)ength。這個方法?String有沒有l(wèi)ength。這個方法?【基
礎(chǔ)】
答:數(shù)組沒有l(wèi)ength。這個方法,有l(wèi)ength的屬性。String有l(wèi)ength()
這個
方法。
16,^JAVA中,如何跳出當(dāng)前的多重嵌套循環(huán)?【基礎(chǔ)】
答:在最外層循環(huán)前加label標(biāo)識,然后用breakdabel方法即可跳出
多重循環(huán)。
17^構(gòu)造器Constructor是否可被。verride?【基礎(chǔ)】
答:構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可
以被重
載Overloadingo
18>兩個對象值相同(x.equals(y)==true),但卻可有不同的hashcode,
這
句話對不對?【基礎(chǔ)】
答:不對,有相同的hashcode。
19、是否可以繼承String類?【基礎(chǔ)】
答:String類是final類,故不可以繼承。
20^以下二條語句返回值為true的有:
A:“beijing"=="beijing”;
B:“beijing”.equalsIgnoreCase(newString("beijing"));【基(3
答:A和Bo
21、當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法后,此方法可改變這個對
象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用
傳遞?【基礎(chǔ)】
答:是值傳遞。Java編程語言只有值傳遞參數(shù)。當(dāng)一個對象實例作
為一個參數(shù)被傳遞到方法中時,參數(shù)的值就是對該對象的引用。對象
的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用是永遠(yuǎn)不會改變
的。
22、我們在web應(yīng)用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符,如
iso8859-l
等,如何輸出一個某種編碼的字符串?【基礎(chǔ)】
答:publicStringtranslate(Stringstr){
第4頁共59頁
StringtempStr=
try{
tempStr=newString(str.getBytes("ISO-8859-1"),"GBK");
tempStr=tempStr.trim();
}catch(Exceptione){
System.err.println(e.getMessage());
}
returntempStr;
}
23、String和StringBuffer的區(qū)別?【基礎(chǔ)】
答:JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存
和操作字
符串,即包含多個字符的字符數(shù)據(jù)。這個String類提供了數(shù)值不可改
變的字符
串。而這個StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)
據(jù)要改變
的時候你就可以使用StringBuffero典型地,你可以使用StringBuffers
來動
態(tài)構(gòu)造字符數(shù)據(jù)。
24、String,StringBufferStringBuilder的區(qū)別。【基礎(chǔ)】
答:String的長度是不可變的;
StringBuffer的長度是可變的,如果你對字符串中的內(nèi)容經(jīng)常進(jìn)
行操作,特別是內(nèi)容要修改時,那么使用StringBuffer,如果最后需要
String,那么使用StringBuffer的toString()方法;線程安全;
StringBuilder是從JDK5開始,為StringBuffer該類補充了一個單
個線程使用的等價類;通常應(yīng)該優(yōu)先使用StringBuilder類,因為它持
所有相同的操作,但由于它不執(zhí)行同步,所以速度更快。
25、Overload和Override的區(qū)別。Overloaded的方法是否可以改變
返回值的類
型?【基礎(chǔ)】
答:方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同
表現(xiàn)。重
寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading
是一個
類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的
名稱和參
數(shù),我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,
將調(diào)用
子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在
一個類中定
義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類
型,則稱為方
法的重載(Overloading)。Overloaded的方法是可以改變返回值的類
型。
26、定義類A和類B如下:【基礎(chǔ)】
classA{
inta=l;
doubled=2.0;
voidshow(){
System.out.println("ClassA:a="+a+"\td="+d);
)
)
classBextendsA{
第5頁共59頁
floata=3.0f;
Stringd="Javaprogram.";
voidshow(){
super.show();
System.out.println("ClassB:a="+a+"\td=,,+d);
)
}
(1)若在應(yīng)用程序的main方法中有以下語句:
Aa=newA();
a.show();
則輸出的結(jié)果如何?
(2)若在應(yīng)用程序的main方法中定義類B的對象b:
Ab=newB();
b.show();
則輸出的結(jié)果如何?
答:輸出結(jié)果為:
1)ClassA:a=ld=2.0;
2)ClassA:a=ld=2.0
ClassB:a=3.0d=Javaprogramo
27、描述一下JVM加載class文件的原理機制?【基礎(chǔ)】
答:JVM中類的裝載是由ClassLoader和它的子類來實現(xiàn)的,Java
ClassLoader
是一個重要的Java運行時系統(tǒng)組件。它負(fù)責(zé)在運行時查找和裝入類
文件的類。
28、char型變量中能不能存貯一個中文漢字?為什么?【基礎(chǔ)】
答:能夠定義成為一個中文的,因為java中以unicode編碼,一個
char占16
個字節(jié),所以放一個中文是沒問題的。
29、abstractclass和interface有什么區(qū)別?【基礎(chǔ)】
答:聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstractclass),
它用
于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在
該類中實現(xiàn)/
該類的情況。不能創(chuàng)建abstract類的實例。然而可以創(chuàng)建一個變量,
其類型是
一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構(gòu)造函數(shù)
或抽象靜態(tài)
方法。Abstract類的子類為它們父類中的所有抽象方法提供實現(xiàn),否
則它們也
是抽象類為。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它類
可以在類中
實現(xiàn)這些方法。接口(interface)是抽象類的變體。新型多繼承性可
通過實現(xiàn)
這樣的接口而獲得。接口中的所有方法都是抽象的,所有成員變量都
是public
staticfinal的。一個類可以實現(xiàn)多個接口,當(dāng)類實現(xiàn)特殊接口時,它
定義(即
將程序體給予)所有這種接口的方法。然后,它可以在實現(xiàn)了該接口
的類的任何
對象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用
變量的類型。
通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)
換,
instanceof運算符可以用來決定某對象的類是否實現(xiàn)了接口。
第6頁共59頁
30^StaticNestedClass^0InnerClass的不同?【基礎(chǔ)】
答:StaticNestedClass是被聲明為靜態(tài)(static)的內(nèi)部類,它可以
不依賴
于外部類實例被實例化。而通常的內(nèi)部類需要在外部類實例化后才能
實例化。
31、java中會存在內(nèi)存泄漏嗎,請簡單描述?!净A(chǔ)】
答:會;存在無用但可達(dá)的對象,這些對象不能被GC回收,導(dǎo)致耗
費內(nèi)存資源。
32>abstract的method是否可同時是static,是否可同時是native,是
否可同
時是synchronized?【基礎(chǔ)】
答:都不能。
33、靜態(tài)變量和實例變量的區(qū)別?【基礎(chǔ)】
答:靜態(tài)變量也稱為類變量,歸全類共有,它不依賴于某個對象,可
通過類名直
接訪問;而實例變量必須依存于某一實例,只能通過對象才能訪問到
它。
34、是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用?【基
礎(chǔ)】
答:不可以,如果其中包含對象的method(),不能保證對象初始化。
35、寫clone。方法時,通常都有一行代碼,是什么?【基礎(chǔ)】
答:Clone有缺省行為:super.clone(),他負(fù)責(zé)產(chǎn)生正確大小的空間,
并逐位
復(fù)制。
36、GC是什么?為什么要有GC?【基礎(chǔ)】
答:GC是垃圾收集的意思(GabageCollection),內(nèi)存處理是編程人
員容易出
現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定
甚至崩潰,
Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達(dá)到自
動回收內(nèi)存的
目的,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。Java程
序員不用
擔(dān)心內(nèi)存管理,因為垃圾收集器會自動進(jìn)行管理。要請求垃圾收集,
可以調(diào)用下
面的方法之一:System.gc()或Runtime.getRuntime().gc()。
37、垃圾回收的優(yōu)點和原理。并考慮2種回收機制?!净A(chǔ)】
答:Java語言中一個顯著的特點就是引入了垃圾回收機制,使C++程
序員最頭疼
的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候
不再需要考
慮內(nèi)存管理。由于有個垃圾回收機制,Java中的對象不再有“作用
域”的概念,
只有對象的引用才有“作用域”。垃圾回收可以有效的防止內(nèi)存泄露,
有效的使
用可以使用的內(nèi)存。垃圾回收器通常是作為一個單獨的低級別的線程
運行,不可
預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或者長時間沒有使用的對象進(jìn)
行清楚和回
收,程序員不能實時的調(diào)用垃圾回收器對某個對象或所有對象進(jìn)行垃
圾回收?;?/p>
收機制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。
38、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存
嗎?有什么辦
法主動通知虛擬機進(jìn)行垃圾回收?【基礎(chǔ)】
答:對于GC來說,當(dāng)程序員創(chuàng)建對象時,GC就開始監(jiān)控這個對象
的地址、大小
以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中
的所有對象。
通過這種方式確定哪些對象是"可達(dá)的",哪些對象是"不可達(dá)的"。當(dāng)
GC確定一
第7頁共59頁
些對象為"不可達(dá)"時,GC就有責(zé)任回收這些內(nèi)存空間。可以。程序
員可以手動
執(zhí)行System.gc(),通口GC運行,但是Java語言規(guī)范并不保證GC一
定會執(zhí)行。
39^Strings=newString("xyz");創(chuàng)建了幾個StringObject?【基礎(chǔ)】
答:兩個對象,一個是,xyx",一個是指向"xyx"的引用對象s。
40、接口是否可繼承接口?抽象類是否可實現(xiàn)(implements)接口?抽
象類是否可
繼承實體類(concreteclass)?【基礎(chǔ)】
答:接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口,抽象類
可繼承實體
類,但前提是實體類必須有明確的構(gòu)造函數(shù)。
41、Java的接口和C++的虛類的相同和不同處?!净A(chǔ)】
答:由于Java不支持多繼承,而有可能某個類或?qū)ο笠褂梅謩e在
幾個類或?qū)?/p>
象里面的方法或?qū)傩?,現(xiàn)有的單繼承機制就不能滿足要求。與繼承相
比,接口有
更高的靈活性,因為接口中沒有任何實現(xiàn)代碼。當(dāng)一個類實現(xiàn)了接口
以后,該類
要實現(xiàn)接口里面所有的方法和屬性,并且接口里面的屬性在默認(rèn)狀態(tài)
下面都是
publicstatic,所有方法默認(rèn)情況下是public.一個類可以實現(xiàn)多個接口。
42、一個".java”源文件中是否可以包含多個類(不是內(nèi)部類)?有
什么限制?
【基礎(chǔ)】
答:可以;必須只有一個類名與文件名相同。
43、說出一些常用的類,包,接口,請各舉5個?!净A(chǔ)】
答:常用的類:BufferedReaderBufferedWriterFileReaderFileWirter
StringInteger;
常用的包:java.langjava.awtjava.iojava.utiljava.sql;
常用的接口:RemoteListMapDocumentNodeList
44>AnonymousInnerClass(匿名內(nèi)部類)是否可以extends(繼承)其它
類?
是否可以implements(實現(xiàn))interface(接口)?【基礎(chǔ)】
答:可以繼承其他類或?qū)崿F(xiàn)其他接口,在swing編程中常用此方式。
45、內(nèi)部類可以引用他包含類的成員嗎?有沒有什么限制?【基礎(chǔ)】
答:一個內(nèi)部類對象可以訪問創(chuàng)建它的外部類對象的內(nèi)容。
46、java中實現(xiàn)多態(tài)的機制是什么?【基礎(chǔ)】
答:方法的覆蓋Overriding和重載Overloading是java多態(tài)性的不同
表現(xiàn);覆
蓋Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading
是一個
類中多態(tài)性的一種表現(xiàn)。
47、在java中一個類被聲明為final類型,表示了什么意思?【基礎(chǔ)】
答:表示該類不能被繼承,是頂級類。
48、下面哪些類可以被繼承?【基礎(chǔ)】
1)java.Iang.Thread(T)
第8頁共59頁
2)java.lang.Number(T)
3)java.lang.Double(F)
4)java.Iang.Math(F)
5)java.Iang.Void(F)
6)java.Iang.Class(F)
7)java.Iang.ClassLoader(T)
答:1、2、7可以被繼承。
49、指出下面程序的運行結(jié)果:【基礎(chǔ)】
classA{
static{
System.out.print("l");
)
publicA(){
System.out.print("2");
)
)
classBextendsA{
static{
System.out.print("a");
}
publicB(){
System.out.print("b");
}
}
publicclassHello{
publicstaticvoidmain(String[]ars){
Aab=newB();〃執(zhí)行到此處,結(jié)果:la2b
ab=newB();〃執(zhí)行到此處,結(jié)果:Ia2b2b
}
}
答:輸出結(jié)果為la2b2b;糊static代碼段,可以看作是類首次加載(虛
擬機加
載)執(zhí)行的代碼,而對于類加載,首先要執(zhí)行其基類的構(gòu)造,再執(zhí)行其本
身的構(gòu)造。
50、繼承時候類的執(zhí)行順序問題,一般都是選擇題,問你將會打印出什
么?【基礎(chǔ)】
父類:
packagetest;
publicclassFatherClass{
publicFatherClass(){
System.out.println("FatherClassCreate");
}
)
子類:
packagetest;
第9頁共59頁
importtest.FatherClass;
publicclassChildClassextendsFatherClass{
publicChildClass(){
System.out.println("ChildClassCreate");
}
publicstaticvoidmain(String[]args){
FatherClassfc=newFatherClass();
ChildClasscc=newChildClass();
)
)
答:輸出結(jié)果為:
FatherClassCreate
FatherClassCreate
ChildClassCreate
51、內(nèi)部類的實現(xiàn)方式?【基礎(chǔ)】
答:示例代碼如下:
packagetest;
publicclassOuterClass{
privateclassInterClass{
publiclnterClass(){
System.out.println("lnterClassCreate");
}
}
publicOuterClass(){
InterClassic=newlnterClass();
System.out.println("OuterClassCreate");
}
publicstaticvoidmain(String[]args){
OuterClassoc=newOuterClass();
}
)
輸出結(jié)果為:
InterClassCreate
OuterClassCreate
52、關(guān)于內(nèi)部類:【基礎(chǔ)】
publicclassOuterClass{
privatedoubledl=1.0;
//insertcodehere
)
Youneedtoinsertaninnerclassdeclarationatline3,Whichtwo
innerclassdeclarationsarevalid?(Choosetwo.)
A.classlnnerOne{
第10頁共59頁
publicstaticdoublemethoda(){returndl;}
}
B.publicclasslnnerOne{
staticdoublemethoda(){returndl;}
)
C.privateclasslnnerOne{
doublemethoda(){returndl;}
}
D.staticclasslnnerOne{
protecteddoublemethoda(){returndl;}
)
E.abstractclasslnnerOne{
publicabstractdoublemethoda();
)
答:答案為C、E;說明如下:
1)靜態(tài)內(nèi)部類可以有靜態(tài)成員,而非靜態(tài)內(nèi)部類則不能有靜態(tài)成員;
故A、B
錯;
2)靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問外部類的靜態(tài)變量,而不可訪
問外部類
的非靜態(tài)變量;故D錯;
3)非靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問外部類的非靜態(tài)變量;故C
正確。
53、數(shù)據(jù)類型之間的轉(zhuǎn)換:
1)如何將數(shù)值型字符轉(zhuǎn)換為數(shù)字?
2)如何將數(shù)字轉(zhuǎn)換為字符?
3)如何取小數(shù)點前兩位并四舍五入?【基礎(chǔ)】
答:1)調(diào)用數(shù)值類型相應(yīng)包裝類中的方法parse***(String)或
valueOf(String)
即可返回相應(yīng)基本類型或包裝類型數(shù)值;
2)將數(shù)字與空字符串相加即可獲得其所對應(yīng)的字符串;另外對于基本
類型
數(shù)字還可調(diào)用String類中的valueOf(…)方法返回相應(yīng)字符串,而對于
包裝類型
數(shù)字則可調(diào)用其toString。方法獲得相應(yīng)字符串;
3)^J用該數(shù)字構(gòu)造一java.math.BigDecimal對象,再利用其round。方法
進(jìn)行四舍五入到保留小數(shù)點后兩位,再將其轉(zhuǎn)換為字符串截取最后兩
位。
54、字符串操作:如何實現(xiàn)字符串的反轉(zhuǎn)及替換?【基礎(chǔ)】
答:可用字符串構(gòu)造一StringBuffer對象,然后調(diào)用StringBuffer中的
reverse
方法即可實現(xiàn)字符串的反轉(zhuǎn),調(diào)用replace方法即可實現(xiàn)字符串的替
換。
55、編碼轉(zhuǎn)換:怎樣將GB2312編碼的字符串轉(zhuǎn)換為ISO-8859-1編
碼的字符串?
【基礎(chǔ)】
答:示例代碼如下:
Stringsi="你好";
Strings2=newString(sl.getBytes("GB2312")/"ISO-8859-1");
56、寫一個函數(shù),要求輸入一個字符串和一個字符長度,對該字符串
進(jìn)行分
隔?!净A(chǔ)】
第11頁共59頁
答:函數(shù)代碼如下:
publicString[]split(Stringstr,intchars){
intn=(str.length()+chars-l)/chars;
Stringret[]=newStringfn];
for(inti=0;i<n;i++){
if(i<n-l){
ret[i]=str.substring(i*chars,(i+l)*chars);
}else{
ret[i]=str.substring(i*chars);
}
)
returnret;
}
57、寫一個函數(shù),2個參數(shù),1個字符串,1個字節(jié)數(shù),返回截取的
字符串,要
求字符串中的中文不能出現(xiàn)亂碼:如(“我ABC”,4)應(yīng)該截為“我
AB",輸入(“我
ABC漢DEF",6)應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個”。
【基礎(chǔ)】
答:代碼如下:
publicStringsubString(Stringstr,intsubBytes){
intbytes=0;//用來存儲字符串的總字節(jié)數(shù)
for(inti=0;i<str.length();i++){
if(bytes==subBytes){
returnstr.substring(O,i);
}
charc=str.charAt(i);
if(c<256){
bytes+=1;//英文字符的字節(jié)數(shù)看作1
}else{
bytes+=2;//中文字符的字節(jié)數(shù)看作2
if(bytes-subBytes==1){
returnstr.substring(O,i);
}
}
}
returnstr;
}
58、日期和時間:
1)如何取得年月日、小時分秒?
2)如何取得從1970年到現(xiàn)在的毫秒數(shù)?
3)如何取得某個日期是當(dāng)月的最后一天?
4)如何格式化日期?【基礎(chǔ)】
答:1)創(chuàng)建java.util.Calendar實例(Calendar.getlnstance。),調(diào)用其get()
方法傳入不同的參數(shù)即可獲得參數(shù)所對應(yīng)的值,如:
第12頁共59頁
calendar.get(Calendar.YEAR);〃獲得年
2)以下方法均可獲得該毫秒數(shù):
Calendar.getlnstance().getTimelnMillis();
System.currentTimeMillis();
3)示例代碼如下:
Calendartime=Calendar.getlnstance();
time.set(Calendar.DAY_OF_MONTH/
time.getActualMaximum(Calendar.DAY_OF_MONTH));
4)利用java.text.DataFormat類中的format。方法可將日期格式化。
59、Java編程,打印昨天的當(dāng)前時刻。【基礎(chǔ)】
答:publicclassYesterdayCurrent{
publicstaticvoidmain(String[]args){
Calendarcal=Calendar.getlnstance();
cal.add(Calendar.DATE,-1);
System.out.println(cal.getTime());
)
}
60>java和javasciprt的區(qū)別?!净A(chǔ)】
答:JavaScript與Java是兩個公司開發(fā)的不同的兩個產(chǎn)品。Java是
SUN公司推
出的新一代面向?qū)ο蟮某绦蛟O(shè)計語言,特別適合于Internet應(yīng)用程序
開發(fā);而
JavaScript是Netscape公司的產(chǎn)品,其目的是為了擴展Netscape
Navigator
功能,而開發(fā)的一種可以嵌入Web頁面中的基于對象和事件驅(qū)動的
解釋性語言,
它的前身是LiveScript;而Java的前身是Oak語言。下面對兩種語言
間的異
同作如下比較:
1)基于對象和面向?qū)ο螅?/p>
Java是一種真正的面向?qū)ο蟮恼Z言,即使是開發(fā)簡單的程序,必須
設(shè)計對象;
JavaScript是種腳本語言,它可以用來制作與網(wǎng)絡(luò)無關(guān)的,與用戶交
互作用
的復(fù)雜軟件。它是一種基于對象(ObjectBased)和事件驅(qū)動(Event
Driver)
的編程語言。因而它本身提供了非常豐富的內(nèi)部對象供設(shè)計人員使
用;
2)解釋和編譯:
Java的源代碼在執(zhí)行之前,必須經(jīng)過編譯;
JavaScript是一種解釋性編程語言,其源代碼不需經(jīng)過編譯,由瀏覽
器解釋
執(zhí)行;
3)強類型變量和類型弱變量:
Java采用強類型變量檢查,即所有變量在編譯之前必須作聲明;
JavaScript中變量聲明,采用其弱類型。即變量在使用前不需作聲明,
而是
解釋器在運行時檢查其數(shù)據(jù)類型;
4)代碼格式不一樣。
61、什么時候用assert?【中等難度】
答:assertion(斷言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)
語言中都
支持這種機制。一般來說,assertion用于保證程序最基本、關(guān)鍵的
正確性。
assertion檢查通常在開發(fā)和測試時開啟。為了提高性能,在軟件發(fā)
布后,
第13頁共59頁
assertion檢查通常是關(guān)閉的。在實現(xiàn)中,斷言是一個包含布爾表達(dá)
式的語句,
在執(zhí)行這個語句時假定該表達(dá)式為true;如果表達(dá)式計算為false,那
么系統(tǒng)
會報告一個Assertionerroro
斷言用于調(diào)試目的:
assert(a>0);//throwsanAssertionerrorifa<=0
斷言可以有兩種形式:
assertExpressionl;
assertExpressionl:Expression2;
Expressionl應(yīng)該總是產(chǎn)生一個布爾值。
Expression2可以是得出一個值的任意表達(dá)式;這個值用于生成顯示
更多調(diào)
試信息的String消息。
斷言在默認(rèn)情況下是禁用的,要在編譯時啟用斷言,需使用source1.4
標(biāo)記:
javac-source1.4Test.java
要在運行時啟用斷言,可使用-enableassertions或者-ea標(biāo)記。
要在運行時選擇禁用斷言,可使用-da或者-disableassertions標(biāo)記。
要在系統(tǒng)類中啟用斷言,可使用-esa或者-dsa標(biāo)記。還可以在包的
基礎(chǔ)上
啟用或者禁用斷言??梢栽陬A(yù)計正常情況下不會到達(dá)的任何位置上放
置斷言。斷
言可以用于驗證傳遞給私有方法的參數(shù)。不過,斷言不應(yīng)該用于驗證
傳遞給公有
方法的參數(shù),因為不管是否啟用了斷言,公有方法都必須檢查其參數(shù)。
不過,既
可以在公有方法中,也可以在非公有方法中利用斷言測試后置條件。
另外,斷言
不應(yīng)該以任何方式改變程序的狀態(tài)。
異常部分:(共8題:基礎(chǔ)8道)
62、Java中的異常處理機制的簡單原理和應(yīng)用?【基礎(chǔ)】
答:當(dāng)JAVA程序違反了JAVA的語義規(guī)則時,JAVA虛擬機就會將發(fā)
生的錯誤表
示為一個異常。違反語義規(guī)則包括2種情況。一種是JAVA類庫內(nèi)置
的語義檢查。
例如數(shù)組下標(biāo)越界,會引發(fā)IndexOutOfBoundsException;訪問null的對
象時會
弓I發(fā)NullPointerException。另一種情況就是JAVA允許程序員擴展這
種語義檢
查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時用throw關(guān)鍵
字引發(fā)異常。
所有的異常都是java.Iang.Thowable的子類。
63、error和exception有什么區(qū)別?【基礎(chǔ)】
答:error表示系統(tǒng)級的錯誤和程序不必處理的異常,是恢復(fù)不是不
可能但很困
難的情況下的一種嚴(yán)重問題;比如內(nèi)存溢出,不可能指望程序能處理
這樣的情況;
exception表示需要捕捉或者需要程序進(jìn)行處理的異常,是一種設(shè)計
或?qū)崿F(xiàn)
問題;也就是說,它表示如果程序運行正常,從不會發(fā)生的情況。
64、try{}里有一個return語句,那么緊跟在這個try后的finally{}里
的code
會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后?【基礎(chǔ)】
答:會執(zhí)行,在return前執(zhí)行。
65、JAVA語言如何進(jìn)行異常處理,關(guān)鍵字:
throws,throw,try,catch,finally
分別代表什么意義?在try塊中可以拋出異常嗎?【基礎(chǔ)】
答:Java通過面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)
行分類,并
第14頁共59頁
提供了良好的接口。在Java中,每個異常都是一個對象,它是
Throwable類或
其它子類的實例。當(dāng)一個方法出現(xiàn)異常后便拋出一個異常對象,該對
象中包含有
異常信息,調(diào)用這個對象的方法可以捕獲到這個異常并進(jìn)行處理。
Java的異常
處理是通過5個關(guān)鍵詞來實現(xiàn)的:try、catch、throw、throws和finally。
般情況下是用try來執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會拋出
(throws)一個
異常,這時候你可以通過它的類型來捕捉(catch)它,或最后(finally)
由缺
省處理器來處理;
try用來指定一塊預(yù)防所有“異?!钡某绦颍?/p>
catch子句緊跟在try塊后面,用來指定你想要捕捉的“異?!钡念?/p>
型;
throw語句用來明確地拋出一個“異?!?;
throws用來標(biāo)明一個成員函數(shù)可能拋出的各種“異?!?;
Finally為確保一段代碼不管發(fā)生什么“異?!倍急粓?zhí)行一段代碼;
可以在一個成員函數(shù)調(diào)用的外面寫一個try語句,在這個成員函數(shù)內(nèi)
部寫另一
個try語句保護其他代碼。每當(dāng)遇到一個try語句,“異?!钡目蚣?/p>
就放到堆棧
上面,直到所有的try語句都完成。如果下一級的try語句沒有對某
種“異?!?/p>
進(jìn)行處理,堆棧就會展開,直到遇到有處理這種“異?!钡膖ry語句。
66、運行時異常與一般異常有何異同?【基礎(chǔ)】
答:異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異常表
示虛擬機的
通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求
方法必須
聲明拋出可能發(fā)生的非運行時異常,但是并不要求必須聲明拋出未被
捕獲的運行
時異常。
67、給我一個你最常見到的runtimeexception?【基礎(chǔ)】
答:ArithmeticException,ArrayStoreException,BufferOverflowException,
BufferllnderflowException,CannotRedoException,
CannotUndoException,
ClassCastException,CMMException,ConcurrentModificationException,
DOMException,EmptyStackException,HlegalArgumentException,
HlegalMonitorStateException,HlegalPathStateException,
HlegalStateException,ImagingOpException,IndexOutOfBoundsException,
MissingResourceException,NegativeArraySizeException,
NoSuchElementException,NullPointerException,ProfileDataException,
ProviderException,RasterFormatException,SecurityException,
SystemException,UndeclaredThrowableException,
UnmodifiableSetException,UnsupportedOperationException
68final,finally,finalize的區(qū)別?【基礎(chǔ)】
答:final:修飾符(關(guān)鍵字);如果一個類被聲明為final,意味著它
不能再
派生出新的子類,不能作為父類被繼承,因此一個類不能既被聲明為
abstract
的,又被聲明為final的;將變量或方法聲明為final,可以保證它們
在使用中
不被改變;被聲明為final的變量必須在聲明時給定初值,而在以后
的引用中只
能讀取,不可修改;被聲明為final的方法也同樣只能使用,不能重
載。
finally:再異常處理時提供finally塊來執(zhí)行任何清除操作;如果拋出
個異常,那么相匹配的catch子句就會執(zhí)行,然后控制就會進(jìn)入finally
塊(如
果有的話)。
第15頁共59頁
finalize:方法名;Java技術(shù)允許使用finalize。方法在垃圾收集器將
對象從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收
集器在確定
這個對象沒有被引用時對這個對象調(diào)用的。它是在Object類中定義
的,因此所
有的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)
行其他清
理工作。finalize。方法是在垃圾收集器刪除對象之前對這個對象調(diào)用
的。
69、類ExampleA繼承Exception,類ExampleB繼承ExampleA;【基
礎(chǔ)】
有如下代碼片斷:
try(
thrownewExampleB(ubv);
}catch(ExampleAe){
System.out.printfln("ExampleA");
}catch(Exceptione){
System.out.printfln("Exception");
}
輸出的內(nèi)容應(yīng)該是:
A:ExampleAB:ExceptionC:bD:無
答:輸出為A。
集合部分:(共11題:基礎(chǔ)11道)
70、介紹JAVA中的CollectionFramework(及如何寫自己的數(shù)據(jù)結(jié)構(gòu))
【基礎(chǔ)】
答:CollectionFrameWork如下:
Collection
pList
I(-LinkedList
IpArrayList
|LVector
|LStack
LSet
Map
(-Hashtable
pHashMap
LWeakHashMap
Collection是最基本的集合接口,一個Collection代表一組Object,
即
Collection的元素(Elements);Map提供key到value的映射。
71、List,Set,Map是否繼承自Collection接口?【基礎(chǔ)】
答:List,Set是;Map不是。
72、你所知道的集合類都有哪些?主要方法?【基礎(chǔ)】
答:最常用的集合類是List和Map。List的具體實現(xiàn)包括ArrayList和
Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲和操作任何類
型對象的元
素列表。List適用于按數(shù)值索引訪問元素的情形。Map提供了一個
更通用的
第16頁共59頁
元素存儲方法。Map集合類用于存儲元素對(稱作“鍵”和“值”),
其中每
個鍵映射到一個值。
73、說出ArrayList,Vector,LinkedList的存儲性能和特性?【基礎(chǔ)】
答:ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)
大于實際
存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,
但是插入元
素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,
Vector由
于使用了synchronized方法(線程安全),通常性能上較ArrayList差,
而
LinkedList使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或
后向遍歷,
但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。
74、Collection和Collections的區(qū)別?【基礎(chǔ)】
答:Collection是java.util下的接口,它是各種集合的父接口,繼承
于它的
接口主要有Set和List;Collections是個java.util下的類,是針對集
合的
幫助類,提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、排序、線程安
全化等操作。
75、HashMap和Hashtable的區(qū)別?【基礎(chǔ)】
答:二者都實現(xiàn)了Map接口,是將惟一鍵映射到特定的值上;主要
區(qū)別在于:
l)HashMap沒有排序,允許一個null鍵和多個null值,而Hashtable
不允許;
2)HashMap把Hashtable的contains方法去掉了,改成containsvalue
和
containsKey,因為contains方法容易讓人引起誤解;
3)Hashtable繼承自Dictionary類,HashMap是Java1.2引進(jìn)的Map
接口的實現(xiàn);
4)Hashtable的方法是Synchronize的,而HashMap不是,在多個線
程訪問
Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap就必
須為之提供外
同步。
Hashtable和HashMap采用的hash/rehash算法大致一樣,所以性能
不會有很
大的差異。
76、Arraylist與Vector區(qū)別?【基礎(chǔ)】
答:就ArrayList與Vector主要從二方面來說:
1)同步性:Vector是線程安全的(同步),而ArrayList是線程序不
安全的;
2)數(shù)據(jù)增長:當(dāng)需要增長時,Vector默認(rèn)增長一倍,而ArrayList卻是
一半。
77、List、Map、Set三個接口,存取元素時,各有什么特點?【基礎(chǔ)】
答:List以特定次序來持有元素,可有重復(fù)元素。Set無法擁有重復(fù)
元素,內(nèi)部
排序。Map保存key-value值,value可多值。
78、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢?
是用==還
是equals。?它們有何區(qū)別?【基礎(chǔ)】
答:Set里的元素是不能重復(fù)的,用equals()方法來區(qū)分重復(fù)與否。
覆蓋
equals。方法用來判斷對象的內(nèi)容是否相同,而"=="判斷地址是否
相等,用來
決定引用值是否指向同一對象。
79、用程序給出隨便大小的10個數(shù),序號為1-10,按從小到大順序
輸出,并輸
出相應(yīng)的序號?!净A(chǔ)】
第17頁共59頁
答:代碼如下:
packagetest;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Random;
publicclassRandomSort{
publicstaticvoidprintRandomBySort(){
Randomrandom=newRandom();//創(chuàng)建隨機數(shù)生成器
Listlist=newArrayList();
//生成10個隨機數(shù),并放在集合list中
for(inti=0;i<10;i++){
list.add(random.nextlnt(1000));
)
Collections.sort(list);//對集合中的元素進(jìn)行排序
Iteratorit=list.iterator();
intcount=0;
while(it.hasNext()){//順序輸出排序后集合中的元素
System.out.println(++count+":"+it.next());
}
)
publicstaticvoidmain(String[]args){
printRandomBySort();
}
}
80、用JAVA實現(xiàn)一種排序,JAVA類實現(xiàn)序列化的方法?在
COLLECTION框架中,
實現(xiàn)比較要實現(xiàn)什么樣的接口?【基礎(chǔ)】
答:用插入法進(jìn)行排序代碼如下:
packagetest;
importjava.util.*;
classInsertSort{
ArrayListal;
publiclnsertSort(intnumjntmod){
al=newArrayList(num);
Randomrand=newRandom();
System.out.printlnf'TheArrayListSortBefore:");
for(inti=0;i<num;i++){
al.add(newlnteger(Math.abs(rand.nextlnt())%mod+
D);
System.out.println("al["+i+"]="+al.get(i));
}
)
第18頁共59頁
publicvoidSortlt(){
templnt;
intMaxSize=l;
for(inti=l;i<al.size();i++){
templnt=(Integer)al.remove(i);
if(Value()>=
((lnteger)al.get(MaxSize-l)).intValue()){
al.add(MaxSize,templnt);
MaxSize++;
System.out.println(al.toStringO);
}else{
for(intj=O;j<MaxSize;j++){
if(((lnteger)al.get(j)),intValue()
>=Value()){
al.add(j,templnt);
MaxSize++;
System.out.println(al.toString());
break;
}
}
)
}
System.out.println("TheArrayListSortAfter:");
for(inti=O;i<al.size();i++){
System.out.println("al["+i+"]="+al.get(i));
}
}
publicstaticvoidmain(String[]args){
InsertSortis=newlnsertSort(10,100);
is.Sortlt();
}
}
JAVA類實現(xiàn)序例化的方法是實現(xiàn)java.io.Serializable接口;
Collection框架中實現(xiàn)比較要實現(xiàn)Comparable接口和Comparator接
口。
線程部分:(共10題:基礎(chǔ)7道,中等難度3道)
81、sleep()和wait()有什么區(qū)別?【基礎(chǔ)】
答:sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時
間,給執(zhí)行
機會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時后會自動恢復(fù)。調(diào)用
sleep不會
釋放對象鎖。wait是Object類的方法,對此對象調(diào)用wait方法導(dǎo)
致本線程放
棄對象鎖,進(jìn)入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify
方法(或
notifyAII)后本線程才進(jìn)入對象鎖定池準(zhǔn)備獲得對象鎖進(jìn)入運行狀態(tài)。
第19頁共59頁
82、當(dāng)一個線程進(jìn)入一個對象的一個synchronized方法后,其它線程
是否可進(jìn)
入此對象的其它方法?【基礎(chǔ)】
答:其它線程只能訪問該對象的其它非同步方法,同步方法則不能進(jìn)
入。
83、請說出你所知道的線程同步的方法。【基礎(chǔ)】
答:wait。:使一個線程處于等待狀態(tài),并且釋放所持有的對象的lock;
sleep。:使一個正在運行的線程處于睡眠狀態(tài),是一個靜態(tài)方法,調(diào)用
此方
法要捕捉InterruptedException異常;
notify。:喚醒一個處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時
候,
并不能確切的喚醒某一個等待狀態(tài)的線程,而是由JVM確定喚醒哪
個線程,而且
不是按優(yōu)先級;
notityAII():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線
程一
個對象的鎖,而是讓它們競爭。
84、多線程有幾種實現(xiàn)方法,都是什么?同步有幾種實現(xiàn)方法,都是什么?
【基礎(chǔ)】
答:多線程有兩種實現(xiàn)方法,分別是繼承Thread類與實現(xiàn)Runnable
接口洞步
的實現(xiàn)方面有兩種,分別是synchronized,wait與notify。
85、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。
【基礎(chǔ)】
答:如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個
線程讀到,
或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個線程寫過了,那么這些數(shù)據(jù)就是
共享數(shù)據(jù),
必須進(jìn)行同步存取。當(dāng)應(yīng)用程序在對象上調(diào)用了一個需要花費很長時
間來執(zhí)行的
方法,并且不希望讓程序等待方法的返回時,就應(yīng)該使用異步編程,
在很多情況
下采用異步途徑往往更有效率。
86、啟動一個線程是用run()還是start。?【基礎(chǔ)】
答:啟動一個線程是調(diào)用start。方法,使線程所代表的虛擬處理機處
于可運行
狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會
立即運行。
run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個線程。
87、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系?【基礎(chǔ)】
答:線程指在程序執(zhí)行過程中,能夠執(zhí)行程序代碼的一個執(zhí)行單位,
每個程序至
少都有一個線程,也就是程序本身;
Java中的線程有四種狀態(tài)分別是:運行、就緒、掛起、結(jié)束。
88、簡述synchronized^0java.util.concurrent.locks.Lock的異同?【中
等
難度】
答:主要相同點:Lock能完成synchronized所實現(xiàn)的所有功能;
主要不同點:Lock有比synchronized更精確的線程語義和更好的性
能。
synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放,并
且必須在
finally從句中釋放。
89Java中有幾種方法可以實現(xiàn)一個線程?用什么關(guān)鍵字修飾同步方
法?
stop()和suspend。方法為何不推薦使用?【中等難度】
答:有兩種實現(xiàn)方法,分別是繼承Thread類與實現(xiàn)Runnable接口;
第20頁共59頁
用synchronized關(guān)鍵字修飾同步方法;
反對使用stop(),是因為它不安全。它會解除由線程獲取的所有鎖定,
而
且如果對象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查
和修改它
們。結(jié)果很難檢查出真正的問題所在;
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。命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程
應(yīng)當(dāng)恢復(fù),
則用一個notify。重新啟動線程。
90、設(shè)計4個線程,其中兩個線程每次對j增加1,另兩個線程對j每
次減少1;
寫出程序?!局械入y度】
答:以下程序使用內(nèi)部類實現(xiàn)線程,對j增減的時候沒有考慮順序問
題:
publicclassTestThread{
privateintj;
publicTestThread(intj){this.j=j;}
privatesynchronizedvoidinc(){
j++;
System.out.println(j+"--Inc-"+
Thread.currentThread().getName());
}
privatesynchronizedvoiddec(){
j--;
System.out.println(j+"--Dec-"+
Thread.currentThread().getName());
}
publicvoidrun(){
(newDec()).start();
newThread(newlnc()).start();
(newDec()).start();
newThread(newlnc()).start();
}
classDecextendsThread{
publicvoidrun(){
for(inti=0;i<100;i++){
dec();
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年盒式軌道框架項目投資可行性研究分析報告
- 新能源船舶動力系統(tǒng)研發(fā)項目可行性分析報告
- 普通債權(quán)質(zhì)押合同范本
- 山東省年產(chǎn)5萬噸無磷高效洗衣粉助洗劑項目可行性研究報告
- 2025年中國抗腫瘤藥物行業(yè)市場深度調(diào)查及發(fā)展前景研究預(yù)測報告
- 2025-2030年中國國際標(biāo)準(zhǔn)集裝箱項目投資可行性研究分析報告
- 圓鐵線行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 2025-2030年中國百樂來行業(yè)深度研究分析報告
- 豬小腸精深加工出口腸衣肝素鈉產(chǎn)業(yè)化項目可行研究報告
- 2025年綿綸長絲項目可行性研究報告
- 家長會課件:小學(xué)三年級家長會 課件
- 醫(yī)院專業(yè)技術(shù)年度考核總結(jié)報告
- 2024中考道法時政熱點《中國外交大事大盤點》課件
- 小學(xué)生國家文化安全教育
- 2024年消防初級考試模擬試題和答案
- 小學(xué)五年級奧數(shù)競賽試題(含答案)
- Unit-3-Reading-and-thinking課文詳解課件-高中英語人教版必修第二冊
- 品牌服裝設(shè)計課件
- 小學(xué)六年級美術(shù)期末試卷及答案課件
- DB11T 381-2023既有居住建筑節(jié)能改造技術(shù)規(guī)程
- NB-T 47013.7-2012(JB-T 4730.7) 4730.7 承壓設(shè)備無損檢測 第7部分:目視檢測
評論
0/150
提交評論