1. 程式人生 > 其它 >Java選擇題(二)

Java選擇題(二)

技術標籤:筆記試題java面試程式人生

1.HashSet子類依靠(A)方法區分重複元素。

A)toString(),equals() B)clone(),equals() C)hashCode(),equals() D) getClass(),clone()

解析:HashSet內部使用Map儲存資料,即將HashSet的資料作為Map的key值儲存,這也是HashSet中元素不能重複的原因。而Map中儲存key值前,會去判斷當前Map中是否含有該key物件,內部是先通過key的hashCode,確定有相同的hashCode之後,再通過equals方法判斷是否相同。

2.以下語句的執行結果是什麼?A

1+”10”+3+”2”

A.”11032” B .“16” C.16 D.“32101”

解析:注意“+”的兩邊的型別

3.請問輸出的結果是:A

1

2

3

4

5

6

7

8

9

10

11

12

class A{

public A(String str){

}

}

public class Test{

public static void main(String[] args) {

A classa=new A("he");

A classb=new A("he");

System.out.println(classa==classb);

}

}

A false . B true C報錯 D以上選項都不正確

解析:== 表示是否指向的是同一個記憶體。

4.下面所示的java程式碼,執行時,會產生(D)型別的異常

1

2

int Arry_a[] =new int[10];

System.out.println(Arry_a[10]);

A.ArithmeticException B.NullPointException C.IOException D.ArraylndexOutOfBoundsException

解析:定義的陣列長度為10,角標即為0-9;訪問陣列角標10會出現陣列角標越界異常。

5.為AB類的一個無形式引數無返回值的方法method書寫方法頭,可以用AB.method()方式呼叫,該方法頭的形式為( A )。

A.static void method( ) B.public void method( ) C.final void method( ) D.abstract void method( )

解析:AB為一個類,可以不建立物件,直接使用AB.method("類名.方法名"的方式),所以method是static修飾的靜態方法;其次method無返回值,所以method是void型別的方法。

6.Java中只有整型才能使用的運算子為?C

A.* B./ C.% D.+

解析:ABD選項的操作符都可用於float和double,只有%取餘操作,只適用於整型

7.明朝時期張居正改革的一條鞭法的主要思想是(C)

A面向過程 B萬物皆數 C統一介面 D泛型程式設計

解析:一條鞭法的主要思想是“稅以銀徵收”,取消了原本的田賦、力役和其他雜稅,促進自然經濟的瓦解和商品經濟的發展。面向過程是指以過程為中心的程式設計思想,形成模組化特點。萬物皆數是畢達哥拉斯學派的數學哲學理念(特指有理數),屬於世界觀的一種。泛型程式設計是一種語言機制,能夠幫助實現一個通用的標準容器庫。所謂通用的標準容器庫,就是要能夠做到,比如用一個List類存放所有可能型別的物件這樣的事;泛型程式設計讓你編寫完全一般化並可重複使用的演算法,其效率與針對某特定資料型別而設計的演算法相同。泛型即是指具有在多種資料型別上皆可操作的含意,與模板有些相似。一條鞭法的主要思想並不是以徵稅過程為中心的思想,同時也不是在多種型別上的操作。

