2012年11月14日水曜日

1Z0-853 Java Standard Edition 5 Programmer Certified Professional Exam(旧310-055 SJC-P)

Oracle 問題1 / 21   REF:1Z0-853.20604


次のコードのコンパイルと実行を試みると、どうなりますか?

public class Bground extends Thread{

public static void main(String argv[]){

Bground b = new Bground();

b.run();

}

public void start(){

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

System.out.println("Value of i = " + i);

}

}

}










解説:

スレッドの実行のために定義と呼び出しが必要なメソッドの名前を入れ替えているため、この問題はやや複雑です。public void run() というメソッド内でループを定義して、main メソッド内で b.start() を呼び出した場合は、0 ~ 9 の値の一覧が出力されます。

Oracle 問題1 / 21   REF:1Z0-853.20629


ソフトウェアの主任設計者から、作成する予定の新しいコンピュータ パーツ システムの概略図を見せられました。階層のトップに Computer と呼ばれるクラスがあり、そこに 2 つの子クラスがあります。1 つは Linux PC で、もう 1 つは WindowsPC です。

これらの主な違いは、一方が Linux オペレーティングシステムを実行しているのに対し、もう一方は Windows システムを実行していることです(もう 1 つの大きな違いは、一方は頻繁に再起動が必要であり、もう一方は確実に稼働することです)。WindowsPC クラスの下に、Server と呼ばれるサブクラスと Workstation と呼ばれるサブクラスがあります。この設計者の作業をどう評価しますか?









解説:

この質問に答えるには、is-a 関係と has-a 関係の違いを理解していることが必要です。クラスが継承される場合は、is-a 関係かどうかを確認します。ルートと 2 つの子の違いは、オペレーティングシステムです。このため、Linux と Windows はコンピュータの種類かどうかを考えます。答えは「いいえ」です。これらはどちらもオペレーティングシステムの種類です。最適な回答は、選択肢 2 になります。オペレーティングシステムをインターフェイスとすることも考えられますが、それは別の問題になります。

Oracle 問題1 / 21   REF:1Z0-853.20635


次のうち、コンパイル時にエラーが発生しないのはどれですか?(3 つ選択してください)









解説:

選択肢 4 では RamdomAccessFile が指定されていますが、コンストラクタに "r" または "rw" のいずれかのモードパラメータを渡す必要があるため、コンパイルされません。

Oracle 問題1 / 21   REF:1Z0-853.20654


次の文のうち、正しい説明はどれですか?(5 つ選択してください)

















解説:

Object.wait メソッド、Thread.join メソッド、Thread.sleep メソッドは、throws 句で InterruptedException を指定します。

Oracle 問題1 / 21   REF:1Z0-853.20655


class A implements Runnable{public void run() {}}

class B {

public static void main(String[] args) {

Thread t1 = new Thread(); // 1

Thread t2 = new Thread(new A()); // 2

Thread t3 = new Thread(new A(), "A"); // 3

Thread t4 = new Thread("A"); // 4

}}



コンパイル時にエラーが発生するのは、どの行ですか?











解説:

クラスインスタンスの作成式は、すべて適切です。String インスタンス"A"は、 Thread の名前です。Thread コンストラクタのシグネチャは覚えておく必要があります。

Oracle 問題1 / 21   REF:1Z0-853.20656


class A implements Runnable{public void run() {}}

class B {

public static void main(String[] args) {

Thread t1 = new Thread(); // 1

Thread t2 = new Thread(new A()); // 2

Thread t3 = new Thread("A", new A()); // 3

Thread t4 = new Thread("A"); // 4

}}



コンパイル時にエラーが発生するのは、どの行ですか?











解説:

3 行目のコンストラクタで引数の位置が逆になっています。Runnable 引数はスレッド名よりも前にします。Thread コンストラクタのシグネチャを覚えておく必要があります。

Oracle 問題1 / 21   REF:1Z0-853.20662


class JSC201 {

static byte m1() {

final char c = '\u0001';

return c; // 1

}

static byte m3(final char c) {return c;} // 2

public static void main(String[] args) {

char c = '\u0003';

System.out.print(""+m1()+m3(c));

}}



このプログラムのコンパイルと実行を試みると、戻り値はどうなりますか?













