Javaの認定資格「Oracle Certified Java Programmer, Gold SE 7」。通称JavaGoldのオリジナル問題を紹介していきたいと思います。
前回の解答
まずは、前回の解答から。
正解は「(5)」となります。
static変数とインスタンス変数に対して同じクラス内からアクセスする際には以下のルールを押さえておきましょう。
staticメソッドからクラス内で定義したインスタンス変数へはアクセスできない
staticメソッドはそのクラスからオブジェクトを生成(インスタンス化)していなくても実行することのできるメソッドです。一方インスタンス変数はオブジェクトが生成されて初めて使うことのできる変数です。
オブジェクトを自動車、クラスをその自動車の設計図とすると、インスタンス変数は自動車の「車体の色」などと考えることができます。クラス(設計図)からオブジェクト(自動車)が生成されていないのに、存在しない自動車の「車体の色」を変更することができないことと同じです。
ただし、上記のルールには例外が1つ存在します。以下のコードをみてください。
class Sample11{ int i; static double d; int m1(){ return i; } double m2(){ return d; } static int m3(){ // return i; Sample11 s = new Sample11(); return s.i; } static double m4(){ return d; } }
m3()メソッドの中で自分自身(Sample11クラス)をインスタンス化しています。このようにすればstaticメソッド内部からでもインスタンス変数にアクセスすることが可能です。
問12
次のプログラムを実行するとコンソールに7行の文字列が出力されます。選択肢を正しい順番に並び替えてください。同じ選択肢を何度使用しても構いません。
package techpjin; public class Lesson12 { public static void main(String[] args) { System.out.println("start."); SubClass12 s1 = new SubClass12(); SubClass12 s2 = new SubClass12(); } } class SuperClass12{ static { System.out.println("SuperClass : static initializer called."); } SuperClass12() { System.out.println("SuperClass : constructor called."); } } class SubClass12 extends SuperClass12{ static { System.out.println("SubClass : static initializer called."); } SubClass12() { System.out.println("SubClass : constructor called."); } }
- SuperClass : static initializer called.
- SuperClass : constructor called.
- SubClass : static initializer called.
- SubClass : constructor called.
- start.
問12の解答・解説と問13はこちら