8.使用者不能呼叫構造方法,只能通過new關鍵字自動呼叫。(B

A.正確 B.錯誤

解析:在類內部可以使用者可以使用關鍵字this.構造方法名()呼叫(引數決定呼叫的是本類對應的構造方法);在子類中使用者可以通過關鍵字super.父類構造方法名()呼叫(引數決定呼叫的是父類對應的構造方法);反射機制對於任意一個類,都能夠知道這個類的所有屬性和方法,包括類的構造方法。

9.定義有StringBuffer s1=new StringBuffer(10);s1.append(“1234”)則s1.length()和s1.capacity()分別是多少?A

A.4 10 B.4 4 C.10 10 D.10 4

解析:length 返回當前長度;如果字串長度沒有初始化長度大,capacity返回初始化的長度;如果append後的字串長度超過初始化長度,capacity返回增長後的長度。

10.在Java中,關於HashMap類的描述,以下錯誤的是(A)?

A.HashMap能夠保證其中元素的順序
B.HashMap允許將nulI用作值
C.HashMap允許將null用作鍵
D.HashMap使 用鍵/值得形式儲存資料

解析:HashMap的底層是由陣列加連結串列實現的,對於每一個key值,都需要計算雜湊值,然後通過雜湊值來確定順序,並不是按照加入順序來存放的,因此可以認為是無序的,但不管是有序還是無序,它都一個自己的順序。故A錯。最開始有Hashtable,Hashtable是不允許key和value的值為空的,但後來開發者認為有時候也會有key值為空的情況,因為可以允許null為空,通過檢視HashMap的原始碼就知道:if(key = null) {putForNullKey(value);};Map底層都是用key/value鍵值對的形式存放的。

11.下列哪些針對程式碼執行結果的描述是正確的?A

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

class Carextends Vehicle

{

public static void main (String[] args)

{

new Car(). run();

}

private final void run()

{

System. out. println ("Car");

}

}

class Vehicle

{

private final void run()

{

System. out. println("Vehicle");

}

}

A.Car B.Vehicle C.Compiler error at line 3 D.Compiler error at line 5 E.Exception thrown at runtime

解析:首先final宣告的方法是不能被覆蓋的,但是這裡並不錯誤,因為方法是private的,也就是子類沒有繼承父類的run方法,因此子類的run方法跟父類的run方法無關,並不是覆蓋。new Car().run()也是呼叫子類的run方法。

12.以下程式碼的輸出的正確結果是D

1

2

3

4

5

6

publicclassTest{

publicstaticvoidmain(Stringargs[]){

Strings="祝你考出好成績!";

System.out.println(s.length());

}

}

A.24 B.16 C.15 D.8

解析:length得到的是字元,不是位元組。

13.以下程式的執行結果是:( C )

1

2

3

4

5

6

7

8

9

10

TreeSet<Integer> set = new TreeSet<Integer>();

TreeSet<Integer> subSet = new TreeSet<Integer>();

for(int i=606;i<613;i++){

if(i%2==0){

set.add(i);

}

}

subSet = (TreeSet)set.subSet(608,true,611,true);

set.add(629);

System.out.println(set+" "+subSet);

A編譯失敗
B發生執行時異常
C[606, 608, 610, 612, 629] [608, 610]
D[606, 608, 610, 612, 629] [608, 610,629]

14.如果一個list初始化為{5,3,1},執行以下程式碼後,其結果為(B)?
nums.add(6);
nums.add(0,4);
nums.remove(1);

A.[5,3, 1, 6] B.[4,3, 1, 6] C.[4,3, 6] D.[5,3,6]

解析:nums.add(6); //往後邊加一個6,{5,3,1,6};nums.add(0,4);//往下標為0的數加一個4,{4,5,3,1,6};nums.remove(1); // 移除下標為1 的元素,{4,3,1,6}

15.如果一個介面Cup有個方法use(),有個類SmallCup實現介面Cup,則在類SmallCup中正確的是? (C )

A.void use() { ..}
B.protected void use() { ...
C.public void use() {…}
D.以上語句都可以用在類SmallCup中

解析:既然是實現介面,就要實現介面的所以方法,相當於重寫方法,方法的重寫需要滿足:三同一大一小(方法名、返回值型別、形參相同;訪問許可權>=重寫前;丟擲異常<=重寫前)

16.給出以下程式碼,請給出結果:(B

1

2

3

4

5

6

7

8

9

10

public class TestObj{

public static void main(String[] args){

Object o=new Object(){

public boolean equals(Object obj){

return true;

}

};

System.out.println(o.equals(“Fred”));

}

}

A.執行時丟擲異常
B.true
C.Fred
D.第三行編譯錯誤

解析:建立了一個匿名內部類,並將所建立的匿名物件賦給 Object (多型:子類物件賦給超類引用)。同時,該匿名內部類重寫了 Object 類的 equals 方法。在執行語句時,根據多型及覆蓋原則,會呼叫匿名內部類重寫後的 equals 方法。

17.表示式(short)10/10.2*2運算後結果是什麼型別?C

A.short B.int C.double D.float

解析:要注意是(short)10/10.2*2,而不是(short) (10/10.2*2),前者只是把10強轉為short,又由於式子中存在浮點數,所以會對結果值進行一個自動型別的提升,浮點數預設為double,所以答案是double;後者是把計算完之後值強轉short。

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

A.不管是post還是get方法提交過來的連線,都會在service中處理
B.doGet/doPost則是在javax.servlet.GenericServlet中實現的
C.service()是在javax.servlet. Servlet介面中定義的
D.service判斷請求型別,決定是呼叫doGet還是doPost方法

解析:doGet/doPost 則是在 javax.servlet.http.HttpServlet 中實現的。

19.抽象類方法的訪問許可權預設都是public。( B

A.正確 B.錯誤

20.下列在Java語言中關於資料型別和包裝類的說法,正確的是(B
A.基本(簡單)資料型別是包裝類的簡寫形式,可以用包裝類替代基本(簡單)資料型別
B.long和double都佔了64位( 64bit)的儲存空間。
C.預設的整數資料型別是int,預設的浮點資料型別是float。
D.和包裝類-樣,基本(簡單) 資料型別宣告的變數中也具有靜態方法,用來完成進位制轉化等。

解析:A包裝和基本型別不是同一個概念 C預設的浮點資料型別是double,如果要指明使用float,則需要在後面加f D基本資料型別是沒有靜態方法的,但是基本資料型別的包裝類卻有。

21.輸出結果為:B

1

2

String str ="";

System.out.print(str.split(",").length);

A.0 B.1 C.出現異常

解析:String獲取長度用的是length()方法,而陣列型別我們直接用屬性length獲取長度,所以String[]陣列型別我們應該用length獲取長度;總結來說,因為原字串不包含分隔符,所以直接返回原字串,分割出來只有一個空的字串陣列。

22.下面程式的執行結果(D

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Object obj=new Object();

List aList=new ArrayList();

List bList=new LinkedList();

long t1=System.currentTimeMillis();

for(int i=0;i<50000;i++){

aList.add(0,obj);

}

long t2=System.currentTimeMillis()-t1;

t1=System.currentTimeMillis();

for(int i=0;i<50000;i++){

bList.add(0,obj);

}

long t3=System.currentTimeMillis()-t1;

A.t2 B.t2=t3 C.不確定 D.t2>t3

解析:ArrayList內部是動態陣列實現,在增加空間時會複製全部資料到新的容量大一些的陣列中。而LinkedList內部為雙向連結串列,可以按需分配空間,擴充套件容量簡單,因此LinkedList用時少。

23.下列語句正確的是:D

A形式引數可被欄位修飾符修飾

B形式引數不可以是物件

C形式引數為方法被呼叫時真正被傳遞的引數

D形式引數可被視為local variable

24.以下程式碼的輸出結果是?C

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public class B

{

public static B t1 =new B();

public static B t2 =new B();

{

System.out.println("構造塊");

}

static

{

System.out.println("靜態塊");

}

public static void main(String[] args)

{

B t =new B();

}

}

A靜態塊構造塊構造塊構造塊
B構造塊靜態塊構造塊構造塊
C構造塊構造塊靜態塊構造塊
D構造塊構造塊構造塊靜態塊

解析:開始時JVM載入B.class,對所有的靜態成員進行宣告,t1 t2被初始化為預設值,為null,又因為t1 t2需要被顯式初始化,所以對t1進行顯式初始化,初始化程式碼塊→建構函式(沒有就是呼叫預設的建構函式),咦!靜態程式碼塊咋不初始化?因為在開始時已經對static部分進行了初始化,雖然只對static變數進行了初始化,但在初始化t1時也不會再執行static塊了,因為JVM認為這是第二次載入類B了,所以static會在t1初始化時被忽略掉,所以直接初始化非static部分,也就是構造塊部分(輸出''構造塊'')接著建構函式(無輸出)。接著對t2進行初始化過程同t1相同(輸出'構造塊'),此時就對所有的static變數都完成了初始化,接著就執行static塊部分(輸出'靜態塊'),接著執行,main方法,同樣也,new了物件,呼叫建構函式輸出('構造塊')。

25.在java語言中,如果你編寫一個多執行緒序,可以使用的方法是(AB

A擴充套件類Thread
B實現Runnable介面
C擴充套件類Runnable
D實現介面Thread

解析:繼承Thread類(Override它的run方法);實現Runnable介面(實現run方法);使用ExecutorService、Callable、Future實現有返回結果的多執行緒。

26.已知boolean result = false,則下面哪個選項是合法的:BD

A.result=1 B.result=true; C.if(result!=0) {//so something..} D.if(result) {//do something...}

解析:boolean型別只有兩個直接量值:true和false. 除成員變數會有預設初始值外,其他變數必須在第一次使用之前初始化。

27.下面有關java的instanceof、?、&、&&說法正確的有?ABCD

A.instanceof可用來判斷某個例項變數是否屬於某種類的型別。
B."?:"三目運算子
C.&在邏輯運算中是非短路邏輯與,在位運算中是按位與.
D.&&邏輯運算:邏輯與

解析:instanceof 用來判斷某個例項變數是否屬於某種類的型別。這句話不準確,instanceof可以用來判斷某個例項變數是否屬於某種類的型別,但它的功能不侷限於此,比如還可以判斷某個類是否屬於某個類的子類的型別。

28.如下哪些是java中有效的關鍵字(AD

A.native B.NULL C.false D.this

解析:true、false、null都不是關鍵字;goto、const、是保留的關鍵字。

29.有關hashMap跟hashTable的區別,說法正確的是?ABCD

A.HashMap和Hashtable都實現了Map介面
B.HashMap是非synchronized,而Hashtable是synchronized
C.HashTable使用Enumeration,HashMap使用Iterator
D.HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。

30.下列哪些方法是針對迴圈優化進行的ABD

A強度削弱
B刪除歸納變數
C刪除多餘運算.
D程式碼外提

解析:常見的程式碼優化技術有:複寫傳播,刪除死程式碼, 強度削弱,歸納變數刪除。