解説:

2 でコンパイル時にエラーが発生します。char 型変数 c は、コンパイル時定数ではありません。このため、明示的なキャストがない限り byte 型に割り当てることはでません。"return c;" ステートメントは、式 c を持つ return ステートメントです。式の型をメソッドの宣言されている戻り値の型に割り当てることができない場合は、コンパイル時にエラーが発生します。メソッド m3 の宣言された戻り値の型は byte です。return ステートメントは char 型変数 c の値を返そうと試みます。char 値がコンパイル時定数で、値が byte 型の範囲内にある場合、char 値は byte 型に割り当てることができます。メソッド m3 では、変数 c はコンパイル時定数ではありません。このため、変数 c の値を byte 型に割り当てることはできません。メソッド m3 を宣言するとコンパイル時にエラーが発生しますが、メソッド m1 を宣言してもエラーは発生しません。これは、この変数がコンパイル時定数で、値が \u0001 であるため、byte 型に割り当てることができるからです。

Oracle 問題1 / 21   REF:1Z0-853.20691


10 interface Foo {

11 int bar();

12 }

13

14 public class Beta {

15

16 class A implements Foo {

17 public int bar() { return 1; }

18 }

19

20 public int fubar(Foo foo) {

21 return foo.bar();

22 }

23 public void testFoo() {

24 class A implements Foo {

25 public int bar() { return 2; }

26 }

27 System.out.println(fubar(new A()));

28 }

29

30 public static void main(String[] args) {

31 new Beta().testFoo();

32 }

33 }



次のうち、正しい説明はどれですか?













解説:

Beta 型は正しくコンパイルされます。出力結果は "2" となります。

Oracle 問題1 / 21   REF:1Z0-853.20711


12 NumberFormat nf = NumberFormat.getInstance();

13 nf.setMaximumFractionDigits(4);

14 nf.setMinimumFractionDigits(2);

15 String a = nf.format(3.1415926);

16 String b = nf.format(2);



ロケールが Locale.US の場合の結果について、正しい説明はどれですか?















解説:

setMinimumFractionDigits()は、小数点以下の最小桁数を指定するメソッドで、指定桁数を下回ると、前に0が出力されます。 setMaximumFractionDigits()は、小数点以下を四捨五入して、小数点以下の桁を 指定するメソッドです。3.1415926は小数点が7桁あるため、最小桁数の制約は適用されず、代わりに5桁目が四捨五入されます。

Oracle 問題1 / 21   REF:1Z0-853.20729


1 package util;

2 public class BitUtils{

3 public static void process(byte [] bytes){/*more code here*/}

4 }

1 package app;

2 public class FoobarApp{

3 public static void main(String[] args){

4 byte[] bytes = new byte[256];

5 //insert code here 

6 }

7 }



BitUtils の process メソッドを使用するために、FoobarApp クラスの 5 行目で必要なのは何ですか?











解説:

選択肢1:process()メソッドは、FoobarAppクラスおよびその基底クラスに属していないため、スコープを明示することなくFoobarAppクラスから呼び出すことはできません。

選択肢2:BitUtilsクラスは、FoobarAppクラスと異なるパッケージに属しているため、パッケージ名を省略して呼び出すには事前に「import util;」を記述していなければ、呼び出すことはできません。

選択肢3:process()メソッドはpublic宣言されていますので、スコープを正しく指定することで、呼び出しは可能です。

選択肢4:正解です。

選択肢5:import文は、ソースの先頭に記載しなければなりません。

Oracle 問題1 / 21   REF:1Z0-853.20731


1. package util;

2. public class BitUtils {

3. private static void process (byte [] b) { }

4 }

1 package app;

2 public class FoobarApplication {

3 public static void main (String [] args) {

4 byte[] bytes = new byte [256];

5 // insert code here

6 }

7 }



BitUtils の process メソッドを使用するために、FoobarApplication クラスの5 行目で必要なのは何ですか?













解説:

この process() メソッドは private 型なので処理できません。

Oracle 問題1 / 21   REF:1Z0-853.20747


23 int z = 5;

24

25 public void Foobar1(int x){

26 assert(x > 0);

27 switch(x){

28 case 2: x=3;

29 default: assert false; }}

