インスタンス変数の初期化: 宣言とコンストラクター
Java クラスでインスタンス変数を定義する場合、宣言時またはクラス内でインスタンス化する必要があります。コンストラクタ? 2 つのアプローチの利点と違いを詳しく見てみましょう。
バリアント 1: 初期化を伴う宣言
class A { B b = new B(); }
バリアント 2: 初期化を行わない宣言初期化
class A { B b; A() { b = new B(); } }
違いはありません
技術的な観点から見ると、2 つのアプローチの間に実質的な違いはありません。コンパイラは、インスタンス変数の初期化コードを自動的に生成し、クラスのコンストラクターに挿入します。
可読性
宣言時に初期化されるバリアント 1 が一般的に考慮されます。より読みやすくなります。これにより、変数宣言とその初期値の間に明確な関連付けが提供されます。
例外処理
バリアント 2 では、コンストラクター内で初期化が行われ、例外処理が可能になります。インスタンス変数の初期化が失敗した場合、例外がスローされ、オブジェクトは構築されないままになることがあります。バリアント 1 は、この機能を提供しません。
初期化ブロック
宣言とコンストラクターのアプローチに加えて、Java は初期化ブロックの使用もサポートしています。これらのブロックは、コンパイラによってコンストラクターに配置されるコードにも変換されます。
{ a = new A(); }
遅延初期化
パフォーマンスの最適化のために、開発者はオプションを選択できます。遅延初期化用。このアプローチでは、インスタンス変数は最初にアクセスされるまで初期化されません。
ExpensiveObject o; public ExpensiveObject getExpensiveObject() { if (o == null) { o = new ExpensiveObject(); } return o; }
Dependency Injection
依存関係管理を改善するには、クラス内の新しい演算子。代わりに、依存関係のインスタンス化と注入を処理する依存関係注入フレームワークの使用を検討してください。
以上がJava でのインスタンス変数の初期化: 宣言またはコンストラクター?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。