免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
精選30道Java筆試題解答
      都是一些非常非常基礎(chǔ)的題,是我最近參加各大IT公司筆試后靠記憶記下來(lái)的,經(jīng)過(guò)整理獻(xiàn)給與我一樣參加各大IT校園招聘的同學(xué)們,純考Java基礎(chǔ)功底,老手們就不用進(jìn)來(lái)了,免得笑話我們這些未出校門的孩紙們,但是IT公司就喜歡考這些基礎(chǔ)的東西,所以為了能進(jìn)大公司就~~~當(dāng)復(fù)習(xí)期末考吧。花了不少時(shí)間整理,在整理過(guò)程中也學(xué)到了很多東西,請(qǐng)大家認(rèn)真對(duì)待每一題~~~


下面都是我自己的答案非官方,僅供參考,如果有疑問(wèn)或錯(cuò)誤請(qǐng)一定要提出來(lái),大家一起進(jìn)步啦~~~


1. 下面哪些是Thread類的方法()

A start()       B run()       C exit()       D getPriority()


答案:ABD


解析:看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System類的方法,如System.exit(0)。

 

2. 下面關(guān)于java.lang.Exception類的說(shuō)法正確的是()


A 繼承自Throwable      B Serialable      CD 不記得,反正不正確


答案:A


解析:Java異常的基類為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.Exception: 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ā)生在編譯階段,必須要使用try…catch(或者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í)行。 因此,面對(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)用環(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. constructor必須與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 String[10];


則:a[0]~a[9] = null


a.length = 10


如果是int []a = new int[10];


則:a[0]~a[9] = 0


a.length = 10


 


6. 下面程序的運(yùn)行結(jié)果:()



    public static void 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


解析:去了static用類對(duì)象引用仍為B,對(duì)Thread的運(yùn)行機(jī)制不是很了解,不知道為啥,歡迎大家補(bǔ)充。


 


7. 下列屬于關(guān)系型數(shù)據(jù)庫(kù)的是()


A. Oracle    B MySql    C IMS     D MongoDB


答案:AB


解答:IMS(Information Management System )數(shù)據(jù)庫(kù)是IBM公司開發(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)鍵字是否能保證線程安全?()


答案:不能


解析:volatile關(guān)鍵字用在多線程同步中,可保證讀取的可見(jiàn)性,JVM只是保證從主內(nèi)存加載到線程工作內(nèi)存的值是最新的讀取值,而非cache中。但多個(gè)線程對(duì)


volatile的寫操作,無(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 LinkedList繼承自List


B AbstractSet繼承自Set


C HashSet繼承自AbstractSet


D 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.6332的數(shù)據(jù)類型是()


A float     B double     C Float      D Double


答案:B


解析:默認(rèn)為double型,如果為float型需要加上f顯示說(shuō)明,即0.6332f


 


13. 下面哪個(gè)流類屬于面向字符的輸入流(  )


BufferedWriter           B  FileInputStream          ObjectInputStream          D  InputStreamReader


 答案:A


 解析: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ū)⒍M(jìn)制數(shù)據(jù)轉(zhuǎn)為字符,在寫的時(shí)候?qū)⒆址D(zhuǎn)為二進(jìn)制數(shù)據(jù),這些類都是Reader和Writer的子類。


總結(jié):以InputStream(輸入)/OutputStream(輸出)為后綴的是字節(jié)流;


          以Reader(輸入)/Writer(輸出)為后綴的是字符流。


擴(kuò)展:Java流類圖結(jié)構(gòu),一目了然,解決大部分選擇題:


 



14. Java接口的修飾符可以為()


A private     B protected     C final       D abstract


答案:CD


解析:接口很重要,為了說(shuō)明情況,這里稍微啰嗦點(diǎn):


(1)接口用于描述系統(tǒng)對(duì)外提供的所有服務(wù),因此接口中的成員常量和方法都必須是公開(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)類型,也就是常量了。


(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 的值也都跟著變了。這和抽象類有什么區(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)開放,接口是對(duì)開閉原則的一種體現(xiàn)。


所以:


接口的方法默認(rèn)是public abstract;


接口中不可以定義變量即只能定義常量(加上final修飾就會(huì)變成常量)。所以接口的屬性默認(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.ObjectInputStream對(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倍),但是這里顯示指明了需要多少空間,所以就一次性為你分配這么多空間,也就是不需要擴(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ò)誤的?(


Anew BufferedWriter(new FileWriter("a.txt"));


Bnew BufferedReader(new FileInputStream("a.dat"));


Cnew GZIPOutputStream(new FileOutputStream("a.zip"));


Dnew 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("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 HelloA {    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"); }        static { 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了自身的對(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 void 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("Exception!");        }    }


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ǔ)句。所以,一般將父類異常類即Exception老大放在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 代碼得到編譯,但捕獲到 NullPointException異常


答案:C


解析:開始以為會(huì)輸出null什么的,運(yùn)行后才發(fā)現(xiàn)Java中所有定義的基本類型或?qū)ο蠖急仨毘跏蓟拍茌敵鲋怠?/span>




