contents memorandum はてな

目次とメモを置いとく場

『パーフェクトJava[改訂2版]』(井上誠一郎, 永井雅人 技術評論社 2014//2009)

著者:井上 誠一郎[いのうえ・せいいちろう] 
著者:永井 雅人[ながい・まさと]
シリーズ:パーフェクト・シリーズ



改訂2版 パーフェクトJava:書籍案内|技術評論社



【目次】
はじめに(2014年9月 井上誠一郎) [003]
目次 [004-014]


  Part1 Java ~ overview


1章 Javaの概要
1-1 Java概論 016
  1-1-1 Javaの特徴
    オブジェクト指向を意識した設計
    静的型づけ
    JVM
    自動メモリ管理
    デザインパターン
    安全さ
  1-1-2 JVM
  1-1-3 Javaの歴史

1-2 Javaプログラミング初歩 018
  1-2-1 本書サンプルコードのスタイル

1-3 設計と抽象化 020



  Part 2 Java 言語基礎


2章 文字と文字列
2-1 文字列とは 022

2-2 文字列の操作 022
  2-2-1 Stringクラス
  2-2-2 Stringクラスの使用例
    文字列の長さ
    文字列処理の典型的なバグ
  2-2-3 文字列リテラル
    文字列のエスケープ処理
    文字列と改行
  2-2-4 StringBuilderクラス
    書き換え可能文字列
    StringBuilderオブジェクトの文字列書き換え
    StringBuilderの注意点
    StringクラスとStringBuilderクラス
    StringオブジェクトとStringBuilderオブジェクトの相互互換
  2-2-5 文字列の結合
    文字列結合の注意と効率
    joinメソッド
  2-2-6 文字列の比較
     文字列比較の注意
     文字列リテラルの同値性
    StringとStringBuilderの同値比較
    StringBuilder同士の同値比較
  2-2-7 文字列の大小比較とソート処理
    compareToメソッド
  2-2-8 数値と文字列の相互変換
    数値から文字列への変換
    10進数以外への変換
    数値の内部表現への変換
    文字列から数値への変換
  COLUMN 文字列の大小関係 037

  2-2-9 toStringメソッド
  2-2-10 文字列の書式処理

2-3 文字 042
  2-3-1 文字とは
  2-3-2 文字リテラル
  2-3-3 文字と文字列
  2-3-4 文字と文字列の変換
  2-3-5 文字とコードポイント

2-4 バイトと文字 046
  2-4-1 バイトとは
    バイト列
  2-4-2バイト列と文字列の変換
    UTF-8 のバイト列


3章 数値
3-1 整数 049
  3-1-1 整数型
  3-1-2 ビット長と値の範囲
    ビットとは
    ビット長と値の範囲
  3-1-3 桁あふれ
  3-1-4 リテラル表記
    基数
  3-1-5 文字と数値
    文字と数値の相互変換
  3-1-6 複数の整数型がある理由
    効率性
    互換性
    文字の扱い
  3-1-7 整数型の使い分けの指針
    byte、char型
    short、int、long型

3-2 整数の演算 057
  3-2-1 四則演算
    桁あふれの回避
  3-2-2 剰余
  3-2-3 符号反転
  3-2-4 インクリメントとデクリメント
  3-2-5 ビット演算

3-3 型变换 060
  3-3-1 拡大変換と縮小変換
  3-3-2 キャスト
    コンパイルエラーになるキャスト
    型変換と符合
    char型との型変換
    演算時の型変換(昇格)
    リテラル値の特別な型変換

3-4 ブーリアン(真偽値) 066
  3-4-1 ブーリアン
    ブーリアンと制御文
  3-4-2 ブーリアン型の注意点
    論理演算の書き換え


4章 変数とオブジェクト
4-1 基本型と参照型 071
  4-1-1 はじめに
  4-1-2 オブジェクトと参照
    オブジェクト
    変数とは
    参照とは
  4-1-3 参照型変数とは
    オブジェクトの操作
    参照型変数の型(暫定的な理解)
    参照型変数の種類【クラス、コレクション、インタフェース】
  4-1-4 基本型変数
  4-1-5 変数の宣言
    参照型変数の宣言
    基本型変数の宣言
    変数のスコープ(暫定的な理解)
  4-1-6 変数の初期化
  4-1-7 変数名に使える文字と規約
    変数の命名規約
  4-1-8 変数の修飾子

4-2 オブジェクト生成と代入 079
  4-2-1 new式によるオブジェクト生成
  4-2-2 参照型変数の代入
    参照の代入の動作
  4-2-3 基本型変数の代入
  4-2-4 メソッド呼び出し時などの代入
  4-2-5 null参照
    nullチェック
  4-2-6 Optional型
    多段のnullチェックのOptional型での書き換え
  4-2-7 変数を介さないオブジェクトの操作

4-3 変数と型 089
  4-3-1 変数型と代入可能オブジェクト
    変数の型とオブジェクトの型の関係
      ・変数の型とオブジェクトの型の規則①
      ・変数の型とオブジェクトの型の規則②
      ・変数の型とオブジェクトの型の規則③
      ・変数の型とオブジェクトの型の規則④

4-4 変数の詳細 092
  4-4-1 変数の種類
  4-4-2 変数のデフォルト初期値
  4-4-3 変数のスコープ
    ローカル変数のスコープ
    ブロックスコープ
    シャドーイング
    パラメータ変数のスコープ
    フィールド変数のスコープ

4-5 オブジェクトの寿命 096

4-6 final変数と不変オブジェクト 096
  4-6-1 参照型のfinal変数
  4-6-2 final変数と不変オブジェクトの動作の違い
  4-6-3 堅牢なプログラムのための工夫


5章 クラス
5-1 クラスとオブジェクト 099
  5-1-1 クラスの概論
  5-1-2 フィールドとメソッド
    フィールドの概要
    メソッドの概要
  5-1-3 オブジェクト
  5-1-4 クラスの役割
  5-1-5 オブジェクト、インスタンス、クラス、型、雛型
    オブジェクトとインスタンス
    Javaのオブジェクト
    型と雛型
    Javaの型
  5-1-6 既存クラスの利用
    オブジェクトを生成
    new式
  5-1-7 オブジェクトのライフサイクル管理とファクトリパターン
    ファクトリパターン
  5-1-8 クラス自体を利用(ユーティリティクラス)
    ユーティリティクラス

5-2 クラス宣言 109
  5-2-1クラスの修飾子
  5-2-2 クラスの構成要素

5-3 フィールド 111
  5-3-1 フィールド宣言
  5-3-2 フィールド変数とフィールドオブジェクト
  5-3-3 フィールド変数の初期化
  5-3-4 フィールド宣言の修飾子
  5-3-5 同一クラス内のフィールド変数のスコープ
  5-3-6 他のクラスからフィールド変数にアクセス
  5-3-7 this参照

5-4 メソッド 115
  5-4-1 メソッド宣言
  5-4-2 メソッド宣言の修飾子
  5-4-3 同一クラス内のメソッドのスコープ
  5-4-4 他のクラスからのメソッド呼び出し
  5-4-5 メソッド呼び出しと引数
    実引数
    仮引数
  5-4-6 ローカル変数とパラメータ変数
    マルチスレッド動作と再起呼び出し
  5-4-7 可変長引数
    可変長引数のからくり
  5-4-8 メソッドの返り値
    メソッド実行の終わり方
  5-4-9 メソッドのオーバーロード
  5-4-10 メソッドのシグネチャ
  5-4-11 再帰呼び出し
    再起処理の理解と注意

5-5 コンストラクタ 125
  5-5-1 コンストラクタの宣言
  5-5-2 コンストラクタの意義
  5-5-3 コンストラクタのオーバーロード
  5-5-4 this呼び出しとsuper呼び出し
  5-5-5 デフォルトコンストラク
  5-5-6 初期化ブロック
  5-5-7 オブジェクト初期化処理の順序

5-6 staticメンバ 131
  5-6-1 クラスメンバ
  5-6-2 クラスフィールド(staticフィールド)
  5-6-3 同一クラス内のクラスフィールド変数のスコープ
  5-6-4 他のクラスからクラスフィールド変数にアクセス
  5-6-5 インスタンスフィールド変数とクラスフィールド変数
  5-6-6 クラスメソッド(staticメソッド)
  5-6-7 他のクラスからクラスメソッドの呼び出し
  5-6-8 クラスメソッドとインスタンスメンバ
  5-6-9 static初期化ブロック
  5-6-10 クラスをオブジェクトのように扱わないこと
    クラスフィールドとクラスメソッドの用途

5-7 継承 139
  5-7-1 継承とは
    複数のクラスの共通処理
    クラスの2種類の継承
    拡張継承と委譲の使い分け
    拡張継承と多態
    コードの再利用と拡張継承
  5-7-2 拡張継承の構文
  5-7-3 フィールド変数の隠蔽
  5-7-4 メソッドのオーバーライド
    @Overrideアノテーション
    クラスメソッドとオーバーライド
  5-7-5 super参照
  5-7-6 継承時のオブジェクト初期化処理の順序
    super呼び出し
  5-7-7 final 257

5-8 抽象クラスと抽象メソッド 148
  5-8-1 テンプレートメソッドパターン
  5-8-2 抽象クラスの意義と拡張継承の現実解

5-9 アクセス制御とカプセル化 150
  5-9-1 アクセス制御の使い分け
    アクセス制御の注意
  5-9-2 カプセル化

5-10 ネストしたクラス 152
  5-10-1 ネストしたクラスとは
  5-10-2 staticなネストしたクラス
    クラスのネストとエンクロージングクラス
    ネストしたクラスのアクセス制御
    ネストしたクラスのアクセス方法
    ネストしたクラスの用途
  5-10-3 内部クラス(非staticなネストしたクラス)
  5-10-4 ローカル内部クラス
  5-10-5 匿名クラス

5-11 クラスの設計 160
  5-11-1 パラメータ化の意識


6章 コレクションと配列

6-1 モノの集まりを扱う 162
  6-1-1 配列とコレクション

6-2 コレクションフレームワーク 163
  6-2-1 コレクション型オブジェクトの生成
  6-2-2 コレクションの具体例
  6-2-3 コレクションの要素の型
  6-2-4 変数の型をインターフェース型にする意味

6-3 リスト 166
  6-3-1 リストの具象クラス
    ArrayListの特徴
    LinkedListの特徴
  6-3-2 ArrayList
  6-3-3 LinkedList
  6-3-4 リストの実装クラスの利用の指針
  6-3-5 リストのサーチ
    ソート済みのリストのサーチ

6-4 マップ 172
  6-4-1 HashMap
    ハッシュ関数
    HashMapの内部動作
    HashMapの性能
    HashMapのコード例
  6-4-2 LinkedHashMap
    LinkedHashMapの内部動作
  6-4-3 TreeMap
    TreeMapの内部動作
    TreeMapの性能
    2分探索木のすべての要素
  6-4-4 マップの実装クラスの利用の指針
  6-4-5 NavigableMap

6-5 セット 181

6-6 スタック、キュー、デック 183

6-7 イテレータ(拡張for構文) 184
  6-7-1 コレクションと繰り返し処理
  6-7-2 拡張for構文
  6-7-3 イテレータ
    イテレータの役目
    イテレータによる抽象化
    マップのイテレータ
  6-7-4 拡張for構文を使えない場合
    順序のあるイテレータ
    イテレーションの一時中断と再開
    イテレーション中に要素を増減する処理の典型的なバグ
    イテレーション中に要素を増減する処理

6-8 コレクションの技法 192
  6-8-1 変更不能コレクション
  6-8-2 Collections クラス
  6-8-3 コレクションの初期化記法
  6-8-4 ソート処理
    比較基準を渡すソート
    並列ソート
  6-8-5 コレクションと歴史的コード

6-9 配列 196
  6-9-1 配列とは
    配列の実例
    参照型配列の要素
    配列のイテレーション
  6-9-2 配列の初期化
  6-9-3 多次元配列
    多次元配列の初期化子
    多次元配列の要素列挙
  6-9-4 配列のコピー
  6-9-5 Arraysクラス
  6-9-6 配列とコレクションの相互変換
    配列からListオブジェクトに変換
    Collectionオブジェクトから配列に変換


7章 インターフェース
7-1 境界の意識と抽象化 205
  7-1-1 境界を意識する重要性
  7-1-2 インターフェースによる抽象化

7-2 インターフェースと多態(ポリモフィズム) 206
  7-2-1 クラスとインターフェースの違い
  7-2-2 インターフェースを継承(実装)
  7-2-3 インターフェース型の変数
    メソッドの引数をインタフェース型にする意義
  7-2-4 多態性
  7-2-5 コードの依存性とインターフェース
  7-2-6 インターフェースと抽象クラス

7-3 インターフェース宣言 213
  7-3-1 インターフェース宣言の文法
  7-3-2 インターフェースの修飾子
  7-3-3 インターフェースのメンバ
    メソッド宣言
    defaultメソッドとstaticメソッドの指針
    インタフェース定数
    メンバのアクセス制御

7-4 インターフェースと実装クラス 217
  7-4-1 インターフェース継承の文法
  7-4-2 メソッドのオーバーライド
  7-4-3 ネストしたインターフェース
  7-4-4 defaultメソッドの明示的な呼び出し
  7-4-5 インターフェース自体の拡張継承
  7-4-6 多重継承
    多重継承でのdefaultメソッド
    多重継承でのインタフェース定数
    コンパイルエラーにならない多重継承

7-5 インターフェースの設計 224
  7-5-1 コールバックパターン
    イベントドリブンコード
    依存方向の意識
  7-5-2 多態性による条件分岐の書き換え(ストラテジパターン)


8章 ラムダ式とストリーム処理
8-1 ラムダという抽象化 231
  8-1-1 挙動パラメータ
  8-1-2 関数型プログラミングの背景
    関数とは
    関数型プログラミングの利点
    Javaで書く関数型コード

8-2 メソッド参照 233
  8-2-1 メソッド参照の文法
    メソッド参照のからくり
  8-2-2 関数型インターフェース
    メソッドの型
    SAM(Single Abstract Method)インタフェース
    @FunctionalInterfaceアノテーション
  8-2-3 メソッド参照の実例
    継承とメソッド参照

8-3 ラムダ式 239
  8-3-1 ラムダ式の具体例
  8-3-2 ラムダ式の文法
  8-3-3 ラムダ式の型
  8-3-4 ラムダ式の詳細
    ラムダ式とthis参照
    ラムダ式とローカル変数
    ラムダ式と変数のスコープ
    ラムダ式クロージャ
    ラムダ式と例外

8-4 java.util.function 245
  8-4-1 標準関数型インターフェース
    標準関数型インターフェースの使用例
    基本型のための標準関数型インターフェース
    演算的な標準関数型インターフェース
    2引数の標準関数型インターフェース
    関数合成
    引数の多い標準関数型インターフェース
    代表的な標準関数型インターフェース

8-5 挙動パラメータの実践 251
  8-5-1 挙動パラメータによる遅延処理
  8-5-2 コレクションのforEachメソッド

8-6 ストリーム処理 253
  8-6-1 ストリーム処理とは
  8-6-2 ストリーム処理の構造
    ストリーム処理の注意
  8-6-3 ストリームの生成
    Streamのファクトリメソッド
    無限ストリーム
  8-6-4 ストリームからコレクションや配列を生成
  8-6-5 Streamインターフェース
    ストリーム処理の実装パターン
    基本型数値ストリーム
    数値ストリームとの相互変換
  8-6-6 並列処理
    並列処理の内部
    オーダー処理とソート処理
  8-6-7 reduce処理
    reduceメソッド
  8-6-8 collect処理
    collect処理の実例
    複数データソースの同時collect処理
  8-6-9 java.util.stream.Collectors
    groupingBy処理とpartitioningBy処理


9章 文、式、演算子
9-1 Javaの文法と文 272
  9-1-1 文とは
    文の定義
  9-1-2 予約語
  9-1-3 識別子
    識別子の現実的な指針
  9-1-4 制御文
  9-1-5ブロック文
  9-1-6 宣言文
    終端のセミコロン
  9-1-7 式文
    式とは
    演算子の働き
    式の具体例
    改めて式とは
    式の評価
    代入式の評価
    いろいろな式
    式文とは
  9-1-8 空文
  9-1-9 空白文字と改行文字

9-2 Java演算子と式 282
  9-2-1 式の評価順序
  9-2-2 演算子の優先順序と結合規則

9-3 数値の演算 283
  9-3-1 算術演算
  9-3-2 インクリメント演算とデクリメント演算
    前置演算子と後置演算子の注意
    左辺値の注意
  9-3-3 ビット演算

9-4 文字列の演算 285
    文字列型変数の規則

9-5 関係演算と等価演算 287
    関係演算子の注意
  9-5-1同一性と同値性
    参照型の比較
    基本型の比較

9-6 論理演算 289
  9-6-1 論理演算の2項演算子
    遅延評価
  9-6-2 否定演算子

9-7 その他の演算 291
  9-7-1 代入演算
  9-7-2 条件演算(3項演算子
  9-7-3 new演算
  9-7-4 キャスト演算
  9-7-5 instanceof演算
    instanceof演算子の目的
  9-7-6 配列要素の参照演算
  9-7-7 フィールドまたはメソッドのアクセス演算
  9-7-8 メソッド呼び出し演算


10章 Javaプログラムの実行と制御構造
10-1 Javaプログラムの実行 295
  10-1-1 プログラムの開始
  10-1-2 プログラムの実行順序
  10-1-3 スタックトレース

10-2 java.lang.System クラス 298

10-3 条件分岐 299
  10-3-1 if-else文
    if-else文の動作
    if節およびelse節に書く文の注意
  10-3-2 if-else文のイディオム
    連続したelse節のイディオム
    定数条件式
  10-3-3 条件演算子(3項演算子
    条件演算子のネスト
    if-else文と条件演算子の比較
    条件演算子の型
  10-3-4 switch-case文
    switch文の動作
    if-else文とswitch文の比較
    文字列のswitch文
    switch文とnull

10-4 繰り返し 309
  10-4-1 while文
    無限ループ
    ループの抜け方
  10-4-2 do-while文
  10-4-3 for文
    for文のイディオム
    ループ変数

10-5 ジャンプ 316
  10-5-1 ループ処理からの脱出
    break文
    continue文
  10-5-2 ラベルを使ったジャンプ



  Part3 Java言語発展


11章 数値② 
11-1 浮動小数点数 320
  11-1-1 浮動小数点数とは
  11-1-2 どの浮動小数点数型を使うべきか
  11-1-3 浮動小数点数の演算
  11-1-4 strictfp
  11-1-5 浮動小数点数の内部表現
  11-1-6 リテラル表記

11-2 数値クラス(数値ラッパークラス) 326
  11-2-1 数値オブジェクトの利用
    booleanクラスの注意点

11-3 ボクシング変換 328
    ボクシング変換の注意
  11-3-1 数値オブジェクトの同値性
    ボクシング変換と同値性判定

11-4 型変換 330
  11-4-1 拡大変換と縮小変換
  11-4-2 数値とboolean値の型変換
  11-4-3 整数と浮動小数点数の型変換
  11-4-4 数値昇格

11-5 ビット演算 332

11-6 BigInteger BigDecimal 332
  11-6-1 BigInteger
  11-6-2 BigDecimal
    BigDecimalの比較


12章 パッケージ
12-1 パッケージとは 335
  12-1-1 パッケージの役割
    名前空間
    意味的なまとまりの管理
    アクセス制御
  12-1-2 パッケージ名
    パッケージ名の管理
    パッケージ名の実際
  12-1-3 パッケージ宣言
  12-1-4 ファイルシステムとの関係

12-2 インポート 339
    import文の内部動作
  12-2-1 2種類のインポート文
  12-2-2 暗黙のインポート
  12-2-3 インポートと名前の衝突
    単純名の名前解決
  12-2-4 staticインポート

12-3 パッケージとアクセス制御 342


13章 列挙型と定数と不変型
13-1 リテラル表記 344

13-2 定数定義 345
  13-2-1 定数定義の使い方
  13-2-2 定数定義の現実的な指針

13-3 enum型 348
  13-3-1 enum W0 151
  13-3-2 enum宣言
  13-3-3 enum定数の値
  13-3-4 enum型の振る舞い
    enum定数の列挙
  13-3-5 enum 定数とswitch文
  13-3-6 EnumSetとEnumMap

13-4 不変型 354
  13-4-1 不変型の実装方法
    不変クラスの注意
  13-4-2 日付ライブラリで学ぶ不変クラスの設計
    日付ライブラリの設計パターン


14章 例外処理
14-1 例外とエラー処理 360
  14-1-1 エラーとは
  14-1-2 エラー処理
  14-1-3 エラー処理の手法
    エラーハンドと例外
  14-1-4 例外によるエラー処理
    例外の利点
  14-1-5 例外の具体例
    検査例外の具体例
    実行時例外の具体例

14-2 例外の捕捉 368
  14-2-1 例外への対応コード
  14-2-2 try文
    try-with-resources文
  14-2-3 catch節
    catch節の引数型
  14-2-4 finally節
  14-2-5 try-with-resources文
    リソースとは
    リソース解放処理
  14-2-6 try文のネスト

14-3 例外の送出 377
  14-3-1 例外送出とメソッド実行中断
  14-3-2 throw文
  14-3-3 演算による例外送出

14-4 検査例外と実行時例外 379
  14-4-1 例外クラス
  14-4-2 検査例外
  14-4-3 実行時例外
  14-4-4 エラー例外
  14-4-5 自作の例外クラス
    スタックトレース

14-5 throws節 382
  14-5-1 throws節とは
    例外の伝播
  14-5-2 メソッドのオーバーライドとthrows節
  14-5-3 ラムダ式と例外

14-6 契約によるデザイン(assert) 385
  14-6-1 assert文
    assert文の利用
    assert文の意義
    メソッドの引数チェックのイディオム

14-7 例外の設計 387
  14-7-1 例外の指針
  14-7-2 独自の例外(アプリケーション例外)
  14-7-3 例外翻訳
    原因例外
  14-7-4 抑制例外
  14-7-5 イディオム化している実行時例外
  14-7-6 フレームワーク例外
    実行時例外の基本的な利用目的
    フレームワークなどで有効に利用できる実行時例外


15章 ジェネリック
15-1 ジェネリック型とは 393
  15-1-1 ジェネリック型の利用例
    ジェネリック型の形式
  15-1-2 ジェネリック型の背景

15-2 ジェネリック型宣言 395
  15-2-1 ジェネリック型宣言の文法
  15-2-2 型変数
    型変数の使える場所
    境界のある型パラメータ
  15-2-3 ジェネリックメソッドとジェネリックコンストラク

15-3 ジェネリック型の利用 401
  15-3-1 パラメータ化された型
    ダイアモンド演算子
    複雑なパラメータ化された型の回避
  15-3-2 ジェネリックメソッドの呼び出し
  15-3-3 型引数のワイルドカード
    ワイルドカードこ動作

15-4 ジェネリック型の設計 404
  15-4-1 雛形としてのジェネリック
    ジェネリック型と多態性
  15-4-2 ジェネリック型への道
  15-4-3 ジェネリック型を使う条件
    入力と出力の関係
  15-4-4 ジェネリック型とパラメータ化


16章 ファイルとネットワーク
16-1 I/Oストリーム処理 410
  16-1-1 JavaのI/O処理の概要
    I/Oストリームと抽象化
  16-1-2 I/Oストリームクラスの概論
    I/Oストリームクラスの例外

16-2 ファイル 412
  16-2-1 バイトI/Oストリーム処理
  16-2-2 標準入出力
    java.io.Consoleクラス
  16-2-3 文字I/0ストリーム処理
  16-2-4 バイトI/Oストリームから文字I/0ストリームへの変換
  16-2-5 バッファリング
    バッファリングI/Oストリーム
    バッファリングの方針
  16-2-6 ランダムアクセス
    FileChannelとファイルポジション
  16-2-7 バイト列1/0ストリーム
  16-2-8 ファイルのバス操作
    java.nio.file.Filesユーティリティクラス
    ファイルの変更監視
  16-2-9 ファイルのStream処理

16-3 ネットワーク(ソケット) 426
  16-3-1 ネットワークプログラミング概論
    ネットワークプログラミングの基本
    サーバとクライアント
    ソケットと4つ組
  16-3-2 クライアント処理
  16-3-3 サーバ処理
  16-3-4 タイムアウト処理
  16-3-5 並行処理サーバ
  16-3-6 java.nioパッケージを使うネットワーク処理


17章 スレッド
17-1 スレッドの利用 437
  17-1-1 スレッドの概要
    マルチスレッドプログラミング
  17-1-2 スレッドが共有するデータ
  17-1-3 スレッド間で共有されないデータ
  17-1-4 マルチスレッドプログラムの鉄則

17-2 スレッド生成 441
  17-2-1 java.lang.Thread クラス
  17-2-2 スレッドとRunnableインターフェース
    Runnableインターフェースとラムダ式
  17-2-3 Threadクラスの拡張とRunnableインターフェースの実装
  17-2-4 スレッドプール
    Callableインターフェース
    FutureとCompletableFuture
    マルチスレッド版並行処理サーバ

17-3 同期処理(排他制御) 453
  17-3-1 synchronizedコード
    モニタロック
  17-3-2 synchronizedメソッド
  17-3-3 synchronized文
    synchronizedメソッドとsynchronized文の比較
  17-3-4 synchronized コードの実例
    synchronizedコードによる修正
    モニタロックを変えてみる
    synchronizedの範囲と実行速度
    同期処理の注意点
    ラッパークラスの注意
  17-3-5 Javaのメモリモデル
    synchronizedコード
    volatile修飾子
  17-3-6 volatile修飾子と同期処理
  17-3-7 明示的なロック
    ReadWriteLock
  17-3-8 アトミック処理
    アトミック処理と実行速度
  17-3-9 通知
    通知処理のコードの構造
    通知処理の具体例
    タスクキューモデル
  17-3-10 デッドロックと検出
    デッドロックの仕組み
    デッドロックの監視
  17-3-11 コレクションの同期処理
    並行コレクション


18章 リフレクション
18-1 リフレクションとは 472
  18-1-1 リフレクションを実現するには
    Classクラス
    Classオブジェクトの生成
    Classオブジェクトの参照

18-2 型情報の取得 477
  18-2-1 型階層の情報

18-3 オブジェクト生成 479

18-4 オブジェクト操作 480
  18-4-1 メソッド呼び出し
  18-4-2 フィールド操作

18-5 リフレクションの応用 482
  18-5-1 JavaBeans
    Beanのプロパティ
  18-5-2 DI (Dependency Injection)
    DIの役割
  18-5-3 クラスローダとホットデプロイ
    クロスローダの役割
    ホットデプロイ
    クラスローダの具体例
  18-5-4 プロクシクラス


19章 アノテーション
19-1 アノテーションとは 490
  19-1-1 アノテーションの書き方
  19-1-2 アノテーションの応用例
    構文補助
    宣言的プログラミング

19-2 標準アノテーション 492
  19-2-1 @Deprecated
  19-2-2 @SuppressWarnings

19-3 アノテーション宣言 494
  19-3-1 アノテーション要素
  19-3-2 メタアノテーション
    Retentionアノテーション
    Targetアノテーション

19-4 アノテーションの適用 498

19-5 アノテーションの応用 500
  19-5-1 プラグイン
  19-5-2 アノテーションPOJO



  Part 4 JavaFX


20章 JavaFX概論
20-1 はじめに 506

20-2 JavaFXの歴史 506

20-3 JavaFXプログラミング初歩 507
  20-3-1 Hello World
  20-3-2 パッケージング


21章 JavaFXとグラフィックス
21-1 レンダリング 509
  21-1-1 グラフィックスシステム
  21-1-2 レンダリングループ

21-2 座標系 510
  21-2-1 デカルト座標
  21-2-2 複数の座標系

21-3 グラフィックスAPI 511
  21-3-1 保持モードと即時モード
  21-3-2 JavaFX Scene Graph
  21-3-3 JavaFX Canvas
  21-3-4 FXML

21-4 プリミティブ 515
  21-4-1 幾何図形
    線分
    ポリライン
    多角形
    矩形
    楕円
    円
    楕円弧
    楕円扇形
    楕円弓形
    カスタム図形
  21-4-2 テキスト
    フォント
    アンチエイリアス
    書字方向
    合字/カーニング
  21-4-3 画像
    読み込みのバックグラウンド化
    ピクセルデータへのアクセス

21-5 幾何変換 522
  21-5-1 基本的な変換
    平行移動
    スケーリング
    回転
  21-5-2 変換の合成
    平行移動
    スケーリング
    回転


22章 JavaFXと対話処理
22-1 イベント 527
  22-1-1 イベントの種類
  22-1-2 イベント処理

22-2 プロパティの監視 530
  22-2-1 Java Beanとプロパティ
  22-2-2 JavaFX Beanとプロパティ
  22-2-3 プロパティの変化と無効化
  22-2-4 プロパティの束縛


23章 JavaFXと並行処理
23-1 マルチスレッド化 541
  23-1-1 GUIとマルチスレッド
  23-1-2 JavaFXのスレッドルール

23-2 JavaFXスレッドユーティリティ 544
  23-2-1 Platform.runLaterメソッド
  23-2-2 Taskクラス
  23-2-3 Serviceクラス


24章 JavaFXユーザインターフェース
24-1 コンポーネント 551
  24-1-1 ウィンドウ
    スタイル
    モーダリティ
    オーナーウィンドウ
  24-1-2 コントロール
    ボタン
    ラジオボタン
    チェックボックス
    ラベル
    テキストフィールド
    テキストエリア
    リスト
    コンボボックス
  24-1-3 メニュー
    ドロップダウンメニュー
    コンテキストメニュー
    アクセラレータ
    ニーモニック

24-2 レイアウト 559
  24-2-1 境界ボックス
  24-2-2 位置決め
    layoutXとlayoutYプロパティ
    relocateメソッド
  24-2-3 サイズ決め
  24-2-4 レイアウトの丸め
  24-2-5 自動レイアウト
    StackPane
    HBox
    VBox
    FlowPane
    TilePane
    GridPane
    AncorPane

24-3 スキンとスタイル 571
  24-3-1 CSSとスタイル
    CSSセレクタとパターンマッチング
    オブジェクト共通スタイル
    特定オブジェクトのスタイル
  24-3-2 スキン
    スキンの実装
    スタイルの指定可能化


索引 [585-590]
おわりに(井上誠一郎 永井雅人) [591]






【メモランダム】


・「ありえるえりあ」より。割愛された部分が公開されている。
国際化プログラミング(書籍「パーフェクトJava」:「国際化」の章の原稿の後半) — ありえるえりあ

 書籍「パーフェクトJava」に掲載予定だった「国際化」の章の原稿の後半です。「パーフェクトJava」にはページ数の関係で掲載しませんでした。〔……〕




【抜き書き】


・仕様・規約について(p.78)。

コーディング規約は正しさに意味があるのではなく統一に意味があります。〔……〕規約が気に入らないからといって独断で規約を破るような人はプログラミングをすべきではありません。


・コラム(p.185)でも教え。

 COLUMN イディオム(決まりごと)を使う価値
 些細なコードは決まりごとに従い頭から追い出すのはプログラミングで重要です。ここにイディオムを使う価値があります。
 イディオムは読み手の余計な負担も減らします。イディオムから外れたコードを書くと、何か特別な意図があると読み手に勘ぐらせる危険があります。逆に言えば、特別な意味がある場合、イディオムから外れたコードを書いて読み手の関心をひけます。



・ 「6章 コレクションと配列」冒頭(p.162)から。

 モノの集まりを1つの対象物とみなして、モノの集まりそのものに対して操作を行う感覚は、プログラミングの上達のために欠かせない感覚の1つです。モノの集まりに対する処理ををきれいに書けると、プログラミングの見通しが良くなります[注1]。

[注1] 私見ですが、オブジェクト指向がわからなくてもそれなりのコード書けますが、モノの集まりに対する操作を意識できなければ、まともなコードが書けるとは思えません。