SCJP認證套題解析之二 (轉)

gugu99發表於2008-04-23
SCJP認證套題解析之二 (轉)[@more@]

21、Which of the following assignment is not correct?

A. float f = 11.1;

B. double d = 5.3E12;

C. double d = 3.14159;

D. double d = 3.14D.

(a):namespace prefix = o ns = "urn:schemas--com::office" />

題目:下面的哪些賦值語句是對的。

浮點數的賦值是帶有小數點的數字預設是double型的,如果在浮點數後面加f或者F則是float,後面加d或者D則是double,科學計數法形式的浮點數也是double型的,而double的精度比float高,將一個高精度的double賦值給一個低精度的float時需要進行強制型別轉換,反之則不需要。

22、Given the uncompleted code of a class:

  class Person {

  String name, department;

  int age;

  public Person(String n){ name = n; }

  public Person(String n, int a){ name = n; age = a; }

  public Person(String n, String d, int a) {

  // doing the same as two arguments version of constructor

  // including assignment name=n,age=a

  department = d;

  }

  }

Which expression can be added at the "doing the same as..." part of the constructor?

A. Person(n,a);

B. this(Person(n,a));

C. this(n,a);

D. this(name,age).

(c)

題目:給出下面的不完整的類程式碼:

下面的哪些可以加到構造方法中的"doing the same as..."處?

在同一個類的不同構造方法中該類的其它構造方法需要使用this(…)的形式,而且必須是在構造方法的第一行呼叫,這個和普通的方法過載呼叫的方式不同,普通的方法可以直接使用方法名加引數來呼叫,而且呼叫位置沒有限制,因此答案A是不行的,B的語法就是錯誤的,D的錯誤在於在父型別的構造被呼叫前不能引用類的成員。構造方法是一個類例項化的起點(雖然嚴格來說首先的並不是構造方法的第一個語句,而是的分配),因此在構造方法中不能將成員作為引數引用。

 

23、Which of the following statements about variables and their pes are true?

 

A. Instance variables are member variables of a class.

B. Instance variables are declared with the static key.

C. Local variables defined ins a method are created when the method is executed.

D. Local variables must be initialized before they are used.

(acd)

題目:下面關於變數及其範圍的陳述哪些是對的。

A.  例項變數是類的成員變數。

B.  例項變數用關鍵字static宣告。

C.  在方法中定義的區域性變數在該方法被執行時建立

D.  區域性變數在使用前必須被初始化。

類中有幾種變數,分別是:區域性變數(英文可以為:localautomatictemporarystack variable)是定義在方法裡的變數;例項變數(英文為:instance variable)是在方法外而在類宣告內定義的變數,有時也叫成員變數;類變數(英文為:class variable)是用關鍵字static宣告的例項變數,他們的生存期分別是:區域性變數在定義該變數的方法被呼叫時被建立,而在該方法退出後被撤銷;例項變數在使用new Xxxx()建立該類的例項時被建立,而其生存期和該類的例項物件的生存期相同;類變數在該類被載入時被建立,不一定要用new Xxxx()建立,所有該類的例項物件共享該類變數,其生存期是類的生存期。任何變數在使用前都必須初始化,但是需要指出的是區域性變數必須顯式初始化,而例項變數不必,原始型別的例項變數在該類的構造方法被呼叫時為它分配的預設的值,整型是0,布林型是false,而浮點型是0.0f,引用型別(類型別)的例項變數的預設值是null(沒有進行實際的初始化,對它的使用將引起NullPointException),類變數的規則和例項變數一樣,不同的是類變數的初始化是在類被載入時。

 

24、public void test() {

  try { oneMethod();

  System.out.println("condition 1");

  } catch (ArrayIndexOutOfBoundsException e) {

  System.out.println("condition 2");

  } catch(Exception e) {

  System.out.println("condition 3");

  } finally {

   System.out.println("finally");

  }

  }

Which will display if oneMethod run normally?

A. condition 1

B. condition 2

C. condition 3

D. finally

(ad)

題目:在oneMethod()方法執行正常的情況下將顯示什麼?

如果try塊中的語句在執行時發生異常,則執行從該處中斷而進入catch塊,根據異常的型別進行匹配,最前面的優先進行匹配比較,只要該異常是catch中指定的異常的子類就匹配成功進而執行相應的catch中的內容,而finally塊中的內容無論是否發生異常都將被執行。

 

25、Given the following code:

public class Test {

  void printValue(int m){

  do { System.out.println("The value is"+m);

  }

  while( --m > 10 )

  }