30

31 private void Foobar2(int y){assert(y < 0);}

32

33 private void Foobar3(){assert(Foobar4());}

34

35 private Boolean Foobar4(){z = 6; return false;}



次のうち、正しい説明はどれですか?















解説:

public メソッドの引数チェックにアサーションを使用するのは不適切です。また、アサーションを無効にしても正しく動作するようにする必要があります。

Oracle 問題1 / 21   REF:1Z0-853.20750


1 import java.util.*;

2

3 public class LetterASort{

4 public static void main(String[] args){

5 ArrayList strings = new ArrayList();

6 strings.add("aAaA");

7 strings.add("AaA");

8 strings.add("aAa");

9 strings.add("AAaa");

10 Collections.sort(strings);

11 for(String s : strings) {System.out.print(s + " ");}

12 }

13 }



結果はどうなりますか?













解説:

並べ替えでは、大文字の A の方が優先順位が高くなります。
また、長さが異なる文字列は、文字列の長さの短い方までの比較を行い、 結果が同じであれば、文字列の短い方が優先されます。

Oracle 問題1 / 21   REF:1Z0-853.20751


1 import java.util.*;

2 public class WrappedString{

3 private String s;

4 public WrappedString(String s){this.s = s;}

5 public static void main(String[] args){

6 HashSet<Object> hs = new HashSet<Object>();

7 WrappedString ws1 = new WrappedString("aardvark");

8 WrappedString ws2 = new WrappedString("aardvark");

9 String s1 = new String("aardvark");

10 String s2 = new String("aardvark");

11 hs.add(ws1);hs.add(ws2);hs.add(s1);hs.add(s2);

12 System.out.println(hs.size());}}



結果はどうなりますか?















解説:

HashSetは、重複する要素を格納しません。よって、同じオブジェクトは 何度add()メソッドで追加を行っても、要素数は増加しません。 本問では、WrappedString型オブジェクトを2回、String型オブジェクトを 2回、計4回HashSetに追加しています。 追加されたオブジェクトは、それぞれ new演算子を使って作成したものなので、別々のオブジェクトとなります。 そうすると、HashSetのサイズは4になりそうですが、Stringクラスは 保持する文字列が同じなら、別々のオブジェクトであってもJVM内部では 1つの実体が共有されますので、同一の要素とみなされます。よって、 文字列 "aardvark"を表すStringオブジェクトは、いくつadd()しても 要素数は増加しません。 HshSetのサイズは、WrappedStringの追加で2、Stringの追加で3となり、 結果的にサイズは 3 となります。

Oracle 問題1 / 21   REF:1Z0-853.20757


12 public class Yippee2{

13

14 public static void main(String[] yahoo){

15 for(int x =1;x < yahoo.length;x++){

16 System.out.print(yahoo[x] + " ");

17 }

18 }

19 }



コマンドラインで次の呼び出しを行います。

Java Yippee2 a b c

結果はどうなりますか?











解説:

0 ではなく 1 から開始します。

Oracle 問題1 / 21   REF:1Z0-853.20759


10 class Inner{

11 private int x;

12 public void setX(int x){this.x=x;}

13 public int getX(){return x;}

14 }

15

16 class Outer{

17 private Inner y;

18 public void setY(Inner y){this.y=y;}

19 public Inner getY(){return y;}

20 }

21

22 public class Gamma{

23 public static void main(String[] args){

24 Outer o = new Outer();

25 Inner i = new Inner();

26 int n = 10;

27 i.setX(n);

28 o.setY(i);

29 //insert code here 

30 System.out.println(o.getY().getX());

31 }

32 }



29 行目で、単独で挿入した場合 "100" を出力するコードフラグメントはどれですか?

(3 つ選択してください)













解説:

o.getY()によって返されるのは、Innerオブジェクトです。従って、o.getY().getX()は、InnerオブジェクトのgetX()を呼び出すことになります。これが100を返すようにするには、outerオブジェクト内部のInnerオブジェクトのprivate変数を100にセットするようなコードを記述する必要があります。

n=100を記述しても、整数変数nの値がセットされるだけで、Innerの内部変数xの値は変化しません。n=100はi.setX(n)の前に記述しなければなりません。