23.  System.out.println("5" + 2);的輸出結(jié)果應(yīng)該是()。


A 52                   B7                     C2                     D5


答案:A


解析:沒(méi)啥好說(shuō)的,Java會(huì)自動(dòng)將2轉(zhuǎn)換為字符串。


 


24. 指出下列程序運(yùn)行的結(jié)果 



public class Example {    String str = new String("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[0] = 'g';    }}


A、 good and abc


B good and gbc


C、 test ok and abc


D、 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ō)的不是很清楚,下面給出一個(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ù)組交換前:arraya[0] = Alexia female, arraya[1] = Edward male對(duì)象數(shù)組交換前:arrayb[0] = jmwang female, arrayb[1] = hwu male對(duì)象數(shù)組交換后:arraya[0] = Alexia female, arraya[1] = Edward male對(duì)象數(shù)組交換后:arrayb[0] = jmwang female, arrayb[1] = hwu male基本類型數(shù)組交換前:a[0] = 0, a[1] = 1基本類型數(shù)組交換前:b[0] = 1, b[1] = 2基本類型數(shù)組交換后:a[0] = 0, a[1] = 1基本類型數(shù)組交換后:b[0] = 1, b[1] = 2對(duì)象數(shù)組內(nèi)容交換并改變后:arraya[1] = wjl male對(duì)象數(shù)組內(nèi)容交換并改變后:arrayb[1] = Edward male基本類型數(shù)組內(nèi)容交換并改變后:a[1] = 5基本類型數(shù)組內(nèi)容交換并改變后:b[1] = 1


說(shuō)明:不管是對(duì)象、基本類型還是對(duì)象數(shù)組、基本類型數(shù)組,在函數(shù)中都不能改變其實(shí)際地址但能改變其中的內(nèi)容。


 

25. 要從文件"file.dat"中讀出第10個(gè)字節(jié)到變量c,下列哪個(gè)方法適合? 

A FileInputStream in=new FileInputStream("file.dat"); in.skip(9); int c=in.read();


FileInputStream in=new FileInputStream("file.dat"); in.skip(10); int c=in.read();


C FileInputStream in=new FileInputStream("file.dat"); int c=in.read();


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)橐话懔鳎ㄈ?span>FileInputStream)只能順序一個(gè)一個(gè)的讀不能跳躍讀,但是包裝流可以用skip方法跳躍讀取。那么什么是包裝流呢?各種字節(jié)節(jié)點(diǎn)流類,它們都只具有讀寫字節(jié)內(nèi)容的方法,以FileInputStream與FileOutputStream為例,它們只能在文件中讀取或者向文件中寫入字節(jié),在實(shí)際應(yīng)用中我們往往需要在文件中讀取或者寫入各種類型的數(shù)據(jù),就必須先將其他類型的數(shù)據(jù)轉(zhuǎn)換成字節(jié)數(shù)組后寫入文件,或者從文件中讀取到的字節(jié)數(shù)組轉(zhuǎn)換成其他數(shù)據(jù)類型,想想都很麻煩?。∫虼讼胪ㄟ^(guò)FileOutputStream將一個(gè)浮點(diǎn)小數(shù)寫入到文件中或?qū)⒁粋€(gè)整數(shù)寫入到文件時(shí)是非常困難的。這時(shí)就需要包裝類DataInputStream/DataOutputStream,它提供了往各種輸入輸出流對(duì)象中讀入或?qū)懭敫鞣N類型的數(shù)據(jù)的方法。


DataInputStream/DataOutputStream并沒(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)上解析的資料有些出入,下面是我的code:




View Code

那么D呢,RandomAccessFile是IO包的類,但是其自成一派,從Object直接繼承而來(lái)??梢詫?duì)文件進(jìn)行讀取和寫入。支持文件的隨機(jī)訪問(wèn),即可以隨機(jī)讀取文件中的某個(gè)位置內(nèi)容,這么說(shuō)RandomAccessFile肯定可以達(dá)到題目的要求,但是選項(xiàng)有些錯(cuò)誤,比如RandomAccessFile的初始化是兩個(gè)參數(shù)而非一個(gè)參數(shù),采用的跳躍讀取方法是skipBytes()而非skip(),即正確的寫法是:



RandomAccessFile in = new RandomAccessFile("file.dat", "r");in.skipBytes(9);int c = in.readByte();


這樣也能讀到第十個(gè)字節(jié),也就是A和D都能讀到第十個(gè)字節(jié),那么到底該選哪個(gè)呢?A和D有啥不同嗎?求大神解答~~~


 