  public static void main(String arg[]) {

  int i=10;

  Test t= new Test();

  t.printValue(i);

  }

}

Which will be output?

A. The value is 8

B. The value is 9

C. The value is 10

D. The value is 11

(c)

題目:給出下面的程式碼:

輸出將是什麼?

此題考察的是do… while迴圈和 -- 運算子的知識,do…while最少被執行一次,在執行完do中的內容後判斷while中的條件是否為true,如果為true的話就再執行do中的內容,然後再進行判斷,以此類推直到while的判斷為false時退出迴圈執行迴圈後面的內容,而—運算子的規則是在變數右邊的 -- 將先進行運算,然後才是使變數的值減一,而在變數左邊的是先將變數的值減一再運算。

 

26、Which of the following statements about declaration are true?

A. Declaration of primitive types such as boolean, byte and so on does not allocate memory space for the variable.

B. Declaration of primitive types such as boolean, byte and so on allocates memory space for the variable.

C. Declaration of nonprimitive types such as String, Vector and so on does not allocate memory space for the .

D. Declaration of nonprimitive types such as String, Vector ans so on allocates memory space for the object.

(ad)

題目:下面的有關宣告的哪些敘述是對的。

A.  對原始資料型別例如boolean,byte的變數的宣告不會為該變數分配記憶體空間。

B.  對原始資料型別例如boolean,byte的變數的宣告將為之分配記憶體空間。

C.  非原始資料型別例如String,Vector的變數的宣告不會為該物件分配記憶體。

D.  非原始資料型別例如String,Vector的變數的宣告會為該物件分配記憶體。

對原始資料型別的變數的宣告將為之分配記憶體並賦予一個預設值,參見23題的敘述,而非原始資料型別的變數必須用new Xxxx()分配記憶體及初始化。但是嚴格來講此題的答案有待確定,因為只有原始型別的例項變數和類變數的宣告在類物件被建立/類被載入時完成記憶體的自動分配,而原始型別的區域性變數必須顯式初始化,從這點來看原始型別的區域性變數沒有被自動分配記憶體,SL275中只提出了非原始資料型別的變數必須使用new Xxxx()完成記憶體的分配而沒有指出原始資料型別的變數是否在宣告時即自動進行記憶體分配,而從區域性變數不能在顯式初始化前使用這點來看在宣告時沒有進行記憶體分配。因此答案a的正確性還有待官方的確定。

 

27、In the documentation which sections are included in a class document?

A. The description of the class and its purpose

B. A list of methods in its super class

C. A list of member variable

D. The class hierarchy

(acd)

題目:在Java API文件中下面的哪些部分被包括在內

A.  類及用途的描述

B.  父類的方法的列表

C.  成員變數的列表

D.  類層次

類文件的內容主要是:類層次、類及用途描述、成員變數列表、構造方法列表、成員方法列表、從類層次上繼承的方法列表、成員變數的詳細說明、構造方法詳細說明、成員方法詳細說明。

 

28、Given the following code:

  1) public void modify() {

  2)  int i, j, k;

  3)  i = 100;

  4)  while ( i > 0 ) {

  5)  j = i * 2;

  6)  System.out.println (" The value of j is " + j );

  7)  k = k + 1;

  8)  i--;

  9)  }

  10) }

Which line might cause an error during compilation?

A. line 4

B. line 6

C. line 7

D. line 8

(c)

題目:給出下面的程式碼:

哪些行在編譯時可能產生錯誤。

這個問題在前面有關變數的型別及其作用域的問題中討論過,區域性變數在使用前必須顯式初始化,而程式碼中的變數k在使用前沒有。

 

29、Which of the following statements about variables and scope are true?

A. Local variables defined inside a method are destroyed when the method is exited.

B. Local variables are also called automatic variables.

C. Variables defined outside a method are created when the object is constructed.

D. A method parameter variable continues to exist for as long as the object is needed in which the method is defined.

(abc)

題目:下面有關變數及其作用域的陳述哪些是對的。

A.  在方法裡面定義的區域性變數在方法退出的時候被撤銷。

B.  區域性變數也叫自動變數。

C.  在方法外面定義的變數(譯註:即例項變數)在物件被構造時建立。

D.  在方法中定義的方法的參變數只要該物件被需要就一直存在。

本題還是討論變數的型別及作用域,參看前面的敘述。

 

30、A class design requires that a member variable cannot be accessible directly outside the class. Which modifier should be used to obtain the access control?

A. public

B. no modifier

C. protected

D. private

(d)

題目:類的設計要求它的某個成員變數不能被外部類直接訪問。應該使用下面的哪些修飾符獲得需要的訪問控制。

