天天看點

java面試題—精選30道Java筆試題解答(二)

19. 下面程式能正常運作嗎()

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

答案:能正常運作

20. 下面程式的運作結果是什麼()

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

答案:

解析:說實話我覺得這題很好,考查靜态語句塊、構造語句塊(就是隻有大括号的那塊)以及構造函數的執行順序。

對象的初始化順序:(1)類加載之後,按從上到下(從父類到子類)執行被static修飾的語句;(2)當static語句執行完之後,再執行main方法;(3)如果有語句new了自身的對象,将從上到下執行構造代碼塊、構造器(兩者可以說綁定在一起)。

下面稍微修改下上面的代碼,以便更清晰的說明情況:

java面試題—精選30道Java筆試題解答(二)

 view code

此時輸出結果為:

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

  如果你想學習java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裡面有大量的學習資料可以下載下傳。

21. getcustomerinfo()方法如下,try中可以捕獲三種類型的異常,如果在該方法運作中産生了一個ioexception,将會輸出什麼結果()

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

a ioexception!

bioexception!exception!

cfilenotfoundexception!ioexception!

dfilenotfoundexception!ioexception!exception!

答案:a

解析:考察多個catch語句塊的執行順序。當用多個catch語句時,catch語句塊在次序上有先後之分。從最前面的catch語句塊依次先後進行異常類型比對,這樣如果父異常在子異常類之前,那麼首先比對的将是父異常類,子異常類将不會獲得比對的機會,也即子異常類型所在的catch語句塊将是不可到達的語句。是以,一般将父類異常類即exception老大放在catch語句塊的最後一個。

22. 下面代碼的運作結果為:()

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

a 代碼得到編譯,并輸出“s=”

b 代碼得到編譯,并輸出“s=null”

c 由于string s沒有初始化,代碼不能編譯通過

d 代碼得到編譯,但捕獲到 nullpointexception異常

答案:c

解析:開始以為會輸出null什麼的,運作後才發現java中所有定義的基本類型或對象都必須初始化才能輸出值。

23.  system.out.println("5" + 2);的輸出結果應該是()。

a 52                   b7                     c2                     d5

解析:沒啥好說的,java會自動将2轉換為字元串。

24. 指出下列程式運作的結果 ()

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

a、 good and abc

b、 good and gbc

c、 test ok and abc

d、 test ok and gbc 

答案:b

解析:大家可能以為java中string和數組都是對象是以肯定是對象引用,然後就會選d,其實這是個很大的誤區:因為在java裡沒有引用傳遞,隻有值傳遞

這個值指的是實參的位址的拷貝,得到這個拷貝位址後,你可以通過它修改這個位址的内容(引用不變),因為此時這個内容的位址和原位址是同一位址,

但是你不能改變這個位址本身使其重新引用其它的對象,也就是值傳遞,可能說的不是很清楚,下面給出一個完整的能說明情況的例子吧:

java面試題—精選30道Java筆試題解答(二)

程式有些啰嗦,但能反映問題,該程式運作結果為:

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

說明:不管是對象、基本類型還是對象數組、基本類型數組,在函數中都不能改變其實際位址但能改變其中的内容。

25. 要從檔案"file.dat"中讀出第10個位元組到變量c中,下列哪個方法适合? ()

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 in=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)作用是跳過n個位元組不讀,主要用在包裝流中的,因為一般流(如fileinputstream)隻能順序一個一個的讀不能跳躍讀,但是包裝流可以用skip方法跳躍讀取。那麼什麼是包裝流呢?各種位元組節點流類,它們都隻具有讀寫位元組内容的方法,以fileinputstream與fileoutputstream為例,它們隻能在檔案中讀取或者向檔案中寫入位元組,在實際應用中我們往往需要在檔案中讀取或者寫入各種類型的資料,就必須先将其他類型的資料轉換成位元組數組後寫入檔案,或者從檔案中讀取到的位元組數組轉換成其他資料類型,想想都很麻煩!!是以想通過fileoutputstream将一個浮點小數寫入到檔案中或将一個整數寫入到檔案時是非常困難的。這時就需要包裝類datainputstream/dataoutputstream,它提供了往各種輸入輸出流對象中讀入或寫入各種類型的資料的方法。

datainputstream/dataoutputstream并沒有對應到任何具體的流裝置,一定要給它傳遞一個對應具體流裝置的輸入或輸出流對象,完成類似 datainputstream/dataoutputstream功能的類就是一個包裝類,也叫過濾流類或處理流類。它對inputoutstream/outputstream流類進行了包裝,使程式設計人員使用起來更友善。其中datainputstream包裝類的構造函數文法:public datainputstream(inputstream in)。包裝類也可以包裝另外一個包裝類。

 如果你想學習java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裡面有大量的學習資料可以下載下傳。

首先bc肯定 是錯的,那a正确嗎?按上面的解析應該也不對,但我試了下,發現a也是正确的,與網上解析的資料有些出入,下面是我的code:

java面試題—精選30道Java筆試題解答(二)

那麼d呢,randomaccessfile是io包的類,但是其自成一派,從object直接繼承而來。可以對檔案進行讀取和寫入。支援檔案的随機通路,即可以随機讀取檔案中的某個位置内容,這麼說randomaccessfile肯定可以達到題目的要求,但是選項有些錯誤,比如randomaccessfile的初始化是兩個參數而非一個參數,采用的跳躍讀取方法是skipbytes()而非skip(),即正确的寫法是:

這樣也能讀到第十個位元組,也就是a和d都能讀到第十個位元組,那麼到底該選哪個呢?a和d有啥不同嗎?求大神解答~~~

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

anullpointerexception        bclasscastexception      cfilenotfoundexception       d indexoutofboundsexception 

解析:看第2題的解析。

27. 下面的方法,當輸入為2的時候傳回值是多少?()

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

a0                    b2                    c4                     d10

答案:d

解析:注意這裡case後面沒有加break,是以從case 2開始一直往下運作。

28. 選項中哪一行代碼可以替換題目中//add code here而不産生編譯錯誤?()

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

apublic abstract void method(int a);

b constint = constint + 5;

c public int method();

d public abstract void anothermethod() {}

解析:考察抽象類的使用。

抽象類遵循的原則:

(1)abstract關鍵字隻能修飾類和方法,不能修飾字段。

(2)抽象類不能被執行個體化(無法使用new關鍵字建立對象執行個體),隻能被繼承。

(3)抽象類可以包含屬性,方法,構造方法,初始化塊,内部類,枚舉類,和普通類一樣,普通方法一定要實作,變量可以初始化或不初始化但不能初始化後在抽象類中重新指派或操作該變量(隻能在子類中改變該變量)。

(4)抽象類中的抽象方法(加了abstract關鍵字的方法)不能實作。

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

擴充:抽象類和接口的差別,做個總結吧:

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

(2)abstract class 在 java 語言中表示的是一種繼承關系,一個類隻能使用一次繼承關系。但是,一個類卻可以實作多個interface,實作多重繼承。接口還有辨別(裡面沒有任何方法,如remote接口)和資料共享(裡面的變量全是常量)的作用。

(3)在abstract class 中可以有自己的資料成員,也可以有非abstarct的成員方法,而在interface中,隻能夠有靜态的不能被修改的資料成員(也就是必須是 static final的,不過在 interface中一般不定義資料成員),所有的成員方法預設都是 public abstract 類型的。

(4)abstract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關系,interface表示的是"has-a"關系。

(5)實作接口的一定要實作接口裡定義的所有方法,而實作抽象類可以有選擇地重寫需要用到的方法,一般的應用裡,最頂級的是接口,然後是抽象類實作接口,最後才到具體類實作。抽象類中可以有非抽象方法。接口中則不能有實作方法。

(6)接口中定義的變量預設是public static final 型,且必須給其初值,是以實作類中不能重新定義,也不能改變其值。抽象類中的變量預設是 friendly 型,其值可以在子類中重新定義,也可以在子類中重新指派。

29. 閱讀shape和circle兩個類的定義。在序列化一個circle的對象circle到檔案時,下面哪個字段會被儲存到檔案中? (  )

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

aname

b radius

c color

d type

30.下面是people和child類的定義和構造方法,每個構造方法都輸出編号。在執行new child("mike")的時候都有哪些構造方法被順序調用?請選擇輸出結果 ( )

java面試題—精選30道Java筆試題解答(二)
java面試題—精選30道Java筆試題解答(二)

a312              b 32               c 432              d 132

解析:考察的又是父類與子類的構造函數調用次序。在java中,子類的構造過程中必須調用其父類的構造函數,是因為有繼承關系存在時,子類要把父類的内容繼承下來。但如果父類有多個構造函數時,該如何選擇調用呢?

第一個規則:子類的構造過程中,必須調用其父類的構造方法。一個類,如果我們不寫構造方法,那麼編譯器會幫我們加上一個預設的構造方法(就是沒有參數的構造方法),但是如果你自己寫了構造方法,那麼編譯器就不會給你添加了,是以有時候當你new一個子類對象的時候,肯定調用了子類的構造方法,但是如果在子類構造方法中我們并沒有顯示的調用基類的構造方法,如:super();  這樣就會調用父類沒有參數的構造方法。    

第二個規則:如果子類的構造方法中既沒有顯示的調用基類構造方法,而基類中又沒有無參的構造方法,則編譯出錯,是以,通常我們需要顯示的:super(參數清單),來調用父類有參數的構造函數,此時無參的構造函數就不會被調用。

總之,一句話:子類沒有顯示調用父類構造函數,不管子類構造函數是否帶參數都預設調用父類無參的構造函數,若父類沒有則編譯出錯。

最後,給大家出個思考題:下面程式的運作結果是什麼?

java面試題—精選30道Java筆試題解答(二)