Java基礎筆試練習(十八)

Java基礎筆試練習(十八)

Java基礎筆試練習(十八)


1.下面有關重載函數的說法中正確的是

A.重載函數必須具有不同的返回值類型

B.重載函數形參個數必須不同

C.重載函數必須有不同的形參列表

D.重載函數名可以不同

答案:

C

解析:

重載:必須同名函數;必須參數表不同(包含參數個數不同;參數類型不同;或參數個數與類型都不同)

2.對於一個類的構造函數,其函數名與類名( )。

A.完全相同

B.基本相同

C.不相同

D.無關係

答案:

A

解析:

對於一個類的構造函數,函數名和類名必須完全相同

3.以下關於Object類的說法正確的是()

A.Java中所有的類都直接或間接繼承自Object,無論是否明確的指明,無論其是否是抽象類。

B.Java中的接口(interface)也繼承了Object類

C.利用“==”比較兩個對象時,Java調用繼承自Object的equals方法,判斷是否相等。

D.如果類的定義中沒有重新定義toString()方法,則該類創建的對象無法使用toStrig()方法。

答案:

A

解析:

Object 是基類 Java中的所有的類都直接或間接的繼承;所以A對

從一個class派生的必然是另一個class。Object是一個class,如果interface繼承自Object,那麼interface必然是一個class,所以B錯

利用equals()方法進行比較時 會調用== 可以看equals()方法的源碼,可以這樣說, == 比equal更加強大,所以C錯

toString()方法是Object類中 即使不重寫也能使用 所以D錯

4.有這樣一段程序:

public class Test{
public static void main(String [] args){
List list=new ArrayList();
list.add("a");
list.add("b");
list.add("a");
Set set=new HashSet();
set.add("a");
set.add("b");
set.add("a");
System.out.println(list.size()+","+set.size());
}
}

請問運行主要的程序會打印出的是什麼()

A.2,2

B.2,3

C.3,2

D.3,3

答案:

C

解析:

list有序可重複,set無序不可重複

5.Web程序中,當前用戶上下文信息應該保存在下面哪個對象中()

A.page

B.request

C.session

D.Application

答案:

C

解析:

重點在 當前用戶 , application能被同一個應用程序的所有用戶訪問,所以當前用戶的信息就不宜保存在application中

session會話對象,一個會話只可能是一個用戶的,生命週期默認30分鐘,也可以自行定義,當前會話結束(如關閉瀏覽器),當前session被銷燬。所以當前用戶的信息應該保存在session中

6.抽象類和接口的區別,一下說法錯誤的是

A.接口是公開的,裡面不能有私有的方法或變量,是用於讓別人使用的,而抽象類是可以有私有方法或私有變量的。

B.abstract class 在 Java 語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。但是,一個類卻可以實現多個interface,實現多重繼承。接口還有標識(裡面沒有任何方法,如Remote接口)和數據共享(裡面的變量全是常量)的作用。

C.在abstract class 中可以有自己的數據成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的數據成員(也就是必須是 static final的,不過在 interface中一般不定義數據成員),所有的成員方法默認都是 public abstract 類型的。

D.abstract class和interface所反映出的設計理念不同。其實abstract class表示的是has-a關係,interface表示的是is-a關係。

答案:

D

解析:

jdk1.9以後,接口是可以有私有屬性的

is a是繼承(抽象類),has a是組合(接口)

7.Java的跨平臺特性是指它的源代碼可以在多個平臺運行。

A.對

B.錯

答案:

B

解析:

語言跨平臺是編譯後的文件跨平臺,而不是源程序跨平臺。Java源代碼首先經過編譯器生成字節碼,即class文件,該class文件與平臺無關,而class文件經過解釋執行之後翻譯成最終的機器碼,這是平臺相關的。

8. 如果一個接口Cup有個方法use(),有個類SmallCup實現接口Cup,則在類SmallCup中正確的是? ( )

A.void use() { …}

B.protected void use() { …}

C.public void use() { …}

D.以上語句都可以用在類SmallCup中

答案:

C

解析:

