Java基礎筆試練習(十九)

Java基礎筆試練習(十九)

Java基礎筆試練習(十九)

1.this代表了()的對象引用,super表示的是當前對象的()對象?

A.當前類 當前類

B.當前類的父類 當前類

C.當前類 當前類的父類

D.以上都不正確

答案:

C

解析:

this代表當前對象,也就是當前類的對象的引用

super代表其父類對象

2.假設一個 list初始化為{2,9,5,4,8,1}。 在第一次冒泡排序後,list變成了()?

A.2, 9, 5, 4, 8, 1

B.2, 9, 5, 4, 1, 8

C.2, 5, 9, 4, 8, 1

D.2, 5, 4, 8, 1, 9

答案:

D

解析:

3.Java的Daemon線程,setDaemon( )設置必須要?

A.在start之前

B.在start之後

C.前後都可以

答案:

A

解析:

setDaemon()方法必須在線程啟動之前調用,當線程正在運行時調用會產生異常。

4. 下面關於構造方法的說法不正確的是 ()

A.構造方法也屬於類的方法,可以創建對象的時候給成員變量賦值

B.構造方法不可以重載

C.構造方法沒有返回值

D.構造方法一定要和類名相同

答案:

B

解析:

1.構造方法也是類的方法,可以在創建對象時為成員變量賦值

2.構造方法可以進行重載,但是參數列表必須不相同,不以返回值和訪問級別進行區分

3.構造方法沒有返回值

4.構造方法一定要與定義為public的類同名

綜上所述,B不正確

5.下面論述正確的是()?

A.如果兩個對象的hashcode相同,那麼它們作為同一個HashMap的key時,必然返回同樣的值

B.如果a,b的hashcode相同,那麼a.equals(b)必須返回true

C.對於一個類,其所有對象的hashcode必須不同

D.如果a.equals(b)返回true,那麼a,b兩個對象的hashcode必須相同

答案:

D

解析:

hashcode和equals的約定關係如下:

1、如果兩個對象相等,那麼他們一定有相同的哈希值(hash code)。

2、如果兩個對象的哈希值相等,那麼這兩個對象有可能相等也有可能不相等。(需要再通過equals來判斷)

6.如果int x=20, y=5,則語句System.out.println(x+y +""+(x+y)+y); 的輸出結果是()

A.2530

B.55

C.2052055

D.25255

答案:

D

解析:

1)不論有什麼運算,小括號的優先級都是最高的,先計算小括號中的運算,得到x+y +""+25+y

2)任何字符與字符串相加都是字符串,但是是有順序的,字符串前面的按原來的格式相加,字符串後面的都按字符串相加,得到25+“”+25+5

3)上面的結果按字符串相加得到25255

7. 下列方法定義中 , 正確 的是 ()

A.int x( ){ char ch=’a’; return (int)ch; }

B.void x( ){ …return true; }

C.int x( ){ …return true; }

D.int x( int a, b){ return a+b; }

答案:

A

解析:

A.Java中涉及到byte、short和char類型都可以強制轉化為int,符合返回類型 A正確

B.方法中定義為void 應該沒有返回值,但返回值為boolean類型 B錯

C. 方法中類型為int,應該返回int類型值,但是 返回值為boolean類型 C錯

D.方法應該定義為int(int a,int b),所以D錯

8.設一組權值集合W={2,3,4,5,6},則由該權值集合構造的哈夫曼樹中帶權路徑長度之和為()。

A.20

B.30

C.40

D.45

答案:

D

解析:

Java基礎筆試練習(十九)

答案

9.枚舉(enum)屬於原始數據類型(primitive type)。

A.正確

B.錯誤

答案:

B

解析:

枚舉類是一種特殊對的類,既然是類。那他就不是原始數據類型了

10.在Java中,以下關於方法重載和方法重寫描述正確的是?

A.方法重載和方法的重寫實現的功能相同

B.方法重載出現在父子關係中,方法重寫是在同一類中

C.方法重載的返回值類型必須一致,參數項必須不同

D.方法重寫的返回值類型必須相同或相容。

答案:

D

解析:

重載(overload):只要方法名 一致 ,其他(參數列表、返回值)怎麼折騰隨便。

重寫(overriding):只有實現的功能代碼 不一致 ,其他的(函數名、參數列表、返回值類型)必須都一致。

11.以下哪個區域不屬於新生代?

A.eden區

B.from區

C.元數據區

D.to區

答案:

C

解析:

eden : from : to =8:1:1,用於新生代垃圾回收。 元數據區是用來替換永久代的,大概那個意思。 引入元數據區的意義: JDK8引入了一個新的native的內存區塊,Metaspace(也就是題主所說的“元數據”區域)。也就是說,之後你在調優或者調查JVM問題的時候就不用和PermGen區域打交道了,也不會有java.lang.OutOfMemoryError: PermGen 這種內存不足的問題來騷擾你。

12.下列哪一種敘述是正確的()

A.abstract修飾符可修飾字段、方法和類

B.抽象方法的body部分必須用一對大括號{ }包住

答案:

D

解析:

abstract修飾符可修飾字段、方法和類. × abstract只能用來修飾類、方法,不修飾字段(屬性)。

抽象方法的body部分必須用一對大括號{ }包住. × 抽象方法用“;”結束。

聲明抽象方法,大括號可有可無. × 抽象方法沒有方法體,也不用大括號。

