質問: "value:" + num; public void aaa(){ System.out.println(str); } } ``` Testクラスインスタンス生成時に、引数として「5」を渡した場合、 aaa()の出力結果で、「value:5」と出てほしいのですが、現在は「value:0」となってしまいます。 解決方法の分かる方がいましたら、ご教授をお願い致します。
回答: 初期化子やコンストラクタの実行タイミング は、まずクラスロード時点でstatic変数の初期化が実行され、その後にコンストラクタによるインスタンス生成が行われます。 `str`変数が1度作成されると、その後に`num`の値を変更しても`str`の値は変わりません。 例えば以下の対応方法が考えられます。 ``` //方法1. numと一緒にstrも初期化 public Test(int value) { num = value; str = "value:" + num; } //方法2. numを設定するメソッドを作ってnumと一緒にstrも初期化 public Test(int value) { setNum(value); } private setNum(int value) { num = value; str = "value:" + num; } //方法3. numもstatic変数にして、動的にstrを生成するためのgetStrメソッドを作る private static int num; private static String getStr() { return "value:" + num; //この方法ならインスタンス初期化時に更新されたnumが反映される } ```