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