[解決済み】Javaでコンストラクタは例外を投げることができますか?
2022-04-05 11:19:35
質問
コンストラクタは例外を投げることができますか?
どのように解決するのですか?
はい、コンストラクタは例外を投げることができます。通常、これは新しいオブジェクトが直ちにガベージコレクションの対象となることを意味します(もちろん、しばらくは回収されないかもしれませんが)。しかし、コンストラクタの早い段階で自身を可視化した場合、quot; half-constructed" オブジェクトを残しておくことができます(静的フィールドを割り当てたり、コレクションに自身を追加したりなど)。
呼び出し元は (通常) 新しいオブジェクトを使用することができないため、コンストラクタでは、管理されていないリソース (ファイル ハンドルなど) を取得した後、それらを解放せずに例外をスローしないように注意する必要があります。たとえば、コンストラクタで
FileInputStream
と
FileOutputStream
が成功し、2つ目が失敗した場合、最初のストリームを閉じるようにしなければなりません。もちろん、例外をスローするのがサブクラスのコンストラクタであれば、これは難しくなります...すべてが少しトリッキーになります。あまり頻繁に起こる問題ではありませんが、検討する価値はあるでしょう。
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] Maven: assembly-pluginが全く実行されない
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.sql.SQLException: ORA-00933: SQL コマンドが正しく終了していません。
-
[解決済み] Eclipse デフォルトのフォント名
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] javax.naming.NameNotFoundException
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] java swingアプリケーションでJCEがプロバイダBCを認証できない