評価 0 定数について 有限会社ナレッジデザインのオラクル認定資格教科書『JavaプログラマSilver SE8』p.193 練習問題5-2について、解説を読みましたがよくわからなかったため質問させていただきます。 1. public class Test{ 2. final int a; 3. Test(int b){a = b;} 4. void method(int c){a = c;} 5. public static void main(String[] args){ 6. Test t = new Test(10); 7. t.method(20); 8. System.out.println(t.a); 9. }10. }上記のコードで2行目の変数aがfinalで修飾されているため定数になっていることはわかりました。そして3行目で変数bを定数aに代入しようとしているためコンパイルエラーとなると判断しました。しかし、解説では「このコードでは宣言時に初期化していませんが、コンストラクタを使用して初期化しているため問題ありません。4行目のmethod()によって値の変更を行おうとしているため、4行目でコンパイルエラーとなります」となっていました。なぜ、3行目ではコンパイルエラーとならないのでしょうか?回答よろしくお願いいたします。 2件の回答 評価 0 ある本で分からないことは、別の本なりWebなりで調べるんだよ。特定のものに縛られてはいけない。今回の話は、シンプルな理解から来る混乱だ。3行目が「コンストラクタ」であることは、理解できているのだろうか。コンストラクタは広義にはメソッドの1つと捉えられることもあるが、その実全く意味が異なるものだ。 評価 0 finalで定義された変数は一定義につき一回しか値を入力してはならない二行目のfinal変数は値が宣言された時点では値が入力されていないよって一度だけ値が入力できるこのオブジェクト内のメソッドでこの変数に値を代入するようにするとメソッド呼び出し(潜在的に複数回できる)のたびに値が入力されてしまうなのでそのようなメソッドを作るとエラーが出る三行目は「コンストラクタ」このオブジェクトがnewされて新しく作られ呼び出された時その一回だけ呼び出されるよって値が入っていないfinal変数に値を「コンストラクタ」内にて「一回」だけ入力してやる事は可能でエラーは出ない 質問から6ヶ月以上経過しているので、回答を書き込むことはできません。 質問一覧にもどる
評価 0 ある本で分からないことは、別の本なりWebなりで調べるんだよ。特定のものに縛られてはいけない。今回の話は、シンプルな理解から来る混乱だ。3行目が「コンストラクタ」であることは、理解できているのだろうか。コンストラクタは広義にはメソッドの1つと捉えられることもあるが、その実全く意味が異なるものだ。
評価 0 finalで定義された変数は一定義につき一回しか値を入力してはならない二行目のfinal変数は値が宣言された時点では値が入力されていないよって一度だけ値が入力できるこのオブジェクト内のメソッドでこの変数に値を代入するようにするとメソッド呼び出し(潜在的に複数回できる)のたびに値が入力されてしまうなのでそのようなメソッドを作るとエラーが出る三行目は「コンストラクタ」このオブジェクトがnewされて新しく作られ呼び出された時その一回だけ呼び出されるよって値が入っていないfinal変数に値を「コンストラクタ」内にて「一回」だけ入力してやる事は可能でエラーは出ない