このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

目次

コンストラクタ

  • Javaではコンストラクタがsynchronized宣言されることを許していない。
    • コンストラクタ宣言部にsynchronizedキーワードがあるとコンパイルエラーになる。
    • なぜなら同じコンストラクタを呼び出す2つのスレッドは、同じクラスの2つの異なるインスタンスについて、別々のメモリ上操作を行うからである。コンストラクタが相互共有リソースを競い合うコードを含むような場合は、衝突を避けるためにはそのリソースを同期化しなければならない。

コンストラクタからのエラー報告

  1. 2段階の生成を行う方法
    • エラーを発生する可能性のあるコードをコンストラクタの外に出しておき、リターンコードが使用できるメソッドに入れるという方法である。
    • 欠点としては、そのクラスのユーザがコンストラクタを呼び出して、そおからエラーを発生する可能性のあるメソッドを呼び出し、最後にリターンコードをチェックするか、または例外を捕らえる必要があることである。
  2. 生成されたオブジェクトの内部フラグを使う方法
    • この内部フラグは生成された後のオブジェクトの有効性を表現するものである。
    • この内部フラグの使用方法は2通りある。
      • 1つ目はオブジェクトのユーザが有効性をチェックするためのメソッドを呼び出す方法である。もし、オブジェクトが無効であればオブジェクトの生成に失敗したと判断すればよい。
      • 2つ目はオブジェクトの各メソッドが最初にこのメソッドを呼び出して有効性を判断するという方法である。もしオブジェクトが無効であれば例外を返せばよい。
  3. コンストラクタが例外をスローする方法
    • このアプローチが最もスマート。
    • コンストラクタはメソッドではないが、例外を生成しthrows文節をサポートすることができる。