1-2 変数の宣言の問題
次のコードを確認してください。
class Test{
public static void main(String args[]){
func("555");
}
public static void func(String str){
int num2 = 777;
try{
String num1 = str;
num2 = Integer.parseInt(num1);
}catch(NumberFormatException nfe){
num2 = 111;
}
System.out.println(num1 + ":" + num2);
}
static String num1 = "333";
}
このコードをコンパイル、および実行すると、どのような結果になりますか。
1つ選択してください。
A. 555 : 555
B. 333 : 555
C. 333 : 111
D. コンパイルエラーが発生する
《解説》
変数の宣言についての問題です。
3行目では“555"を引数にfunc()メソッド呼び出しを行っています。
6行目で変数num2 の宣言、8行目では変数num1の宣言を行っています。
ただし、変数は宣言したブロックの中({}の中)のみで使用可能であるため、tryブロックの中で宣言された変数num1 の有効範囲は8~9行目に限られます。
9行目では、変数num1に代入されている"555"をInteger.parseInt()メソッドによりint型へ変換し、 変数num2に代入しています。
13行目で、変数num1とnum2の出力が行われていますが、ここで指定している num1はTest クラス全体が有効範囲の15行目の変数であるため、「333」が出力されま す。また変数num2では、9行目でint型に変換した「555」が出力されます。
したがって、選択肢Bが正解です。
《答え》B