既然是實現接口,就要實現接口的所以方法,相當於重寫方法,方法的重寫需要滿足:三同一大一小(方法名、返回值類型、形參相同;訪問權限>=重寫前;拋出異常<=重寫前)

9.已知如下類說明:

public class Test{
private float f=1.0f;
int m=12;
static int n=1;
public static void main(String args[]){
Test t=new Test();
}
}

如下哪些使用是正確的()

A.t.f = 1.0

B.this.n

C.Test.m

D.Test.n

答案:

D

解析:

答案:D

A:編譯不成功,因為float浮點類型默認是double類型 所以float f=1.0f;(必須加上f 強調定義的是float)此處是精度由高(double)向低(float)轉型所以會報錯 但是若是float f=1;這裡是默認類型是Int 類型 精度由低(int)向高轉型(float)不丟失精度不會報錯。

B:this的使用時針對在方法內部使局部變量等值於實例變量而使用的一個關鍵字,此處的n是靜態變量而非實例變量 所以this的調用會出錯(試想一下,static本來是全類中可以使用的,是全局的,你非得this去調用,這不是區分局部變量和實例變量的分水線嗎?但是此處是全局的,不需要區分)

C:m是實例變量,什麼是實例變量:就是需要new 一個對象出來才能使用的,這裡直接用類名就調用了,jvm怎麼知道m是誰?

D:類變量可以通過類直接調用

10.在try的括號裡面有return一個值,那在哪裡執行finally裡的代碼?

A.不執行finally代碼

B.return前執行

C.return後執行

答案:

B

解析:

1、不管有木有出現異常,finally塊中代碼都會執行;

2、當try和catch中有return時,finally仍然會執行;

3、finally是在return後面的表達式運算後執行的(此時並沒有返回運算後的值,而是先把要返回的值保存起來,不管finally中的代碼怎麼樣,返回的值都不會改變,仍然是之前保存的值),所以函數返回值是在finally執行前確定的;

4、finally中最好不要包含return,否則程序會提前退出,返回值不是try或catch中保存的返回值。

11.多個線程可同時操作一個數據,為了保證該數據的準確性,可將操作該數據的部分改為 ()?

A.同步

B.異步

C.只讀

D.只寫

答案:

A

解析:

答案:A

對該數據加鎖,放在同步代碼塊中

synchronize(){

}

12.下列關於計算機系統和Java編程語言的說法,正確的是()

A.計算機是由硬件、操作系統和軟件組成,操作系統是缺一不可的組成部分。

B.Java語言編寫的程序源代碼可以不需要編譯直接在硬件上運行。

C.在程序中書寫註釋不會影響程序的執行,可以在必要的地方多寫一些註釋。

D.Java的集成開發環境(IDE),如Eclipse,是開發Java語言必需的軟件工具。

答案:

C

解析:

軟件分為系統軟件和應用軟件

13.java用()機制實現了進程之間的同步執行

A.監視器

B.虛擬機

C.多個CPU

D.異步調用

答案:

A

解析:

同步的兩種方式:同步塊和同步方法

對於同步來說都是使用synchronized方法

每一個對象都有一個監視器,或者叫做鎖。

14.變量a是一個64位有符號的整數,初始值用16進製表示為:0x7FFFFFFFFFFFFFFF;變量b是一個64位有符號的整數,初始值用16進製表示為:0x8000000000000000。則a+b的結果用10進製表示為多少?

A.1

B.-1

C.2^63+2^62+…+2^2+2^1+2^0

D.–(2^63+2^62+…+2^2+2^1+2^0)

答案:

B

解析:

0x7FFFFFFFFFFFFFFF + 0x8000000000000000 = 0xFFFFFFFFFFFFFFFF 轉為源碼 = -1

15.下列說法正確的是( )

A.volatile,synchronized

都可以修改變量,方法以及代碼塊

B.volatile,synchronized 在多線程中都會存在阻塞問題

C.volatile能保證數據的可見性,但不能完全保證數據的原子性,synchronized即保證了數據的可見性也保證了原子性

D.volatile解決的是變量在多個線程之間的可見性、原子性,而sychroized解決的是多個線程之間訪問資源的同步性

答案:

C

解析:

關鍵字volatile是線程同步的輕量級實現,所以volatile性能肯定比synchronized要好,並且只能修改變量,而synchronized可以修飾方法,以及代碼塊。

多線程訪問volatile不會發生阻塞,而synchronized會出現阻塞

volatile能保證數據的可見性,但不能保證原子性;而synchronized可以保證原子性,也可以間接保證可見性,因為它會將私有內存和公共內存中的數據做同步

關鍵字volatile解決的下變量在多線程之間的可見性;而synchronized解決的是多線程之間資源同步問題

16.Which keyword can protect a class in a package from accessibility by the classes outside the package but not package inside ?

A.private

B.protected

C.final

D.don't use any keyword at all (make it default) ?

答案:

D

解析:

17.下面有關servlet service描述錯誤的是?

A.不管是post還是get方法提交過來的連接,都會在service中處理

B.doGet/doPost 則是在 javax.servlet.GenericServlet 中實現的

C.service()是在javax.servlet.Servlet接口中定義的

D.service判斷請求類型,決定是調用doGet還是doPost方法

答案:

B

解析:

doGet/doPost 則是在 javax.servlet.http.HttpServlet 中實現的

18.如果希望監聽TCP端口9000,服務器端應該怎樣創建socket?

A.new Socket("localhost",9000);

B.new ServerSocket(9000);

C.new Socket(9000);

D.new ServerSocket("localhost",9000);

答案:

B

解析:

ServerSocket (int port)

Creates a server socket, bound to the specified port.

Socket(InetAddress address, int port)

Creates a stream socket and connects it to the specified port number at the specified IP address.

19.關於身份證號,以下正確的正則表達式為( )

A.isIDCard=/^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$/;

B.isIDCard=/^[1-9]\\d{7}((9\\d)|(1[0-2]))(([0|1|2]\\d)|3[9-1])\\d{3}$/;

C.isIDCard=/^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{4}$/;

D.isIDCard=/^[1-9]\\d{5}[1-9]\\d{3}((9\\d)|(1[9-2]))(([0|1|2]\\d)|3[9-1])\\d{4}$/;

答案:

AC

解析:

略,關於正則表達式的內容,可關注我個人微信公眾號查看相關文章

20.下列哪些操作會使線程釋放鎖資源?

A.sleep()

B.wait()

C.join()

D.yield()

答案:

BC

解析:

1.sleep()方法

在指定時間內讓當前正在執行的線程暫停執行,但不會釋放“鎖標誌”。不推薦使用。

sleep()使當前線程進入阻塞狀態,在指定時間內不會執行。

2.wait()方法

在其他線程調用對象的notify或notifyAll方法前,導致當前線程等待。線程會釋放掉它所佔有的“鎖標誌”,從而使別的線程有機會搶佔該鎖。

當前線程必須擁有當前對象鎖。如果當前線程不是此鎖的擁有者,會拋出IllegalMonitorStateException異常。

喚醒當前對象鎖的等待線程使用notify或notifyAll方法,也必須擁有相同的對象鎖,否則也會拋出IllegalMonitorStateException異常。

waite()和notify()必須在synchronized函數或synchronized block中進行調用。如果在non-synchronized函數或non-synchronized block中進行調用,雖然能編譯通過,但在運行時會發生IllegalMonitorStateException的異常。

3.yield方法

暫停當前正在執行的線程對象。

yield()只是使當前線程重新回到可執行狀態,所以執行yield()的線程有可能在進入到可執行狀態後馬上又被執行。

yield()只能使同優先級或更高優先級的線程有執行的機會。

4.join方法

join()等待該線程終止。

等待調用join方法的線程結束,再繼續執行。如:t.join();//主要用於等待t線程運行結束,若無此句,main則會執行完畢,導致結果不可預測

文末

歡迎關注Coder編程公眾號,主要分享數據結構與算法、Java相關知識體系、框架知識及原理、Spring全家桶、微服務項目實戰、DevOps實踐之路、每日一篇互聯網大廠面試或筆試題以及PMP項目管理知識等。更多精彩內容正在路上~

Java基礎筆試練習(十八)



分享到:


相關文章: