[J2SE1.4] 制御文、アサーションと例外処理

Q1 (A)に入れられるのは?

switch (A) {
  ......
}

a. byte
b. short
c. int
d. long
e. char
f. float
g. double

A1

○a. byte
○b. short
○c. int
×d. long
○e. char
×f. float
×g. double

byte、short、int、charの4つの基本データ型が可能。
switch文の引数には、整数型の式を渡すが、long型を不可で、char型は可。

--------------------------------------------------
Q2 (A)に入れられるのは?

byte a = 100;
byte b = 10;
final byte c = 5;
switch (a) {
  case (A);
}

a. -100
b. 100
c. 変数b
d. 定数c
e. 3.14
f. -3.14

A2

○a. -100
   負の数値はOK。
×b. 100
   switchの引数になっているのはbyte型変数。
   byte型の範囲(-128~127)外の値の指定は不可。
×c. 変数b
   caseに変数は不可。
○d. 定数c
   final指定された定数は可。
×e. 3.14
   caseは整数のみ。
×f. -3.14
   caseは整数のみ。
   


--------------------------------------------------
Q3 アサーション有効で、コンパイル実行できるのは?

public class AssertionTest {
  static void func(String str) {
    assert(str != null);
    System.out.println(str);
  }
  public static void main(String args[]) {
    func("hogehoge");
    func(null);
  }
}

a. javac -ea AssertionTest.java
b. javac -target 1.4 AssertionTest.java
c. javac -source 1.4 AssertionTest.java
d. java -ea AssertionTest
e. java -target 1.4 AssertionTest
f. java -source 1.4 AssertionTest

A3

×a. javac -ea AssertionTest.java
×b. javac -target 1.4 AssertionTest.java
○c. javac -source 1.4 AssertionTest.java
   -sourceオプションでソースコードがどのバージョンのJava言語で書かれているかを指定。
   このオプションをつけないとassertキーワードを含むコードはコンパイルエラーになる。
○d. java -ea AssertionTest
   -eaオプションをつけると、アサーションが有効になる。
   -eaオプションをつけずに実行しても、アサーションエラーは発生しない。
×e. java -target 1.4 AssertionTest
×f. java -source 1.4 ssertionTest

--------------------------------------------------
Q4 throwできるのは?

import java.io.*;
public class ThrowableTest {
  public static void main(String args[]) throws Throwable {
    throw new (A);
  }
}

a. String()
b. Throwable()
c. Exception()
d. RuntimeException()
e. IOException()
f. AssertError()

A4

×a. String()
○b. Throwable()
○c. Exception()
○d. RuntimeException()
○e. IOException()
○f. AssertError()

Throwable←Exception←RuntimeException
Throwable←Error←AssertError

--------------------------------------------------
Q5 入れてもエラーなくコンパイルできるのは?

public class ExceptionTest {
  static void func() throws IOException {
    throw new (A);
  }
  public static void main(String args[]) {
    try {
      func();
    } catch(Exception ex) {
      ex.printStackTrace();
    }
  }
}

a. IOException
b. RuntimeException()
c. Exception()
d. Error()

A5

○a. IOException
   func()メソッドのthrowsでIOExceptionは呼び出し元に投げるようになっている。
   呼び出し元では、Exceptionクラスのサブクラスであれば全ての例外をcatchするのでコンパイル可。
○b. RuntimeException()
   RuntimeException(とそのサブクラス)は、throwsに書かなくても自動的に呼び出し元に投げられる。
   呼び出し元は、全ての例外をcatchするのでコンパイル可。
×c. Exception()
   func()メソッドがthrowするのはIOExceptionとRuntimeException(とそのサブクラス)だけ。
   Excetionオブジェクトはthrow不可。
○d. Error()
   Errorとそのサブクラスは自動的に呼び出し元にthrowされ、catchする必要がないもの。
   コンパイル可。

--------------------------------------------------
Q6 assertを用いたチェックとして(A)に相応しいのは?

public class AssertTest {
  private int value;
  public void func(int i) {
    assert (A);
    ......
  }
}

a. i > 0
b. i++ > 0
c. value > 0
d. value++ > 0

A6

×a. i > 0
   publicなメソッドの引数は、assertでチェックすべきでない。
   引数が不正の場合は、IllegalArgumentException、IndexOutOfBoundsException、NullPointerException等のRuntimeExceptionを発生させるべき。
×b. i++ > 0
   assert文は実行時に-eaオプションをつけないと実行されないため、
   assertの条件式に、変数の値が変更するような式を書くとアサーションのON/OFFで実行結果が変わってしまうため、NG。
○c. value > 0
   privateなインスタンス変数の値チェックはassert利用の一例。
×d. value++ > 0
   assert条件式に、変数の値を変更するような式を書くのはNG。


goto [J2SE1.4] INDEX

tag : SJC-P

2008-06-25 00:46 : __lang__java : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud