2016-07-28 2 views
0

JAVAの世界では、フィールド変数は初期化しないとデフォルト値を持ちますが、ローカル変数は初期値を持ちません。JAVAデフォルト値の設計理由

私はたくさんのことを考えて、多くを検索しましたが、私はまだ理解しません。なぜJAVAの世界のデザインはそれを好きですか?ちなみに、ヒープとスタックとは関係があると思います。

+1

[Jon Skeetの答え](http://stackoverflow.com/a/1560704/3788176)を参照してください。 –

+0

@AndyTurnerあなたはそこにリンクを張っていいですか?私はほぼそれぞれのために、ここで良い質問/答え、1つの答えはジョンから来た;-) – GhostCat

答えて

1

ローカル変数は、コードパスを決定できるときに、変数が比較的限定された範囲で常に初期化されることを確認する方がはるかに簡単です。それは必ずしも正しいとは限りませんが、コードが混乱しない限り良い仕事をします。

finalフィールドも初期化する必要があります。あるコンストラクタが別のコンストラクタを呼び出すと、混乱することがあります。

フィールドが最終的でない場合、すべての可能なコードパスに使用される前にフィールドが初期化されていることを確認することは非常に困難です。例えばこれらの呼び出しが将来変更される可能性のある別のクラスから行われた場合は、の前に常にsetterが呼び出されることを確実にすることができます。

代わりに、JVMはデフォルト値を残しておき、心配することになります。

0

私の意見では、とても良いデザインです。 コンパイラは、プログラマが間違いを犯していないかどうかを確認しようとしています。ローカル変数は、予期しない問題を避けるために手動で初期化する必要があります。これは、通常、追加の計算やアクションを実行するために使用されるため、デフォルト値では将来このようなバグを追跡することは非常に困難です。ローカル変数を適切に初期化し、短いコードブロックで使用するのはプログラマの責任です。

関連する問題