這個在前面也有敘述,java有四種訪問型別,分別為:public,protected,default,private,其中public變數可以被所有的外部類訪問,而pretected的可以被同一個包及該類的子類訪問,default即沒有任何修飾符的變數可以被同一個包中的類訪問,而private變數只能在被該類內部被訪問。題目中的外部類應該理解為除該類自身的所有其它類,因此只有使用private可以達到要求。

 

31Given the following code fragment:

  1) String str = null;

  2) if ((str != null) && (str.length() > 10)) {

  3)  System.out.println("more than 10");

  4) }

  5) else if ((str != null) & (str.length() < 5)) {

  6)  System.out.println("less than 5");

  7)  }

  8)  else { System.out.println("end"); }

Which line will cause error?

A. line 1

B. line 2

C. line 5

D. line 8

(c)

題目:給出下面的程式碼片斷:

哪些行將導致錯誤。

此題需要將程式碼仔細看清楚,查詢沒有邏輯錯誤,if …else的使用沒有問題,也沒有拼寫錯誤,錯誤在於第5行的“與”運算子的使用,邏輯運算子(logical operator)的“與”應該是&&,而&是位邏輯運算子(bitwise logical operator)的“與”,使用的物件不一樣,邏輯運算子的“與”的左右運算元都應該是布林型(logical boolan)的值,而位邏輯運算子的左右運算元都是整型(integral)值。

 

32、Which statements about Java code security are true?

 

A. The bytecode verifier loads all classes needed for the execution of a program.

B. Executing code is performed by the runtime interpreter.

C. At runtime the bytecodes are loaded, checked and run in an interpreter.

D. The class loader adds security by separating the namespaces for the classes of the local file system from those imported fromwork s.

(bcd)

題目:下面有關java程式碼性的敘述哪些是對的。

A.  位元組碼校驗器載入查詢執行需要的所有類。

B.  執行時直譯器執行程式碼。

C.  在執行時,位元組碼被載入,驗證然後在直譯器裡面執行。

D.  類載入器透過分離本機的類和從匯入的類增加安全性。

SL275中描述的Java執行的過程是這樣的:類載入器(class loader)載入程式執行所需要的所有類,它透過區分本機檔案系統的類和網路系統匯入的類增加安全性,這可以限制任何的特洛伊程式,因為本機類總是先被載入,一旦所有的類被載入完,執行檔案的記憶體劃分就固定了,在這個時候特定的記憶體地址被分配給對應的符號引用,查詢表(lookuo table)也被建立,由於記憶體劃分發生在執行時,直譯器在受限制的程式碼區增加保護防止未授權的訪問;然後位元組碼校驗器(byte code verifier)進行校驗,主要執行下面的檢查:類符合JVM規範的類檔案格式,沒有違反訪問限制,程式碼沒有造成堆疊的上溢或者下溢,所有操作程式碼的引數型別都是正確的,沒有的資料型別轉換(例如將整型數轉換成物件型別)發生;校驗透過的位元組碼被直譯器(interpreter)執行,直譯器在必要時透過執行時系統執行對底層的合適呼叫。後三個答案是SL275中的原話。

 

33、Given the following code:

  public class Person{

  static int arr[] = new int[10];

  public static void main(String a[]) {

  System.out.println(arr[1];)

  }

  }

Which statement is correct?

A. When compilation some error will occur.

B. It is correct when compilation but will cause error when running.

C. The output is zero.

D. The output is null.

(c)

題目:給出下面的程式碼:

那個敘述是對的。

A.  編譯時將發生錯誤。

B.  編譯時正確但是執行時出錯。

C.  輸出為0。

D.  輸出為null

int型陣列是類物件,它在類被載入時完成初始化,在前面題目中已經有敘述,由於是原始資料型別int,其初始值為0。

34、Given the following code:

  public class Person{

  int arr[] = new int[10];

  public static void main(String a[]) {

  System.out.println(arr[1]);

  }

  }

Which statement is correct?

A. When compilation some error will occur.

B. It is correct when compilation but will cause error when running.

C. The output is zero.

D. The output is null.

(a)

給出下面的程式碼:

哪些敘述是對的。

A.  編譯時出錯。

B.  編譯時正確而執行時出錯。

C.  輸出0。

D.  輸出null。

例項變數在類的一個例項構造時完成初始化,而且在類的靜態方法中不能直接訪問類的非靜態成員而只能訪問類成員(像上題中一樣),類的普通方法可以訪問類的所有成員和方法,而靜態方法只能訪問類的靜態成員和方法,因為靜態方法屬於類,而普通方法及成員變數屬於類的例項,類方法(靜態方法)不能使用屬於某個不確定的類的例項的方法和變數,在靜態方法裡面沒有隱含的this,而普通方法有。

 

35、public class Parent {

  public int addValue( int a, int b) {

  int s;

  s = a+b;

  return s;

  }

  }

  class Child extends Parent {

 

  }

Which methods can be added into class Child?

A. int addValue( int a, int b ){// do something...}

B. public void addValue (){// do something...}

C. public int addValue( int a ){// do something...}

D. public int addValue( int a, int b )throws MyException {//do something...}

(bc)

題目:哪些方法可以加入類Child中。

此題涉及方法過載(overload),方法重寫(override)以及類派生時方法重寫的規則。方法過載的規則是:一、引數列表必須不同,個數的不同完全可以,如果個數相同則引數型別的不同不能引起歧意,例如int 和long,float和double就不能作為唯一的型別不同;二、返回值可以不同,但是不能是過載時唯一的不同點(這點和c++中不同,c++中返回型別必須一致)。方法重寫發生在類繼承時,子類可以重寫一個父類中已有的方法,必須在返回型別和引數列表一樣時才能說是重寫,否則就是過載,java中方法重寫的一個重要而且容易被忽略的規則是重寫的方法的訪問不能比被重寫的方法的訪問許可權低!重寫的另一個規則是重寫的方法不能比被重寫的方法拋棄(throws)更多種類的異常,其拋棄的異常只能少,或者是其子類,不能以拋棄異常的個數來判斷種類,而應該是異常類層次結果上的種類。此題中答案a的錯誤就是重寫的訪問許可權比被重寫的方法的低,而b,c都屬於過載,d的錯誤在於比被重寫的方法拋棄了更多種類的異常。

 

36、A member variable defined in a class can be accessed only by the classes in the same package. Which modifier should be used to obtain the access control?

A. private

B. no modifier

C. public

D. protected

(b)

題目:一個類中定義的成員變數只能被同一包中的類訪問。下面的哪些修飾符可以獲得需要的訪問控制。

參看前面的題目中的敘述。

 

37、A public member vairable called MAX_LENGTH which is int type, the value of the variable remains constant value 100. Use a short statement to define the variable.

A. public int MAX_LENGTH=100;

B. final int MAX_LENGTH=100;

C. final public int MAX_LENGTH=100;

D. public final int MAX_LENGTH=100.

(d)

題目:共有成員變數MAX_LENGTH是一個int型值,變數的值保持常數值100。使用一個短宣告定義這個變數。

Java中共有變數使用public定義,常量變數使用final,另外注意的是修飾符的順序,一個最完整的修飾是public static final int varial_a=100;這個順序不能錯,這和c++中也是不同的。而答案c恰恰錯在修飾符的順序上。

 

38、Which expressions are correct to declare an array of 10 String objects?

A. char str[];

B. char str[][];

C. String str[];

D. String str[10];

(c)

題目:哪些表示式是宣告一個含有10個String物件的陣列。

嚴格來說這個題目沒有給出一個正確的答案,唯一比較正確的是c,而完全滿足題目要求的應該是:String str[]=new String[10];

注意答案d的形式是不對的,這和c++也是不同的。

 

39、Which fragments are correct in Java source file?

A. package testpackage;

public class Test{//do something...}

B. import java.io.*;

package testpackage;

public class Test{// do something...}

C. import java.io.*;

class Person{// do something...}

public class Test{// do something...}

D. import java.io.*;

import java.awt.*;

public class Test{// do something...}

(acd)

題目:下面的那個java原始檔程式碼片斷是對的。

Java中的package語句必須是原始檔中除去說明以外的第一條語句,匯入包語句可以有幾個,但是必須位於package語句之後,其它類定義之前,一個原始檔中可以有幾個類,但最多隻能有一個是public的,如果有,則原始檔的檔名必須和該類的類名相同。

 

40:

String s= "hello ";

String t = "hello";

char c[] = {'h','e','l','l','o'} ;

Which return true?

A. s.equals(t);

B. t.equals(c);

C. s==t;

D. t.equals(new String("hello"));

E. t==c.

(ad)

題目:哪些返回true。

這個在前面第10題的equals()方法和==運算子的討論中論述過。==運算子比較的是運算子兩端的運算元是否是同一個物件,而String的equals()方法比較的是兩個String物件的內容是否一樣,其引數是一個String物件時才有可能返回true,其它物件都返回假。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1002869/,如需轉載,請註明出處,否則將追究法律責任。

相關文章