java筆試經典(題及答案)2013.doc
Java筆試經典(基礎部分及答案和分析)1、一個“.java“源文件中是否可以包括多個類(不是內部類)?有什么限制?7答:可以包括多個類,但是最多只能有一個public修飾的類。2、Java有沒有goto?7答:java中有goto,但只是保留字,用來兼容以前版本的再無其他用途。3、說說s1=s1+1;有什么錯?shorts1=1;s1+=1;有什么錯?9答:前一個錯了,s1=s1+1處s1+1會使short型s1轉化成int型,但是在將int型的值賦給short型的變量將會報錯。后一個是對的,因為+=是一個復合型運算符,復合賦值運算符會自動地將運算結果轉型為其左操作數的類型,不會對s1的類型進行改變。7、char型變量中能不能存貯一個中文漢字?為什么?9答:char型的變量可以存貯一個中文字。應為Java是用Unicode來編碼的,而Unicode編碼是用16個字節來存貯char型的變量的,而一個漢字正好是用16個字節來存儲的,所以可以。8、用最有效率的方法算出2乘以8等於幾?9答:2<<3,將2左移3位。因為位運算是cpu直接運算的,所以效率最高。9、請設計一個一百億的計算器9答:10、使用final關鍵字修飾一個變量時,是引用不能變,還是引用的對象不能變?11答:final關鍵字修飾一個變量是引用不能變,引用的對象還是可以改變的。如:StringBufferstb=newStringBuffer(“abc”);Stb=newStringBuffer(“bcd”);//會報錯。但是運行stb.append(“abdeae”);不會報錯。11、“==“和equals方法究竟有什么區別?11答:==是專門用來比較兩個變量是否相等的,也就是比較兩個變量對應的內存中的數值是否相等。用來比較基本類型的數據是否相等,兩個引用是否相等(是否指向同一個對象),只能用“==”。對于equal方法,主要是用來比較對象是否相等。在Object類里的equal()方法沒有重寫的情況下,equal和==是一樣的。但是重寫后equal()是指的連個對象是否相等,即其對應的數據以及類型是否相等(hashCode()是否相等)。12、靜態變量和實例變量的區別?12答:在語法定義上看:靜態變量在定義時需要加上static,而實例變量不需要。在程序運行上看:實例變量是屬于一個實例的,當一個實例創建時系統才為之分配內存空間。而靜態變量是屬于一個類的,當程序加載到該類字節碼時,就會開辟對應的靜態空間,就可以是使用靜態變量了,而不需要創建實例。實例變量需要通過對象才能使用,但是靜態變量直接通過類來就還可以使用了。13、是否可以從一個static方法內部發出對非static方法的調用?12答:不能,一個static方法只能調用static方法。應為非靜態方法是通過實例來調用的,使用前必須先創建實例。但是static方法但調用可以不用創建實例的,所以在static方法中使用非static方法時,該非static方法沒有創建對應的實力,這時是會報錯的。14、Integer與int的區別13答:int是Java提供的8中原始數據類型之一。Java為每個原始數據類型都提供了封裝類,Integer是Java為int提供的封裝類。Int的默認值為0,而integer的默認值為null,即integer可以區分null和0的區別,int則無法表示處為復制的情況,例如想要表達出沒有參加考試和參加了考試但是成績為0分的區別,只能用Integer了。在JSP開發中Integerde默認值為null,所以用el表達式在文本框中顯示時,值為空白字符串,而int默認的默認值為0,所以用el表達式在文本框中顯示時,結果為0,所以,int不適合作為web層的表單數據的類型。在Hibernate中,如果將OID定義為Integer類型,那么Hibernate就可以根據其值是否為null而判斷一個對象是否是臨時的,如果將OID定義為了int類型,還需要在hbm映射文件中設置其unsaved-value屬性為0。15、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?13答:12和-11。Math類中提供了三個與取整有關的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對應,例如,ceil的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3)的結果為12,Math.ceil(-11.3)的結果是-11;floor的英文意義是地板,該方法就表示向下取整,Math.ceil(11.6)的結果為11,Math.ceil(-11.6)的結果是-12;最難掌握的是round方法,它表示“四舍五入”,算法為Math.floor(x+0.5),即將原來的數字加上0.5后再向下取整,所以,Math.round(11.5)的結果為12,Math.round(-11.5)的結果為-11。16、下面的代碼有什么不妥之處?131.if(username.equals(“zxx”){}2intx=1;returnx==1?true:false;答:1可能報錯(NullPointerException),因為username可能為null。2中不知道返回類型是否是int型,而且返回值一定是true,沒有必要寫成三元運算符。17、請說出作用域public,private,protected,以及不寫時的區別13答:作用域當前類同一package子類其他packagePublicYYYYProtectedYYYN默認(Friendly)YYNNPrivateYNNN18、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?14答:overload是重載,表示同一個類中可以有多個同名的方法,但是這些方法的參數列表不相同(參數的個數或者是類型不同)。Override是重寫,表示子類中的方法可以與父類中的某個方法的名稱和參數完全一樣,通過子類創建實例對象調用這個方法時,將會調用子類中的定義方法,而將父類中的這個方法覆蓋掉,這也是面向對象的一種表現形式。o