torutkのブログ

ソフトウェア・エンジニアのブログ

Java読書会ズームインJava「Java魂」#2のレジュメ

毎月開催しているJava読書会において、朝の開始前1時間の枠で「ズームインJava」を実施しています。先月からはズームインJavaではこの本が課題となっています。

Java魂―プログラミングを極める匠の技

Java魂―プログラミングを極める匠の技

今月のJava読書会は明日開催です。「ズームインJava」では1時間しかないので、普通に本を読んでいてはちっとも進まないので、今回はレジュメを作成してみました。

1.2.4.3 ラベル
    break文、continue文で使用する。 <この節、コード及び説明に大量のエラッタ有り>
        continue文のラベルは、for, while, do文に付いたもののみ有効
    「ラベルは原則的には使用しないことを推奨」

1.2.5 assert
  2つの形式あり。
        assert(args.length > 0);
        assert(args.length > 0) : "引数の数が0です。";
    アサーションか例外か?
    チェックコードの処理がオーバーヘッドに。アサーションなら無効にできる(性能向上)
  1.2.5.2 アサーションを使う基準を提示
    ほぼSunの提唱する内容といっしょ
    ※検査例外は業界では異論が多い
      IBM developerWorksの記事「Javaの理論と実践:例外をめぐる議論」
      Bluce Eckelの記事 "Does Java need Checked Exception ?"
  1.2.5.3 開発・テスト時はアサーションを有効にする。運用時は初期は有効に、エラーが取れてきたら無効に

1.2.6 コンストラクタの連結
  パラメータのバリエーションが複数あるコンストラクタで、コードの冗長記述を防ぐイディオムを紹介
  コンストラクタの中でthis()を使って処理を一元化
    thisは最初の行でのみ使用可、複雑な引数の設定はヘルパメソッドを使うとよい

1.2.7 初期化
  インスタンス・フィールドの宣言行での初期化
    ※p.29の例は初めて見た!
  クラス・フィールドの初期化
    初期化子の処理は記述順番に行う・・・「不正な順方向参照」バグ

1.3 アクセス関連の問題
  1.3.1 属性はprivate、公開メソッドはpublic、ヘルパメソッドはprotectedにする。派生して再利用を可能にするため
  1.3.2 フレンドインスタンス(同じクラスの異なるインスタンス)は、無制限でアクセスできてしまう
    フレンドインスタンスのフィールドは、設定メソッドを介して変更する
    自分自身のフィールドも、設定メソッドを介して変更すべし

1.4 よくある間違い
  1.4.1 常にコンソール(System.out)があるとは限らない
    printStackTrace()だけでなく、例外を再スローし、例外連鎖を使おう
    ロギングを使うとよい
  1.4.2 System.exitは危険、使うな。どうしても使うならmainメソッドの中に限定。
  1.4.3 if文、switch文、デフォルト実行は止めて、条件分岐にきちんと条件を示す。最後のelse、default句では、エラー(assert)を発行する