26. 下列哪種異常是檢查型異常,需要在編寫程序時(shí)聲明 


ANullPointerException        BClassCastException      CFileNotFoundException       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                    B2                    C4                     D10


答案:D


解析:注意這里case后面沒(méi)有加break,所以從case 2開始一直往下運(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 method();


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è)撟兞浚?/span>

(4)抽象類中的抽象方法(加了abstract關(guān)鍵字的方法)不能實(shí)現(xiàn)。

(5)含有抽象方法的類必須定義成抽象類。


擴(kuò)展:抽象類和接口的區(qū)別,做個(gè)總結(jié)吧:


(1)接口是公開的,里面不能有私有的方法或變量,是用于讓別人使用的,而抽象類是可以有私有方法或私有變量的。


(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 final的,不過(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)抽象類可以有選擇地重寫需要用到的方法,一般的應(yīng)用里,最頂級(jí)的是接口,然后是抽象類實(shí)現(xiàn)接口,最后才到具體類實(shí)現(xiàn)。抽象類中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。


(6)接口中定義的變量默認(rèn)是public static final 型,且必須給其初值,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值。抽象類中的變量默認(rèn)是 friendly 型,其值可以在子類中重新定義,也可以在子類中重新賦值。









 


29. 閱讀ShapeCircle兩個(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";}


Aname


B radius


C color


D type


答案:B


解析:這里有詳細(xì)的解釋:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html


 


30.下面是PeopleChild類的定義和構(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);    }    public People(String name) {        System.out.print(2);        this.name = name;    }}class Child extends People {    People father;    public Child(String name) {        System.out.print(3);        this.name = name;        father = new People(name + ":F");    }    public Child() {        System.out.print(4);    }    }


A312              B 32               C 432              D 132


答案:D


解析:考察的又是父類與子類的構(gòu)造函數(shù)調(diào)用次序。在Java中,子類的構(gòu)造過(guò)程中必須調(diào)用其父類的構(gòu)造函數(shù),是因?yàn)橛欣^承關(guān)系存在時(shí),子類要把父類的內(nèi)容繼承下來(lái)。但如果父類有多個(gè)構(gòu)造函數(shù)時(shí),該如何選擇調(diào)用呢?


第一個(gè)規(guī)則:子類的構(gòu)造過(guò)程中,必須調(diào)用其父類的構(gòu)造方法。一個(gè)類,如果我們不寫構(gòu)造方法,那么編譯器會(huì)幫我們加上一個(gè)默認(rèn)的構(gòu)造方法(就是沒(méi)有參數(shù)的構(gòu)造方法),但是如果你自己寫了構(gòu)造方法,那么編譯器就不會(huì)給你添加了,所以有時(shí)候當(dāng)你new一個(gè)子類對(duì)象的時(shí)候,肯定調(diào)用了子類的構(gòu)造方法,但是如果在子類構(gòu)造方法中我們并沒(méi)有顯示的調(diào)用基類的構(gòu)造方法,如:super();  這樣就會(huì)調(diào)用父類沒(méi)有參數(shù)的構(gòu)造方法。    


第二個(gè)規(guī)則:如果子類的構(gòu)造方法中既沒(méi)有顯示的調(diào)用基類構(gòu)造方法,而基類中又沒(méi)有無(wú)參的構(gòu)造方法,則編譯出錯(cuò),所以,通常我們需要顯示的:super(參數(shù)列表),來(lái)調(diào)用父類有參數(shù)的構(gòu)造函數(shù),此時(shí)無(wú)參的構(gòu)造函數(shù)就不會(huì)被調(diào)用。


總之,一句話:子類沒(méi)有顯示調(diào)用父類構(gòu)造函數(shù),不管子類構(gòu)造函數(shù)是否帶參數(shù)都默認(rèn)調(diào)用父類無(wú)參的構(gòu)造函數(shù),若父類沒(méi)有則編譯出錯(cuò)。


 


最后,給大家出個(gè)思考題:下面程序的運(yùn)行結(jié)果是什么?



public class Dervied extends Base {    private String name = "dervied";    public Dervied() {        tellName();        printName();    }        public void tellName() {        System.out.println("Dervied tell name: " + name);    }        public void printName() {        System.out.println("Dervied print name: " + name);    }    public static void main(String[] args){                new Dervied();        }}class Base {        private String name = "base";    public Base() {        tellName();        printName();    }        public void tellName() {        System.out.println("Base tell name: " + name);    }        public void printName() {        System.out.println("Base print name: " + name);    }}

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
我肝了一個(gè)月,給你寫出了這本Java開發(fā)手冊(cè)。
Java FAQ(新手必看)
Java基礎(chǔ)總結(jié)篇
Java必備基礎(chǔ)知識(shí)點(diǎn)(超全)
java基礎(chǔ)
java基礎(chǔ)知識(shí)小小結(jié)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服