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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論