Javaマスターへの道 資格勉強編 Part14
みなさん今日知った情報によるとJavaシルバーに合格するには、約60時間勉強すれば大丈夫らしいので
このブログでの勉強をを毎日30分するとしたら、
なんと4か月で合格できる計算ですので是非勉強していってくださいね
さて今日の問題はこちらです。
このプログラムを実行するとどうなるでしょうか。
public class Sub {
private var value;
public Sub(var value) {
this.value = value;
}
public void test() {
System.out.println(value);
}
}
public class Main {
public static void main(String[] args) {
Sub s = new Sub(“hello”);
s.test();
}
}
選択肢は3つです。
1,コンパイルエラー
2,実行時例外をスロー
3,「hello」が出力される
さてこの中のどれが答えでしょうか
・・・ハイ解答いきます(笑)
まずSubクラスからみていきましょう、Subクラスにはインスタンス変数valueが
アクセス修飾子privateで宣言されています。
privateは自クラスからしか中身が変更できないので、インスタンス毎に値を保存する際によく使われます。
そしてコンストラクタがあり先ほどの変数valueに値を格納する処理となっています。
つまり他クラスでSubクラスを呼ぶときはコンストラクタを必ず使って値を格納しろということですね
では次のtest()は格納されたvalueを出力するということですね。
次はMainクラスを見ていきます。
とてもシンプルですね、Subクラスのインスタンスを生成していますが
コンストラクタで引数に”hello”がありますので
変数sのvalueに”hello”が格納されて、その下のtest()メソッドで出力されて終了となりそうなのですが、
引っ掛けですのでご注意を。
どこが引っ掛けだったかというと、Subクラスでのインスタンス変数宣言時にvarを使っていますよね。
実はvarはインスタンス変数での宣言時に使えないのです。なのでその時点でコンパイルエラーとなりますので
答えとしては1となります。意外にかもしれませんがしっかり覚えていきましょう。