i.setX(100)は、Innerオブジェクトのxの値を100にセットするので正解です。

o.getY().setX(100)は、Outer内部のInnerオブジェクトのsetX()を呼び出して、内部変数xを100にセットしているので、正解です。

i=new Inner(); i.setX(100); を記述しても、iはOuterオブジェクト内部のInnerオブジェクトではありませんので、Outer内部のInnerのメンバxの値は10のままです。

o.setY(i); i=new Inner(); i.setX(100); を記述してもOuter内部のInnerではなく、別途作成したInnerのxを変更することになり、メンバxの値は10のままです。

i=new Inner(); i.setX(100); o.setY(i); を記述すると、新たに作成したInnerのxを100にセットした後、新規InnerをOuterのメンバにセットしているので、Outer内部のInnerのメンバxの値は100となります。

Oracle 問題1 / 21   REF:1Z0-853.20774


System.out.format("Pi is approximately %d", Math.PI); 


結果はどうなりますか?









解説:

%d は、 Math.PI の値に使用することはできません。

Oracle 問題1 / 21   REF:1Z0-853.20775


11 public class Yikes{

12

13 public static void go(Long n){System.out.println("Long ");}

14 public static void go(Short n){System.out.println("Short ");}

15 public static void go(int n){System.out.println("int ");}

16 public static void main(String[] args){

17 short y = 6;

18 long z = 7;

19 go(y);

20 go(z);

21 }

22 }



結果はどうなりますか?









解説:

shortはプリミティブ型で、Short は Object の派生クラスです。

本問では、全く同じ型を引数にもつメソッドが存在していませんので、 暗黙の型変換が行われることになります。 しかし、暗黙の型変換は 基本データ型同志、Objectの派生クラス同志の間でしか行われない のではありません。

shortをintに暗黙の型変換するのは、Shortよりintが優先されており、 基本データ型同志でしか型変換が発生しないようにみえるかもしれません。 しかし、基本データ型が優先的にてきようされはするものの、longをintに 変換してしまえば、64bitデータを32bitデータに変換することになって、 上位bitが消失してしまいます。 このようなデータ消失を発生させてまで、 無理に基本データ型への暗黙変換を優先させることはありません。 本問では、longはintでなくLongへ型変換されます。

Oracle 問題1 / 21   REF:1Z0-853.20776


7 void waitForSignal(){

8 Object obj = new Object();

9 synchronized (Thread.currentThread()){

10 obj.wait();

11 obj.notify();

12 }

13 }



次のうち、正しい説明はどれですか?











wait()メソッドは、
public final void wait() throws InterruptedException public final void wait(long timeout) throws InterruptedException public final void wait(long timeout, int nanos) throws InterruptedException
と定義されており、いずれもInterruptedExceptionをスローする可能性があります。

Oracle 問題1 / 21   REF:1Z0-853.20777


21 public String toString(){

22 StringBuffer buffer = new StringBuffer();

23 buffer.append('<');

24 buffer.append(this.name);

25 buffer.append('>');

26 return buffer.toString();

27 }



次のうち、正しい説明はどれですか?









解説:

1. 本コードは、Static変数にアクセスしていないため、synchronize宣言がされていなくても、スレッドセーフとなります。
2.「+」演算子で文字列の連結を行うと、暗黙的に中間のStringBufferオブジェクトが生成されてパフォーマンスが低下します。appendメソッドを使用したほうが高速です。
3.スレッドセーフが確約されているメソッド中では、StringBufferよりもStringBuilderを使用したほうが、高速になります。これは、StringBuilderが同期処理を行う分だけ余分な時間を要するためです。
4.StringBufferとStringBuilderでは、メソッドの引数が同一であるため、クラス名を変更する以外に修正は必要ありません。

Oracle 問題1 / 21   REF:1Z0-853.20786


public class Main{

public static void go(short n){

System.out.println("short");

}

public static void go(short n){

System.out.println("SHORT");

}

public static void go(Long n){

System.out.println("LONG");

}

public static void main(String[] args){

Short y = 6;

int z = 7;

go(y);

go(z);

}

}



結果はどうなりますか?









解説:

go(short n) は、すでに定義されています。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。