Java基礎(chǔ)面試題.docx_第1頁
Java基礎(chǔ)面試題.docx_第2頁
Java基礎(chǔ)面試題.docx_第3頁
Java基礎(chǔ)面試題.docx_第4頁
Java基礎(chǔ)面試題.docx_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

我來說兩句 來源:Java基礎(chǔ)面試題收藏我要投稿1、關(guān)于下面的程序,哪個(gè)選項(xiàng)的說法是正確的??123456789101112public class Test /* param args*/public static void main(String args) / TODO Auto-generated method stubbyte a = 3,b=2; /1byte c = a+b; /2System.out.println(c);A、編譯通過,運(yùn)行時(shí)打印出5B、編譯通過,運(yùn)行時(shí)打印出23C、編譯不通過,在/2出有錯(cuò)誤,因?yàn)榇颂巉必須是一個(gè)byte類型的變量D、編譯不通過,在/1出有錯(cuò)誤,不能這樣定義變量解析:java中涉及byte、short和char類型的運(yùn)算操作首先會(huì)把這些值轉(zhuǎn)換為int類型,然后對(duì)int類型值進(jìn)行運(yùn)算,最后得到int類型的結(jié)果。因此,如果把兩個(gè)byte類型的值相加,最后會(huì)得到一個(gè)int類型的結(jié)果。如果需要得到byte類型結(jié)果,必須將這個(gè)int類型的結(jié)果顯式轉(zhuǎn)換為byte類型把2處代碼改為下面就正確了:byte c = (byte) (a+b); /22、以下程序錯(cuò)誤的是:A、short s=1;s=s+1; B、short s=1;s+=1;解析:s+1為int,不能直接賦值給short,而B中是讀取右s的地址+13、下面程序執(zhí)行會(huì)出現(xiàn)錯(cuò)誤嗎?如果有錯(cuò)是什么錯(cuò)誤??12345678910111213141516public class PerttyTest public static void main(String args)String i=123,s;s=getStr(i);System.out.println(s);public String getStr(String s)StringBuffer sb=new StringBuffer();for(int i=s.length()-1;i=0;i-)sb.append(s.charAt(i); return sb.toString();解析:main函數(shù)是個(gè)static函數(shù),getStr不是靜態(tài)函數(shù),不能在main中調(diào)用,或者將getStr聲明為static的函數(shù),或者實(shí)例化一個(gè)PerttyTest類來調(diào)用4、談?wù)刦inal、finally、finalize的區(qū)別。(1)final修飾符(關(guān)鍵字)如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既聲明為abstract,又被聲明為final。將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖?。其初始化可以在兩個(gè)地方:一是其定義處,也就是說在final變量定義時(shí)直接給其賦值;二是在構(gòu)造函數(shù)中。這兩個(gè)地方只能選其一。聲明為final的方法同樣只能使用,不能重寫(overide)(2)finally在異常處理時(shí)提供finally塊來執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的catch子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入finally塊。(3)finalizefinalize是方法名。java技術(shù)允許使用finalize()方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。5、當(dāng)你去編譯和運(yùn)行下面的代碼時(shí),會(huì)發(fā)生下面哪種情況??123456789101112131415class ExBaseabstract public void martley()public class MyEx extends ExBasepublic static void main(String argv)DataInputStream fi =new DataInputStream(System.in);tryfi.readChar();catch(IOException e)System.exit(0)finalllySytemt.out.println(Doing finally);A. 編譯時(shí)錯(cuò)誤B. 程序運(yùn)行的時(shí)候,等待一個(gè)鍵盤輸入然后就跳出C. 程序運(yùn)行的時(shí)候,等待一個(gè)鍵盤輸入,在屏幕上顯示出“Doing finally”,然后跳出D. 運(yùn)行中立即跳出解析:這是一道典型的誤導(dǎo)人思維的題目。其實(shí)程序會(huì)產(chǎn)生的錯(cuò)誤就想本地方法和抽象方法沒有方法體一樣。另外,abstract方法所在的類必須用abstract修飾。還需要注意一個(gè)問題,abstract類中卻不一定有abstract方法。抽象類不能夠生成對(duì)象,抽象類天生是被繼承的。抽象類的抽象方法都只能用public、abstract修飾,接口的方法也是這樣。6、說明淺復(fù)制和深復(fù)制的區(qū)別?淺復(fù)制(淺克?。┍粡?fù)制對(duì)象的所有變量都含有與原來的對(duì)象相同的值,而所有的對(duì)其他對(duì)象的引用仍然指向原來的對(duì)象。換言之,淺復(fù)制僅僅復(fù)制所考慮的對(duì)象,而不復(fù)制它所引用的對(duì)象。深復(fù)制(深克?。┍粡?fù)制對(duì)象的所有變量都含有與原來的對(duì)象相同的值,除去那些引用其他對(duì)象的變量。那些引用其他對(duì)象的變量將指向被復(fù)制過的新對(duì)象,而不再是原有的那些被引用的對(duì)象。換言之,深復(fù)制把要復(fù)制的對(duì)象所引用的對(duì)象都復(fù)制了一遍。舉例說明:?12345678910111213141516171819202122232425262728293031323334353637class ShallowCopy implements Cloneableprivate Date begin;public Date getBegin() return begin;public void setBegin(Date begin) this.begin = begin;Overrideprotected Object clone() throws CloneNotSupportedException / TODO Auto-generated method stubreturn super.clone();class DeepCopy implements Cloneableprivate Date begin;public Date getBegin() return begin;public void setBegin(Date begin) this.begin = begin;Overrideprotected Object clone() throws CloneNotSupportedException / TODO Auto-generated method stubDeepCopy obj=null;obj=(DeepCopy) super.clone();obj.setBegin(Date) getBegin().clone();return obj;7、實(shí)現(xiàn)一個(gè)拷貝構(gòu)造函數(shù):?123456789101112131415161718192021222324252627282930313233343536373839public class Test1 public int i;public Test test;public Test1() / TODO Auto-generated constructor stubpublic Test1(Test1 t)i=t.i;test = new Test();test.i=t.test.i;/* param args*/public static void main(String args) / TODO Auto-generated method stub/A a = new B();Test1 t = new Test1();t.i=9;t.test=new Test();t.test.i=10;Test1 t1=new Test1(t);System.out.println(t1.i);System.out.println(t1.test.i);class Testpublic int i;public Test()public Test(Test t)i=t.i;8、Java中public,protected,private,default的區(qū)別?public,protected,private是Java里用來定義成員的訪問權(quán)限的,另外還有一種是“default”,也就是在成員前不加任何權(quán)限修飾符。這四個(gè)修飾符的訪問權(quán)限如下表:-類內(nèi)部 package內(nèi) 子類 package外public 允許 允許 允許 允許protected 允許 允許 允許 不允許default 允許 允許 不允許 不允許private 允許 不允許 不允許 不允許-Java的訪問控制是停留在編譯層的,也就是它不會(huì)再class文件中留下任何的痕跡,只在編譯的時(shí)候進(jìn)行訪問控制的檢查。其實(shí),通過反射的手段,是可以訪問任何包下任何類中的成員的,例如,訪問類的私有成員也是可能的。9、Java中接口的方法只能是public abstract類型的,可以省略,變量只能是final static類型的,可以省略。10、Java中equal和=的區(qū)別是什么?首先看一段代碼:?123456789101112public class Test1public static void main(String args)String a=1234;String b=1234;String c = new String(1234);System.out.println(a=b);System.out.println(a=c);System.out.println(a.equals(c);結(jié)果:truefalsetrue首先應(yīng)該先了解java中String new和直接賦值的區(qū)別。第二個(gè)為false的原因在于a和c指向的是不同的對(duì)象。=運(yùn)用在基本數(shù)據(jù)類型的時(shí)候,通過比較他們的實(shí)際的值來判定是否相等,而用于比較引用類型的時(shí)候,則是比較兩個(gè)引用的地址是否相等,也就是是否指向同一個(gè)對(duì)象。通過new來創(chuàng)建的字符串單獨(dú)生成一個(gè)對(duì)象,所以a和c指向的不是同一個(gè)對(duì)象。equal()方法是java.lang.object的方法,也就是所有的Java類都會(huì)有的方法。它可以被程序員覆蓋重寫,通過自定義的方式來判定兩個(gè)對(duì)象是否相等。對(duì)于字符串String類來說,他的equal方法用來比較字符串的字符序列是否 完全相等。11、Java中char的取值范圍?Java中char采用Unicode編碼格式,用兩個(gè)字節(jié)來表示一個(gè)字符,一共16bit,它所能表示的最大值為2的16次方12、Java中char能否存儲(chǔ)漢字?char是可以存儲(chǔ)漢字的,每個(gè)中文字符都有對(duì)應(yīng)的Unicode編碼。13、Java中Overload(重載)和Override(覆蓋)的區(qū)別重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。多個(gè)同名函數(shù)同時(shí)存在,具有不同的參數(shù)個(gè)數(shù)/類型,不關(guān)心返回值類型。覆蓋,是指在子類中對(duì)父類的某方法進(jìn)行重新定義,其子類的該方法名以及參數(shù)位置和個(gè)數(shù)以及返回值均與父類相同,從而在調(diào)用子類的該方法時(shí),不會(huì)執(zhí)行父類的方法。如果在父類中以final定義的方法,在子類中無法重寫。14、以下代碼的輸出是什么??1234567891011121314151617181920212223242526272829303132333435363738394041public class Test1 public Test1() / TODO Auto-generated constructor stub/* param args*/public static void main(String args) / TODO Auto-generated method stubA a = new B();System.out.println(-);B b = new B();class AstaticSystem.out.println(AAAAAAAAAAAAAA static);public A() /super();System.out.println(AAAAAAAAAAAAAA);/ TODO Auto-generated constructor stubclass B extends AstaticSystem.out.println(BBBBBBBBBBBBBBB static);public B() /super();System.out.println(BBBBBBBBBBBBBB);結(jié)果:AAAAAAAAAAAAAA staticBBBBBBBBBBBBBBB staticAAAAAAAAAAAAAABBBBBBBBBBBBBB-AAAAAAAAAAAAAABBBBBBBBBBBBBBstatic(即static塊),會(huì)在類被加載的時(shí)候執(zhí)行且僅會(huì)被執(zhí)行一次,一般用來初始化靜態(tài)變量和調(diào)用靜態(tài)方法15、Java中的幾種引用方式:強(qiáng)引用、軟引用、弱引用、虛引用的區(qū)別?在JDK1.2以前的版本中,當(dāng)一個(gè)對(duì)象不被任何變量引用,那么程序就無法再使用這個(gè)對(duì)象。也就是說,只有對(duì)象處于可觸及狀態(tài),程序才能使用它。這 就像在日常生活中,從商店購(gòu)買了某樣物品后,如果有用,就一直保留它,否則就把它扔到垃圾箱,由清潔工人收走。一般說來,如果物品已經(jīng)被扔到垃圾箱,想再 把它撿回來使用就不可能了。但有時(shí)候情況并不這么簡(jiǎn)單,你可能會(huì)遇到類似雞肋一樣的物品,食之無味,棄之可惜。這種物品現(xiàn)在已經(jīng)無用了,保留它會(huì)占空間,但是立刻扔掉它也不劃算,因 為也許將來還會(huì)派用場(chǎng)。對(duì)于這樣的可有可無的物品,一種折衷的處理辦法是:如果家里空間足夠,就先把它保留在家里,如果家里空間不夠,即使把家里所有的垃 圾清除,還是無法容納那些必不可少的生活用品,那么再扔掉這些可有可無的物品。從JDK1.2版本開始,把對(duì)象的引用分為四種級(jí)別,從而使程序能更加靈活的控制對(duì)象的生命周期。這四種級(jí)別由高到低依次為:強(qiáng)引用、軟引用、弱引用和虛引用。1) 強(qiáng)引用平時(shí)我們編程的時(shí)候例如:Object object=new Object();那object就是一個(gè)強(qiáng)引用了。如果一個(gè)對(duì)象具有強(qiáng)引用,那就類似于必不可少的生活用品,垃圾回收器絕不會(huì)回收它。當(dāng)內(nèi)存空 間不足,Java虛擬機(jī)寧愿拋出OutOfMemoryError錯(cuò)誤,使程序異常終止,也不會(huì)靠隨意回收具有強(qiáng)引用的對(duì)象來解決內(nèi)存不足問題。2) 軟引用(SoftReference)如果一個(gè)對(duì)象只具有軟引用,那就類似于可有可物的生活用品。如果內(nèi)存空間足夠,垃圾回收器就不會(huì)回收它,如果內(nèi)存空間不足了,就會(huì)回收這些對(duì)象的內(nèi)存。只 要垃圾回收器沒有回收它,該對(duì)象就可以被程序使用。軟引用可用來實(shí)現(xiàn)內(nèi)存敏感的高速緩存。 軟引用可以和一個(gè)引用隊(duì)列(ReferenceQueue)聯(lián) 合使用,如果軟引用所引用的對(duì)象被垃圾回收,Java虛擬機(jī)就會(huì)把這個(gè)軟引用加入到與之關(guān)聯(lián)的引用隊(duì)列中。3) 弱引用(WeakReference)如果一個(gè)對(duì)象只具有弱引用,那就類似于可有可物的生活用品。弱引用與軟引用的區(qū)別在于:只具有弱引用的對(duì)象擁有更短暫的生命周期。在垃圾回收器線程掃描它 所管轄的內(nèi)存區(qū)域的過程中,一旦發(fā)現(xiàn)了只具有弱引用的對(duì)象,不管當(dāng)前內(nèi)存空間足夠與否,都會(huì)回收它的內(nèi)存。不過,由于垃圾回收器是一個(gè)優(yōu)先級(jí)很低的線程, 因此不一定會(huì)很快發(fā)現(xiàn)那些只具有弱引用的對(duì)象。 弱引用可以和一個(gè)引用隊(duì)列(ReferenceQueue)聯(lián)合使用,如果弱引用所引用的對(duì)象被垃圾回 收,Java虛擬機(jī)就會(huì)把這個(gè)弱引用加入到與之關(guān)聯(lián)的引用隊(duì)列中。4) 虛引用(PhantomReference)虛引用顧名思義,就是形同虛設(shè),與其他幾種引用都不同,虛引用并不會(huì)決定對(duì)象的生命周期。如果一個(gè)對(duì)象僅持有虛引用,那么它就和沒有任何引用一樣,在 任何時(shí)候都可能被垃圾回收。 虛引用主要用來跟蹤

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論