13.off-heap是指那種內存()

A.JVM GC能管理的內存

B.JVM進程管理的內存

C.在JVM老年代內存區

D.在JVM新生代內存

答案:

B

解析:

off-heap叫做堆外內存,將你的對象從堆中脫離出來序列化,然後存儲在一大塊內存中,這就像它存儲到磁盤上一樣,但它仍然在RAM中。對象在這種狀態下不能直接使用,它們必須首先反序列化,也不受垃圾收集。序列化和反序列化將會影響部分性能(所以可以考慮使用FST-serialization)使用堆外內存能夠降低GC導致的暫停。堆外內存不受垃圾收集器管理,也不屬於老年代,新生代。

14.非抽象類實現接口後,必須實現接口中的所有抽象方法,除了abstract外,方法頭必須完全一致.

A.正確

B.錯誤

答案:

B

解析:

15.如下代碼,執行test()函數後,屏幕打印結果為()

public class Test2
{
public void add(Byte b)
{
b = b++;
}
public void test()
{
Byte a = 127;
Byte b = 127;
add(++a);
System.out.print(a + " ");
add(b);
System.out.print(b + "");
}
}

A.127 127

B.128 127

C.129 128

D.以上都不對

答案:

D

解析:

add()方法裡面的修改值並不會起作用,而add(++a)會使a數值越界成-128,所以輸出為-128 127

16.若串S=′software′,其子串的數目是()

A.8

B.37

C.36

D.9

答案:

B

解析:

字串: n(n+1)/2 + 1

非空子串:n(n+1)/2

非空真子串:n(n+1)/2 - 1

17.

以下關於final關鍵字說法錯誤的是()

A.final是java中的修飾符,可以修飾類、接口、抽象類、方法和屬性

B.final修飾的類肯定不能被繼承

C.final修飾的方法不能被重載

D.final修飾的變量不允許被再次賦值

答案:

AC

解析:

1.final修飾變量,則等同於常量

2.final修飾方法中的參數,稱為最終參數。

3.final修飾類,則類不能被繼承

4.final修飾方法,則方法不能被重寫。

5.final 不能修飾抽象類

6.final修飾的方法可以被重載 但不能被重寫

18.下面代碼在main()方法中第八行後可以正常使用的是( )

public class Test
{
private int a=10;
int b=20;
static int c=1;
public static void main(String arg[])
{
Test t = new Test();
}
}

A.t.a

B.this.c

C.Test.b

D.Test.c

答案:

AD

解析:

A : 在private 修飾不能在外部類中調用,main 方法屬於Test類的方法, 所以 對象 t 可以在他自己的類方法中調用它的private

B : static 方法中沒有this 這麼一說

C: b不是static變量

D: 合理

19.執行如下程序代碼

char chr = 127;

int sum = 200;

chr += 1;

sum += chr;

後,sum的值是 ; ( )

備註:同時考慮c/c++和Java的情況的話

A.72

B.99

C.328

D.327

答案:

AC

解析:

因為char類型的數據範圍為0到127,127+1超過了這個範圍,而127的二進制為01111111,加1後按照有符號輸出就為-128,所以200-128=72

20.

Java是一門支持反射的語言,基於反射為Java提供了豐富的動態性支持,下面關於Java反射的描述,哪些是錯誤的:( )

A.Java反射主要涉及的類如Class, Method, Filed,等,他們都在java.lang.reflet包下

B.通過反射可以動態的實現一個接口,形成一個新的類,並可以用這個類創建對象,調用對象方法

C.通過反射,可以突破Java語言提供的對象成員、類成員的保護機制,訪問一般方式不能訪問的成員

D.Java反射機制提供了字節碼修改的技術,可以動態的修剪一個類

E.Java的反射機制會給內存帶來額外的開銷。例如對永生堆的要求比不通過反射要求的更多

F.Java反射機制一般會帶來效率問題,效率問題主要發生在查找類的方法和字段對象,因此通過緩存需要反射類的字段和方法就能達到與之間調用類的方法和訪問類的字段一樣的效率

答案:

A D F

解析:

反射指的是在運行時能夠分析類的能力的程序。

反射機制可以用來:

1.在運行時分析類的能力--檢查類的結構--所用到的就是java.lang.reflect包中的Field、Method、Constructor,分別用於描述類的與、方法和構造器。A中的Class類在java.lang中。

2.在運行時查看對象。

3.實現通用的數組操作代碼。

反射機制的功能:

在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調用任意一個對象的方法;生成動態代理。

反射機制常見作用:

動態加載類、動態獲取類的信息(屬性、方法、構造器);動態構造對象;動態調用類和對象的任意方法、構造器;動態調用和處理屬性;獲取泛型信息(新增類型:ParameterizedType,GenericArrayType等);處理註解(反射API:getAnnotationsdeng等)。

反射機制性能問題:

反射會降低效率。

void setAccessible(boolean flag):是否啟用訪問安全檢查的開關,true屏蔽Java語言的訪問檢查,使得對象的私有屬性也可以被查詢和設置。禁止安全檢查,可以提高反射的運行速度。

可以考慮使用:cglib/javaassist操作。

推薦

大廠筆試內容集合(內有詳細解析) 持續更新中….

ProcessOn是一個在線作圖工具的聚合平臺~

文末

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

Java基礎筆試練習(十九)


分享到:


相關文章: