1-11 main()メソッド

次のコードを確認してください。

class MainSample {
    public static void main(String args) {
        System.out.println("foo");
    }
    public static void main(char[] args) {
        System.out.println("bar");
    }
    public static void main(String[] test) {
        System.out.println("baz");
    }
}

ここのコードをコンパイル、および実行すると、どのような結果になりますか。

1つ選択してください。

A.foo

B.bar

C.baz

D.コンパイルエラーが発生する

E.実行時エラーが発生する

《解説》

 

《答え》

1-09 main()メソッド

main()メソッドとして実行可能なものはどれですか。1つ選択してください。

A.static void public main(String argsv) { }

B.void static public main(String args) { }

C.static public void main(Object args){ }

D.public static void main(String args){ }

E.static public void main(String argv) { }

《解説》

 

《答え》

1-8 main()メソッドの問題 

次のコードを確認してください。

class MainTest {
        void main() {
            System.out.println("A");
        }
        static void main(String args) {
            System.out.println("B");
        }
        public static void main(String[] args) {
            System.out.println("C");
        }
        void main(Object[] args) {
            System.out.println("D");
        }
}

このコードをコンパイル、および実行すると、どのような結果になりますか。

1つ選択してください。

A.A

B.B

C.C

D.D

E.コンパイルエラーが発生する

《解説》

main() メソッドについての問題です。

main()メソッドはjavaアプリケーション実行時にJVM(Java Virtual Machine)によって呼び出されるメソッドです。

JVMjavaコマンドで実行する際にクラス名を指定すると、main() メソッドを呼び出して処理を開始します。

Javaアプリケーションには必ず1つのmain()メソッドが定義されている必要があり、 以下のように宣言する必要があります。

public static void main(String[] args){
   // 処理
} 

main()メソッドの引数は、String配列型で宣言する必要があります。

ただし、配列名の argsは任意の名称に変更可能です。

2行目、5行目、11行目のmain()メソッドは、メソッドの定義としては正しい構文のためコンパイルは成功しますが、javaコマンド実行時に呼び出されるmain()メソッドとしては動作しません。

8行目のmain()メソッドが、構文に従った正しい記述のため javaコマンド実行時に呼び出されます。

したがって、実行結果は「C」 と出力されるため、選択肢Cが正解です。

《答え》C

1-7 インスタンス変数の問題

次のコードを確認してください。

class InstanceVariable{
    int num1;
    static int num2;
    public static void main(String[] args){
        new InstanceVariable().foo();
    }
    void foo(){
        int num3 = 3;
        bar();
        System.out.print(num3);
    }
    void bar(){
        int num4 = 8;
        System.out.print(num4);
        for(int num5 = 0; num5 < 10; num5++){
            System.out.print(num5);
            System.out.print(num4);
        }
    }
}

このコードでインスタンス変数にあたるものはどれですか。

1つ選択してください。

A.num1

B.num2

C.num3

D.num4

E.num5

《解説》

インスタンス変数についての問題です。

インスタンス変数とはクラスから生成した各オブジェクトが保持する変数で、クラス内 (メソッドの外側)で宣言します。

各選択肢の解説は、 以下のとおりです。

選択肢A

2行目で宣言されている変数num1は、InstanceVariableクラス内(メソッドに属さない)で定義されているためインスタンス変数です。したがって、正解です。

選択肢B

3行目で宣言されている変数num2は、static修飾子が指定されているため、static変数です。static変数は、各オブジェクトが保持する変数ではなく、クラスが保持する変数です。したがって、不正解です。

選択肢C、D、E

8行目、13行目、15行目で宣言されている変数num3、変数num4、変数num5はブロック内で定義されるローカル変数です。ローカル変数は、それぞれ定義されたブロック内 (foo()メソッド、bar()メソッド、forブロック)でのみ使用できます。したがって、不正解です。

《答え》

1-6 インスタンス化の問題

次のコードを確認してください。

class Employee{
    private String name;

    public void setNmae(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }
}

EmployeeクラスからEmployeeオブジェクトを生成するコードはどれですか。

1つ選択してください。

A. Employee emp;

B. Employee emp = Employee();

C. Employee emp = new Employee();

D. Employee emp = Employee() new;

E. Employee emp = new emp:

《解説》

インスタンスについての問題です。

インスタンス化とは、オブジェクト指向プログラミングにおいて、クラスをもとにオブジェクト(インスタンス)を生成することです。

インスタンス化の構文は、以下のとおりです。

構文

クラス名 参照変数名 = new クラス名(); 

各選択肢の解説は、 以下のとおりです。

選択肢A

Employeeクラス型の参照変数emp宣言のみ行っているため、オブジェクトは生成されていません。したがって、不正解です。

選択肢B、D、E

誤った構文のため、コンパイルエラーが発生します。したがって、不正解です。

選択肢C

インスタンス化の構文に従ってオブジェクトを生成しているため、正解です。

《答え》C

1-5 クラスの修飾子の問題

クラスの修飾子として不適切なものはどれですか。1つ選択してください。

A. public C. E. final B. static D. 《解説》

A.public

B.static

C.abstract

D.synchronized

E.final

《解説》

クラスの修飾子についての問題です。 各選択肢の解説は、 以下のとおりです。

選択肢A

クラスにpublic修飾子を指定すると、すべてのパッケージ内のクラスから利用可 能なクラスとして定義できます。したがって、不正解です。

選択肢B

クラスにstatic修飾子を指定すると、あるクラスの内部に staticなメンバクラスを 定義できます。したがって、 不正解です。

選択肢C

クラスにabstract修飾子を指定すると、抽象クラスを定義できます。抽象クラスはインスタンス化できず、サブクラスを定義するためのスーパークラスとして利用します。したがって、不正解です。

選択肢D

クラスにsynchronized修飾子を指定することはできません。synchronized修飾子は、メソッドやブロックを修飾し、メソッドやブロックの処理中はオブジェクトをロックします。したがって、正解です。

選択肢E

クラスにfinal修飾子を指定すると、そのクラスをもとにしたサブクラスを定義できなくなります。クラスの拡張を行わない場合に指定します。したがって、不正解です。

《答え》D