問題
次のコードについて正しい説明はどれか1つ選択せよ。
public class Main {
public static void main(String... args) {
new Test("1000").print();
}
}
class Test {
private var v = 100; //(1)
public Test(String v) {
var var = Integer.valueOf(v); //(2)
this.v = var; //(3)
}
public void print() {
int var = v; //(4)
System.out.println(var); //(5)
}
}
選択肢
A)このコードは正しくコンパイル、実行され100が出力される
B)このコードは (4) でコンパイルに失敗する
C)このコードは (1) でコンパイルに失敗する
D)このコードは正しくコンパイル、実行され1000が出力される
E)このコードは (3) でClassCastException をスローする
F)このコードは (2) でコンパイルに失敗する
G) このコードは (5) でNumberFormatExceptionをスローする
解答
A)このコードは正しくコンパイル、実行され100が出力される
B)このコードは (4) でコンパイルに失敗する
C)このコードは (1) でコンパイルに失敗する
D)このコードは正しくコンパイル、実行され1000が出力される
E)このコードは (3) でClassCastException をスローする
F)このコードは (2) でコンパイルに失敗する
G)このコードは (5) でNumberFormatExceptionをスローする
解説
(1)には varによる型推論が使用されています。しかし、varの型推論はローカル変数にしか使用できません。そのため、(1)でコンパイルエラーが発生します。
なお、(3)と(4)においてもコンパイルエラーが発生しますが、これは(1)で型推論によるデータ型が決まらずその影響を受けているためです。
A): コードはコンパイルエラーになるため、正しくない。
B): (4) の var
はローカル変数であり、問題ありません。正しくない。
C): (1) の var
でコンパイルエラーになるため、正しい。
D): コンパイルエラーになるため、正しくない。
E): ClassCastException とは無関係であり、正しくない。
F): (2) の var
は有効なスコープで使われているため、正しくない。
G): NumberFormatException とは無関係であり、正しくない。
対象資格:Java SE17 認定資格