




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選30道Java筆試題解答1. 下面哪些是Thread類的方法()A start() B run() C exit() D getPriority()答案:ABD解析:看Java API docs吧: 2. 下面關(guān)于java.lang.Exception類的說(shuō)法正確的是()A 繼承自Throwable B Serialable CD 不記得,反正不正確答案:A解析:Java異常的
2、基類為java.lang.Throwable,java.lang.Error和java.lang.Exception繼承 Throwable,RuntimeException和其它的Exception等繼承Exception,具體的RuntimeException繼承RuntimeException。擴(kuò)展:錯(cuò)誤和異常的區(qū)別(Error vs Exception) 1) java.lang.Error: Throwable的子類,用于標(biāo)記嚴(yán)重錯(cuò)誤。合理的應(yīng)用程序不應(yīng)該去try/catch這種錯(cuò)誤。絕大多數(shù)的錯(cuò)誤都是非正常的,就根本不該出現(xiàn)的。java.lang.Excepti
3、on: Throwable的子類,用于指示一種合理的程序想去catch的條件。即它僅僅是一種程序運(yùn)行條件,而非嚴(yán)重錯(cuò)誤,并且鼓勵(lì)用戶程序去catch它。2) Error和RuntimeException 及其子類都是未檢查的異常(unchecked exceptions),而所有其他的Exception類都是檢查了的異常(checked exceptions).checked exceptions: 通常是從一個(gè)可以恢復(fù)的程序中拋出來(lái)的,并且最好能夠從這種異常中使用程序恢復(fù)。比如FileNotFoundException, ParseException等。檢查了的異常發(fā)生
4、在編譯階段,必須要使用trycatch(或者throws)否則編譯不通過(guò)。unchecked exceptions: 通常是如果一切正常的話本不該發(fā)生的異常,但是的確發(fā)生了。發(fā)生在運(yùn)行期,具有不確定性,主要是由于程序的邏輯問(wèn)題所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。從語(yǔ)言本身的角度講,程序不該去catch這類異常,雖然能夠從諸如RuntimeException這樣的異常中catch并恢復(fù),但是并不鼓勵(lì)終端程序員這么做,因?yàn)橥耆珱](méi)要必要。因?yàn)檫@類錯(cuò)誤本身就是bug,應(yīng)該被修復(fù),出現(xiàn)此類錯(cuò)誤時(shí)程序就應(yīng)該立即停止執(zhí)
5、行。 因此,面對(duì)Errors和unchecked exceptions應(yīng)該讓程序自動(dòng)終止執(zhí)行,程序員不該做諸如try/catch這樣的事情,而是應(yīng)該查明原因,修改代碼邏輯。RuntimeException:RuntimeException體系包括錯(cuò)誤的類型轉(zhuǎn)換、數(shù)組越界訪問(wèn)和試圖訪問(wèn)空指針等等。處理RuntimeException的原則是:如果出現(xiàn) RuntimeException,那么一定是程序員的錯(cuò)誤。例如,可以通過(guò)檢查數(shù)組下標(biāo)和數(shù)組邊界來(lái)避免數(shù)組越界訪問(wèn)異常。其他(IOException等等)checked異常一般是外部錯(cuò)誤,例如試圖從文件尾后讀取數(shù)據(jù)等,這并不是程序本身的錯(cuò)誤,而是在應(yīng)
6、用環(huán)境中出現(xiàn)的外部錯(cuò)誤。 3. 下面程序的運(yùn)行結(jié)果是()String str1 = "hello"String str2 = "he" + new String("llo");System.err.println(str1 = str2);答案:false解析:因?yàn)閟tr2中的llo是新申請(qǐng)的內(nèi)存塊,而=判斷的是對(duì)象的地址而非值,所以不一樣。如果是String str2 = str1,那么就是true了。 4. 下列說(shuō)法正確的有()A class中的constructor不可省略B const
7、ructor必須與class同名,但方法不能與class同名C constructor在一個(gè)對(duì)象被new時(shí)執(zhí)行D一個(gè)class只能定義一個(gè)constructor答案:C 解析:這里可能會(huì)有誤區(qū),其實(shí)普通的類方法是可以和類名同名的,和構(gòu)造方法唯一的區(qū)分就是,構(gòu)造方法沒(méi)有返回值。 5. 具體選項(xiàng)不記得,但用到的知識(shí)如下:String a = new String10;則:a0a9 = nulla.length = 10如果是int a = new int10;則:a0a9 = 0a.length = 10 6. 下面程序的運(yùn)行結(jié)果:() public static v
8、oid main(String args) Thread t = new Thread() public void run() pong(); ; t.run(); System.out.print("ping"); static void pong() System.out.print("pong"); A pingpong B pongping C pingpong和pongping都有可能 D 都不輸出答案:B解
9、析:這里考的是Thread類中start()和run()方法的區(qū)別了。start()用來(lái)啟動(dòng)一個(gè)線程,當(dāng)調(diào)用start方法后,系統(tǒng)才會(huì)開(kāi)啟一個(gè)新的線程,進(jìn)而調(diào)用run()方法來(lái)執(zhí)行任務(wù),而單獨(dú)的調(diào)用run()就跟調(diào)用普通方法是一樣的,已經(jīng)失去線程的特性了。因此在啟動(dòng)一個(gè)線程的時(shí)候一定要使用start()而不是run()。 7. 下列屬于關(guān)系型數(shù)據(jù)庫(kù)的是()A. Oracle B MySql C IMS D MongoDB答案:AB解答:IMS(Information Management System
10、160;)數(shù)據(jù)庫(kù)是IBM公司開(kāi)發(fā)的兩種數(shù)據(jù)庫(kù)類型之一; 一種是關(guān)系數(shù)據(jù)庫(kù),典型代表產(chǎn)品:DB2;另一種則是層次數(shù)據(jù)庫(kù),代表產(chǎn)品:IMS層次數(shù)據(jù)庫(kù)。非關(guān)系型數(shù)據(jù)庫(kù)有MongoDB、memcachedb、Redis等。 8. GC線程是否為守護(hù)線程?()答案:是解析:線程分為守護(hù)線程和非守護(hù)線程(即用戶線程)。只要當(dāng)前JVM實(shí)例中尚存在任何一個(gè)非守護(hù)線程沒(méi)有結(jié)束,守護(hù)線程就全部工作;只有當(dāng)最后一個(gè)非守護(hù)線程結(jié)束時(shí),守護(hù)線程隨著JVM一同結(jié)束工作。守護(hù)線程最典型的應(yīng)用就是 GC (垃圾回收器) 9. volatile關(guān)鍵字是否能保證線程安全?()答案:不能解析:vola
11、tile關(guān)鍵字用在多線程同步中,可保證讀取的可見(jiàn)性,JVM只是保證從主內(nèi)存加載到線程工作內(nèi)存的值是最新的讀取值,而非cache中。但多個(gè)線程對(duì)volatile的寫(xiě)操作,無(wú)法保證線程安全。例如假如線程1,線程2 在進(jìn)行read,load 操作中,發(fā)現(xiàn)主內(nèi)存中count的值都是5,那么都會(huì)加載這個(gè)最新的值,在線程1堆count進(jìn)行修改之后,會(huì)write到主內(nèi)存中,主內(nèi)存中的count變量就會(huì)變?yōu)?;線程2由于已經(jīng)進(jìn)行read,load操作,在進(jìn)行運(yùn)算之后,也會(huì)更新主內(nèi)存count的變量值為6;導(dǎo)致兩個(gè)線程及時(shí)用volatile關(guān)鍵字修改之后,還是會(huì)存在并發(fā)的情況。10. 下列說(shuō)法正確的是()A L
12、inkedList繼承自ListB AbstractSet繼承自SetC HashSet繼承自AbstractSetD WeakMap繼承自HashMap答案:AC解析:下面是一張下載的Java中的集合類型的繼承關(guān)系圖,一目了然。 11. 存在使i + 1 < i的數(shù)嗎()答案:存在解析:如果i為int型,那么當(dāng)i為int能表示的最大整數(shù)時(shí),i+1就溢出變成負(fù)數(shù)了,此時(shí)不就<i了嗎。擴(kuò)展:存在使i > j | i <= j不成立的數(shù)嗎()答案:存在解析:比如Double.NaN或Float.NaN,感謝BuilderQiu網(wǎng)友指出。 12. 0.63
13、32的數(shù)據(jù)類型是()A float B double C Float D Double答案:B解析:默認(rèn)為double型,如果為float型需要加上f顯示說(shuō)明,即0.6332f 13. 下面哪個(gè)流類屬于面向字符的輸入流( )A BufferedWriter B FileInputStream &
14、#160; C ObjectInputStream D InputStreamReader 答案:D 解析:Java的IO操作中有面向字節(jié)(Byte)和面向字符(Character)兩種方式。面向字節(jié)的操作為以8位為單位對(duì)二進(jìn)制的數(shù)據(jù)進(jìn)行操作,對(duì)數(shù)據(jù)不進(jìn)行轉(zhuǎn)換,這些類都是InputStream和OutputStream的子類。面向字符的操作為以字符為單位對(duì)數(shù)據(jù)進(jìn)行操作,在讀的時(shí)候?qū)⒍?/p>
15、進(jìn)制數(shù)據(jù)轉(zhuǎn)為字符,在寫(xiě)的時(shí)候?qū)⒆址D(zhuǎn)為二進(jìn)制數(shù)據(jù),這些類都是Reader和Writer的子類??偨Y(jié):以InputStream(輸入)/OutputStream(輸出)為后綴的是字節(jié)流; 以Reader(輸入)/Writer(輸出)為后綴的是字符流。擴(kuò)展:Java流類圖結(jié)構(gòu),一目了然,解決大部分選擇題: 14. Java接口的修飾符可以為()A private B protected C final
16、 D abstract答案:CD解析:接口很重要,為了說(shuō)明情況,這里稍微啰嗦點(diǎn):(1)接口用于描述系統(tǒng)對(duì)外提供的所有服務(wù),因此接口中的成員常量和方法都必須是公開(kāi)(public)類型的,確保外部使用者能訪問(wèn)它們;(2)接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所以接口中的方法都是抽象(abstract)方法;(3)接口不涉及和任何具體實(shí)例相關(guān)的細(xì)節(jié),因此接口沒(méi)有構(gòu)造方法,不能被實(shí)例化,沒(méi)有實(shí)例變量,只有靜態(tài)(static)變量;(4)接口的中的變量是所有實(shí)現(xiàn)類共有的,既然共有,肯定是不變的東西,因?yàn)樽兓臇|西也不能夠算共有。所以變量是不可變(final)類型,也就是常
17、量了。(5) 接口中不可以定義變量?如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無(wú)法通過(guò)行為來(lái)修改屬性。有的人會(huì)說(shuō)了,沒(méi)有關(guān)系,可以通過(guò) 實(shí)現(xiàn)接口的對(duì)象的行為來(lái)修改接口中的屬性。這當(dāng)然沒(méi)有問(wèn)題,但是考慮這樣的情況。如果接口 A 中有一個(gè)public 訪問(wèn)權(quán)限的靜態(tài)變量 a。按照 Java 的語(yǔ)義,我們可以不通過(guò)實(shí)現(xiàn)接口的對(duì)象來(lái)訪問(wèn)變量 a,通過(guò) A.a = xxx; 就可以改變接口中的變量 a 的值了。正如抽象類中是可以這樣做的,那么實(shí)現(xiàn)接口 A 的所有對(duì)象也都會(huì)自動(dòng)擁有這一改變后的 a 的值了,也就是說(shuō)一個(gè)地方改變了 a,所有這些對(duì)象中 a 的值也都跟著變了。這和抽
18、象類有什么區(qū)別呢,怎么體現(xiàn)接口更高的抽象級(jí)別呢,怎么體現(xiàn)接口提供的統(tǒng)一的協(xié)議呢,那還要接口這種抽象來(lái)做什么呢?所以接口中 不能出現(xiàn)變量,如果有變量,就和接口提供的統(tǒng)一的抽象這種思想是抵觸的。所以接口中的屬性必然是常量,只能讀不能改,這樣才能為實(shí)現(xiàn)接口的對(duì)象提供一個(gè)統(tǒng) 一的屬性。通俗的講,你認(rèn)為是要變化的東西,就放在你自己的實(shí)現(xiàn)中,不能放在接口中去,接口只是對(duì)一類事物的屬性和行為更高層次的抽象。對(duì)修改關(guān)閉,對(duì)擴(kuò)展(不同的實(shí)現(xiàn) implements)開(kāi)放,接口是對(duì)開(kāi)閉原則的一種體現(xiàn)。所以:接口的方法默認(rèn)是public abstract;接口中不可以定義變量即只能定義常量(加上final修飾就會(huì)變成
19、常量)。所以接口的屬性默認(rèn)是public static final 常量,且必須賦初值。注意:final和abstract不能同時(shí)出現(xiàn)。 15. 不通過(guò)構(gòu)造函數(shù)也能創(chuàng)建對(duì)象嗎()A 是 B 否答案:A解析:Java創(chuàng)建對(duì)象的幾種方式(重要):(1) 用new語(yǔ)句創(chuàng)建對(duì)象,這是最常見(jiàn)的創(chuàng)建對(duì)象的方法。(2) 運(yùn)用反射手段,調(diào)用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實(shí)例方法。(3) 調(diào)用對(duì)象的clone()方法。(4) 運(yùn)用反序列化手段,調(diào)用java.io.ObjectInpu
20、tStream對(duì)象的 readObject()方法。(1)和(2)都會(huì)明確的顯式的調(diào)用構(gòu)造函數(shù) ;(3)是在內(nèi)存上對(duì)已有對(duì)象的影印,所以不會(huì)調(diào)用構(gòu)造函數(shù) ;(4)是從文件中還原類的對(duì)象,也不會(huì)調(diào)用構(gòu)造函數(shù)。 16. ArrayList list = new ArrayList(20);中的list擴(kuò)充幾次()A 0 B 1 C 2 D 3答案:A解析:這里有點(diǎn)迷惑人,大家都知道默認(rèn)ArrayList的長(zhǎng)度是10個(gè),所以如果你要往list里添加20個(gè)元素肯定要擴(kuò)充一次(擴(kuò)充為原來(lái)的1.5倍)
21、,但是這里顯示指明了需要多少空間,所以就一次性為你分配這么多空間,也就是不需要擴(kuò)充了。 17. 下面哪些是對(duì)稱加密算法()A DES B AES C DSA D RSA答案:AB解析:常用的對(duì)稱加密算法有:DES、3DES、RC2、RC4、AES常用的非對(duì)稱加密算法有:RSA、DSA、ECC使用單向散列函數(shù)的加密算法:MD5、SHA 18.新建一個(gè)流對(duì)象,下面哪個(gè)選項(xiàng)的代碼是錯(cuò)誤的?()A)new BufferedWriter(new FileWriter("a.txt");B)new BufferedReade
22、r(new FileInputStream("a.dat");C)new GZIPOutputStream(new FileOutputStream("a.zip");D)new ObjectInputStream(new FileInputStream("a.dat");答案:B解析:請(qǐng)記得13題的那個(gè)圖嗎?Reader只能用FileReader進(jìn)行實(shí)例化。 19. 下面程序能正常運(yùn)行嗎()public class NULL public static void haha() System.out.println(&quo
23、t;haha"); public static void main(String args) (NULL)null).haha(); 答案:能正常運(yùn)行解析:輸出為haha,因?yàn)閚ull值可以強(qiáng)制轉(zhuǎn)換為任何java類類型,(String)null也是合法的。但null強(qiáng)制轉(zhuǎn)換后是無(wú)效對(duì)象,其返回值還是為null,而static方法的調(diào)用是和類名綁定的,不借助對(duì)象進(jìn)行訪問(wèn)所以能正確輸出。反過(guò)來(lái),沒(méi)有static修飾就只能用對(duì)象進(jìn)行訪問(wèn),使用null調(diào)用對(duì)象肯定會(huì)報(bào)空指針錯(cuò)了。這里和C+很類似。這里感謝Florian網(wǎng)友解答。 20. 下面程序的運(yùn)行結(jié)果是什么()class He
24、lloA public HelloA() System.out.println("HelloA"); System.out.println("I'm A class"); static System.out.println("static A"); public class HelloB extends HelloA public HelloB() System.out.println("HelloB"); System.out.println("I'm B class"); s
25、tatic System.out.println("static B"); public static void main(String args) new HelloB(); 答案:static Astatic BI'm A classHelloAI'm B classHelloB解析:說(shuō)實(shí)話我覺(jué)得這題很好,考查靜態(tài)語(yǔ)句塊、構(gòu)造語(yǔ)句塊(就是只有大括號(hào)的那塊)以及構(gòu)造函數(shù)的執(zhí)行順序。對(duì)象的初始化順序:(1)類加載之后,按從上到下(從父類到子類)執(zhí)行被static修飾的語(yǔ)句;(2)當(dāng)static語(yǔ)句執(zhí)行完之后,再執(zhí)行main方法;(3)如果有語(yǔ)句new了自身的
26、對(duì)象,將從上到下執(zhí)行構(gòu)造代碼塊、構(gòu)造器(兩者可以說(shuō)綁定在一起)。下面稍微修改下上面的代碼,以便更清晰的說(shuō)明情況: View Code此時(shí)輸出結(jié)果為:static Astatic B-main start-I'm A classHelloAI'm B classHelloBI'm A classHelloAI'm B classHelloB-main end- 21. getCustomerInfo()方法如下,try中可以捕獲三種類型的異常,如果在該方法運(yùn)行中產(chǎn)生了一個(gè)IOException,將會(huì)輸出什么結(jié)果() public vo
27、id getCustomerInfo() try / do something that may cause an Exception catch (java.io.FileNotFoundException ex) System.out.print("FileNotFoundException!"); catch (java.io.IOException ex) System.out.print("IOException!"); catch (java.lang.Exception ex) System.out.print("Exceptio
28、n!"); A IOException!BIOException!Exception!CFileNotFoundException!IOException!DFileNotFoundException!IOException!Exception!答案:A解析:考察多個(gè)catch語(yǔ)句塊的執(zhí)行順序。當(dāng)用多個(gè)catch語(yǔ)句時(shí),catch語(yǔ)句塊在次序上有先后之分。從最前面的catch語(yǔ)句塊依次先后進(jìn)行異常類型匹配,這樣如果父異常在子異常類之前,那么首先匹配的將是父異常類,子異常類將不會(huì)獲得匹配的機(jī)會(huì),也即子異常類型所在的catch語(yǔ)句塊將是不可到達(dá)的語(yǔ)句。所以,一般將父類異常類即E
29、xception老大放在catch語(yǔ)句塊的最后一個(gè)。 22. 下面代碼的運(yùn)行結(jié)果為:()import java.io.*;import java.util.*;public class foo public static void main (String args) String s; System.out.println("s=" + s); A 代碼得到編譯,并輸出“s=”B 代碼得到編譯,并輸出“s=null”C 由于String s沒(méi)有初始化,代碼不能編譯通過(guò)D 代碼得到編譯,但捕獲到 NullPoint
30、Exception異常答案:C解析:開(kāi)始以為會(huì)輸出null什么的,運(yùn)行后才發(fā)現(xiàn)Java中所有定義的基本類型或?qū)ο蠖急仨毘跏蓟拍茌敵鲋怠?3. System.out.println("5" + 2);的輸出結(jié)果應(yīng)該是()。A 52 B7
31、; C2 D5答案:A解析:沒(méi)啥好說(shuō)的,Java會(huì)自動(dòng)將2轉(zhuǎn)換為字符串。 24. 指出下列程序運(yùn)行的結(jié)果 ()public class Example String str = new String
32、("good"); char ch = 'a', 'b', 'c' ; public static void main(String args) Example ex = new Example(); ex.change(ex.str, ex.ch); System.out.print(ex.str + " and "); System.out.print(ex.ch); public void change(String str, char ch) str = "test ok" ch
33、0 = 'g' A、 good and abcB、 good and gbcC、 test ok and abcD、 test ok and gbc 答案:B解析:大家可能以為Java中String和數(shù)組都是對(duì)象所以肯定是對(duì)象引用,然后就會(huì)選D,其實(shí)這是個(gè)很大的誤區(qū):因?yàn)樵趈ava里沒(méi)有引用傳遞,只有值傳遞這個(gè)值指的是實(shí)參的地址的拷貝,得到這個(gè)拷貝地址后,你可以通過(guò)它修改這個(gè)地址的內(nèi)容(引用不變),因?yàn)榇藭r(shí)這個(gè)內(nèi)容的地址和原地址是同一地址,但是你不能改變這個(gè)地址本身使其重新引用其它的對(duì)象,也就是值傳遞,可能說(shuō)的不是很清楚,下面給
34、出一個(gè)完整的能說(shuō)明情況的例子吧: View Code程序有些啰嗦,但能反映問(wèn)題,該程序運(yùn)行結(jié)果為:對(duì)象交換前:p1 = Alexia female對(duì)象交換前:p2 = Edward male對(duì)象交換后:p1 = Alexia female對(duì)象交換后:p2 = Edward male對(duì)象數(shù)組交換前:arraya0 = Alexia female, arraya1 = Edward male對(duì)象數(shù)組交換前:arrayb0 = jmwang female, arrayb1 = hwu male對(duì)象數(shù)組交換后:arraya0 = Alexia female, arraya1 = Edward
35、 male對(duì)象數(shù)組交換后:arrayb0 = jmwang female, arrayb1 = hwu male基本類型數(shù)組交換前:a0 = 0, a1 = 1基本類型數(shù)組交換前:b0 = 1, b1 = 2基本類型數(shù)組交換后:a0 = 0, a1 = 1基本類型數(shù)組交換后:b0 = 1, b1 = 2對(duì)象數(shù)組內(nèi)容交換并改變后:arraya1 = wjl male對(duì)象數(shù)組內(nèi)容交換并改變后:arrayb1 = Edward male基本類型數(shù)組內(nèi)容交換并改變后:a1 = 5基本類型數(shù)組內(nèi)容交換并改變后:b1 = 1說(shuō)明:不管是對(duì)象、基本類型還是對(duì)象數(shù)組、基本類型數(shù)組,在函數(shù)中都不能改變其實(shí)際地址
36、但能改變其中的內(nèi)容。 25. 要從文件"file.dat"中讀出第10個(gè)字節(jié)到變量c中,下列哪個(gè)方法適合? ()A FileInputStream in=new FileInputStream("file.dat"); in.skip(9); int c=in.read();B FileInputStream in=new FileInputStream("file.dat"); in.skip(10); int c=in.read();C FileInputStream i
37、n=new FileInputStream("file.dat"); int c=in.read();D RandomAccessFile in=new RandomAccessFile("file.dat"); in.skip(9); int c=in.readByte();答案:A?D?解析:long skip(long n)作用是跳過(guò)n個(gè)字節(jié)不讀,主要用在包裝流中的,因?yàn)橐话懔鳎ㄈ鏔ileInputStream)只能順序一個(gè)一個(gè)的讀不能跳躍讀,但是包裝流可以用skip方法跳躍讀取。那么什么是包裝流呢?各種字節(jié)節(jié)點(diǎn)流類,它們都只具有讀寫(xiě)字節(jié)
38、內(nèi)容的方法,以FileInputStream與FileOutputStream為例,它們只能在文件中讀取或者向文件中寫(xiě)入字節(jié),在實(shí)際應(yīng)用中我們往往需要在文件中讀取或者寫(xiě)入各種類型的數(shù)據(jù),就必須先將其他類型的數(shù)據(jù)轉(zhuǎn)換成字節(jié)數(shù)組后寫(xiě)入文件,或者從文件中讀取到的字節(jié)數(shù)組轉(zhuǎn)換成其他數(shù)據(jù)類型,想想都很麻煩!因此想通過(guò)FileOutputStream將一個(gè)浮點(diǎn)小數(shù)寫(xiě)入到文件中或?qū)⒁粋€(gè)整數(shù)寫(xiě)入到文件時(shí)是非常困難的。這時(shí)就需要包裝類DataInputStream/DataOutputStream,它提供了往各種輸入輸出流對(duì)象中讀入或?qū)懭敫鞣N類型的數(shù)據(jù)的方法。DataInputStream/DataOutput
39、Stream并沒(méi)有對(duì)應(yīng)到任何具體的流設(shè)備,一定要給它傳遞一個(gè)對(duì)應(yīng)具體流設(shè)備的輸入或輸出流對(duì)象,完成類似DataInputStream/DataOutputStream功能的類就是一個(gè)包裝類,也叫過(guò)濾流類或處理流類。它對(duì)InputOutStream/OutputStream流類進(jìn)行了包裝,使編程人員使用起來(lái)更方便。其中DataInputStream包裝類的構(gòu)造函數(shù)語(yǔ)法:public DataInputStream(InputStream in)。包裝類也可以包裝另外一個(gè)包裝類。首先BC肯定 是錯(cuò)的,那A正確嗎?按上面的解析應(yīng)該也不對(duì),但我試了下,發(fā)現(xiàn)A也是正確的,與網(wǎng)上解析的資料有些出入,下面是
40、我的code: View Code那么D呢,RandomAccessFile是IO包的類,但是其自成一派,從Object直接繼承而來(lái)??梢詫?duì)文件進(jìn)行讀取和寫(xiě)入。支持文件的隨機(jī)訪問(wèn),即可以隨機(jī)讀取文件中的某個(gè)位置內(nèi)容,這么說(shuō)RandomAccessFile肯定可以達(dá)到題目的要求,但是選項(xiàng)有些錯(cuò)誤,比如RandomAccessFile的初始化是兩個(gè)參數(shù)而非一個(gè)參數(shù),采用的跳躍讀取方法是skipBytes()而非skip(),即正確的寫(xiě)法是:RandomAccessFile in = new RandomAccessFile("file.dat", "r&qu
41、ot;);in.skipBytes(9);int c = in.readByte();這樣也能讀到第十個(gè)字節(jié),也就是A和D都能讀到第十個(gè)字節(jié),那么到底該選哪個(gè)呢?A和D有啥不同嗎?求大神解答 26. 下列哪種異常是檢查型異常,需要在編寫(xiě)程序時(shí)聲明 ()ANullPointerException BClassCastException CFileNotFoundException
42、; D IndexOutOfBoundsException 答案:C解析:看第2題的解析。 27. 下面的方法,當(dāng)輸入為2的時(shí)候返回值是多少?() public static int getValue(int i) int result = 0; switch (i) case 1: result = result + i; case 2: result = result + i * 2; case 3: result = result + i * 3; return result; A0 &
43、#160; B2 C4 &
44、#160; D10答案:D解析:注意這里case后面沒(méi)有加break,所以從case 2開(kāi)始一直往下運(yùn)行。 28. 選項(xiàng)中哪一行代碼可以替換題目中/add code here而不產(chǎn)生編譯錯(cuò)誤?()public abstract class MyClass public int constInt = 5; /add code here public void method() Apublic abstract void method(int a);B constInt = constInt + 5;C public int met
45、hod();D public abstract void anotherMethod() 答案:A解析:考察抽象類的使用。抽象類遵循的原則:(1)abstract關(guān)鍵字只能修飾類和方法,不能修飾字段。(2)抽象類不能被實(shí)例化(無(wú)法使用new關(guān)鍵字創(chuàng)建對(duì)象實(shí)例),只能被繼承。(3)抽象類可以包含屬性,方法,構(gòu)造方法,初始化塊,內(nèi)部類,枚舉類,和普通類一樣,普通方法一定要實(shí)現(xiàn),變量可以初始化或不初始化但不能初始化后在抽象類中重新賦值或操作該變量(只能在子類中改變?cè)撟兞浚?。?)抽象類中的抽象方法(加了abstract關(guān)鍵字的方法)不能實(shí)現(xiàn)。(5)含有抽象方法的類必須定義成抽象類。
46、0;擴(kuò)展:抽象類和接口的區(qū)別,做個(gè)總結(jié)吧:(1)接口是公開(kāi)的,里面不能有私有的方法或變量,是用于讓別人使用的,而抽象類是可以有私有方法或私有變量的。(2)abstract class 在 Java 語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系。但是,一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface,實(shí)現(xiàn)多重繼承。接口還有標(biāo)識(shí)(里面沒(méi)有任何方法,如Remote接口)和數(shù)據(jù)共享(里面的變量全是常量)的作用。(3)在abstract class 中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是 static fi
47、nal的,不過(guò)在 interface中一般不定義數(shù)據(jù)成員),所有的成員方法默認(rèn)都是 public abstract 類型的。(4)abstract class和interface所反映出的設(shè)計(jì)理念不同。其實(shí)abstract class表示的是"is-a"關(guān)系,interface表示的是"has-a"關(guān)系。(5)實(shí)現(xiàn)接口的一定要實(shí)現(xiàn)接口里定義的所有方法,而實(shí)現(xiàn)抽象類可以有選擇地重寫(xiě)需要用到的方法,一般的應(yīng)用里,最頂級(jí)的是接口,然后是抽象類實(shí)現(xiàn)接口,最后才到具體類實(shí)現(xiàn)。抽象類中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。(6)接口中定義的變量默認(rèn)是public
48、 static final 型,且必須給其初值,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值。抽象類中的變量默認(rèn)是 friendly 型,其值可以在子類中重新定義,也可以在子類中重新賦值。 29. 閱讀Shape和Circle兩個(gè)類的定義。在序列化一個(gè)Circle的對(duì)象circle到文件時(shí),下面哪個(gè)字段會(huì)被保存到文件中? ( )class Shape public String name;class Circle extends Shape implements Serializable private float radius; transient int color; public static String type = "Circle"AnameB radiusC colorD type答案:B解析:這里有詳細(xì)的解釋: 30.下面是People和Child類的定義和構(gòu)造方法,每個(gè)構(gòu)造方法都輸出編號(hào)。在執(zhí)行new Child("mike")的時(shí)候都有哪些構(gòu)造方法被順序調(diào)用?請(qǐng)選擇輸出結(jié)果 ( )class People String name; public People() System.out.print(
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蕭山區(qū)高清監(jiān)控管理辦法
- 藏品征集品入庫(kù)管理辦法
- 融媒體辦公用房管理辦法
- 衡水市社區(qū)公章管理辦法
- 醫(yī)療保障政策培訓(xùn)課件
- 裝卸氧氣乙炔瓶管理辦法
- 西安市排污管道管理辦法
- 規(guī)范公積金大廳管理辦法
- 證監(jiān)會(huì)強(qiáng)化監(jiān)事管理辦法
- 調(diào)機(jī)技術(shù)員考核管理辦法
- 《2024運(yùn)動(dòng)鞋市場(chǎng)與消費(fèi)趨勢(shì)洞察》
- 解讀國(guó)有企業(yè)管理人員處分條例(2024)課件(全文)
- 山東省機(jī)場(chǎng)管理集團(tuán)濟(jì)南國(guó)際機(jī)場(chǎng)股份有限公司招聘筆試題庫(kù)2024
- 《計(jì)算工具的認(rèn)識(shí) 》(教學(xué)設(shè)計(jì))-2023-2024學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)人教版
- FZ∕T 54007-2019 錦綸6彈力絲行業(yè)標(biāo)準(zhǔn)
- GB/T 4074.3-2024繞組線試驗(yàn)方法第3部分:機(jī)械性能
- 增匯減排技術(shù)與應(yīng)用智慧樹(shù)知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
- 《火力發(fā)電建設(shè)工程機(jī)組調(diào)試技術(shù)規(guī)范》
- 2014年10月自考00730中外音樂(lè)史試題及答案含解析
- 員工關(guān)系風(fēng)險(xiǎn)防范培訓(xùn)課件
- 設(shè)備維保中的關(guān)鍵設(shè)備與關(guān)鍵件管理
評(píng)論
0/150
提交評(píng)論