【ポケット】1.宣言、初期化、スコープ 2011 年 11 月 24 日

1.以下のプログラムの実行結果として、正しいものを選びなさい。(1つ選択)

JAVA
public class Main {
	public static void main(String[] args) {
		Sample.num = 10;
		Sample s1 = new Sample();
		Sample s2 = new Sample();
		s2.num = 5;
		System.out.println(s1.num + s2.num);
	}
}

class Sample {
	public static int num = 2;
}

A.7が表示される
B.10が表示される
C.15が表示される
D.20が表示される

・static変数は、すべてのインスタンスで共有される
・static変数にアクセスするには、「クラス名.フィールド名」の書式で記述する
・インスタンスを生成してインスタンス変数経由でアクセスすることも可能
解答:B

2.以下のプログラムの実行結果として、正しいものを選びなさい。(1つ選択)

JAVA
public class Main {
	private static int num = 10;

	public static void main(String[] args) {
		Main main = new Main();
		main.num = 20;
		main.boo();
	}

	private static void boo() {
		System.out.println(this.num);
	}
}

A.10が表示される
B.20が表示される
C.4行目でコンパイルエラーが発生する
D.5行目でコンパイルエラーが発生する
E.9行目でコンパイルエラーが発生する
F.実行時に例外がスローされる

・staticメソッドからはstatic変数もしくはstaticメソッドにしかアクセスできない
・インスタンスがなくても動作するstaticメソッド内では、インスタンスそのものを表すthisキーワードを使えない
解答:E

3.以下のプログラムの実行結果として、正しいものを選びなさい。(1つ選択)

JAVA
public interface Sample {
	public final static int NUM = 10;
}

public class SampleImpl implements Sample {
}

import static Sample.NUM;
import static SampleImpl.NUM;

public class Main {
	private static int NUM = 20;
	public static void main(String[] args) {
		System.out.println(NUM);
	}
}

A.10が表示される
B.20が表示される
C.コンパイルエラーが発生する
D.実行時に例外がスローされる

・staticインポートでは、同名のstatic変数を同時にインポートできない
・staticインポートよりもそのクラスに定義されたstatic変数が優先される

解答:B

関連する記事:

Leave a Reply