Java言語規定 第2版
目次
0. 標準情報としての導入
- 0.1 適用範囲
- 0.2 定義
1. はしがき
- 1.1 プログラム例
- 1.2 記法
- 1.3 既定義のクラスとインタフェースとの関係
- 1.4 引用規定
2. 文法
- 2.1 文脈自由文法
- 2.2 字句文法
- 2.3 構文文法
- 2.4 文法記法
3. 字句構造
- 3.1 Unicode
- 3.2 字句変換
- 3.3 Unicodeエスケープ
- 3.4 行終端子
- 3.5 入力要素及びトークン
- 3.6 空白類
- 3.7 注釈
- 3.8 識別子
- 3.9 キーワード
- 3.10 リテラル
- 3.10.1 整数リテラル
- 3.10.2 浮動小数点リテラル
- 3.10.3 論理値リテラル
- 3.10.4 文字リテラル
- 3.10.5 文字列リテラル
- 3.10.6 文字及び文字列リテラルのためのエスケープシーケンス
- 3.10.7 空リテラル
- 3.11 分離子
- 3.12 演算子
4. 型,値及び変数
- 4.1 型及び値の種類
- 4.2 プリミティブ型及び値
- 4.2.1 整数的な型及び値
- 4.2.2 整数演算
- 4.2.3 浮動小数点型,フォーマット及び値
- 4.2.4 浮動小数点演算
- 4.2.5 boolean型及び boolean値
- 4.3 参照型及び値
- 4.3.1 オブジェクト
- 4.3.2 クラスObject
- 4.3.3 クラスString
- 4.3.4 参照型の同一条件
- 4.4 型の使用場所
- 4.5 変数
- 4.5.1 プリミティブ型の変数
- 4.5.2 参照型の変数
- 4.5.3 変数の種類
- 4.5.4 final変数
- 4.5.5 変数の初期値
- 4.5.6 型,クラス,及びインタフェース
5. 変換及び昇格
- 5.1 変換の種別
- 5.1.1 恒等変換
- 5.1.2 プリミティブ型の拡大変換
- 5.1.3 プリミティブ型の縮小変換
- 5.1.4 参照型の拡大変換
- 5.1.5 参照型の縮小変換
- 5.1.6 文字列変換
- 5.1.7 禁止される変換
- 5.1.8 値集合変換
- 5.2 代入変換
- 5.3 メソッド呼出し変換
- 5.4 文字列変換
- 5.5 キャスト変換
- 5.6 数値昇格
- 5.6.1 単項数値昇格
- 5.6.2 二項数値昇格
6. 名前
- 6.1 宣言
- 6.2 名前及び識別子
- 6.3 宣言の有効範囲
- 6.3.1 宣言のおおい隠し
- 6.3.2 不明瞭化された宣言
- 6.4 メンバ及び継承
- 6.4.1 パッケージのメンバ
- 6.4.2 クラス型のメンバ
- 6.4.3 インタフェース型のメンバ
- 6.4.4 配列型のメンバ
- 6.5 名前の意味の決定
- 6.5.1 文脈に従った名前の構文上の分類
- 6.5.2 文脈的にあいまいな名前の再分類
- 6.5.3 パッケージ名の意味
- 6.5.3.1 単純パッケージ名
- 6.5.3.2 限定パッケージ名
- 6.5.4 パッケージ又は型名の意味
- 6.5.4.1 単純パッケージ又は型名
- 6.5.4.2 限定パッケージ又は型名
- 6.5.5 型名の意味
- 6.5.5.1 単純型名
- 6.5.5.2 限定型名
- 6.5.6 式名の意味
- 6.5.6.1 単純式名
- 6.5.6.2 限定式名
- 6.5.7 メソッド名の意味
- 6.5.7.1 単純メソッド名
- 6.5.7.2 限定メソッド名
- 6.6 アクセス制御
- 6.6.1 アクセス性の決定
- 6.6.2 protectedアクセスの詳細
- 6.6.2.1 protectedメンバへのアクセス
- 6.6.2.2 protectedコンストラクタへの限定アクセス
- 6.6.3 アクセス制御の例
- 6.6.4 public及び非publicクラスへのアクセスの例
- 6.6.5 フィールド,メソッド及びコンストラクタのデフォルトアクセスの例
- 6.6.6 publicフィールド,メソッド及びコンストラクタの例
- 6.6.7 protectedフィールド,メソッド及びコンストラクタの例
- 6.6.8 privateフィールド,メソッド及びコンストラクタの例
- 6.7 完全限定名及び正準名
- 6.8 名前付け規約
- 6.8.1 パッケージ名
- 6.8.2 クラス及びインタフェース型名
- 6.8.3 メソッド名
- 6.8.4 フィールド名
- 6.8.5 定数名
- 6.8.6 局所変数及び仮引数名
7. パッケージ
- 7.1 パッケージのメンバ
- 7.2 パッケージのホスト支援
- 7.2.1 ファイルシステム内のパッケージの格納
- 7.2.2 データベース内のパッケージの格納
- 7.3 コンパイル単位
- 7.4 パッケージ宣言
- 7.4.1 名前付きパッケージ
- 7.4.2 名前なしパッケージ
- 7.4.3 パッケージの観測可能性
- 7.4.4 パッケージ宣言の有効範囲
- 7.5 インポート宣言
- 7.5.1 単一の型インポート宣言
- 7.5.2 要求時の型インポート宣言
- 7.5.3 自動インポート
- 7.5.4 まれな例
- 7.6 最上位の型宣言
- 7.7 一意なパッケージ名
8. クラス
- 8.1 クラス宣言
- 8.1.1 クラス修飾子
- 8.1.1.1 abstractクラス
- 8.1.1.2 finalクラス
- 8.1.1.3 strictfpクラス
- 8.1.2 内部クラス及び取り囲みインスタンス
- 8.1.3 上位クラス及び下位クラス
- 8.1.4 上位インタフェース
- 8.1.5 クラス本体及びメンバ宣言
- 8.2 クラスのメンバ
- 8.2.1 継承の例
- 8.2.1.1 デフォルトアクセスを伴った継承の例
- 8.2.1.2 public及び protectedを伴った継承
- 8.2.1.3 privateを伴った継承
- 8.2.1.4 アクセス不可能クラスのメンバへのアクセス
- 8.3 フィールド宣言
- 8.3.1 フィールド修飾子
- 8.3.1.1 staticフィールド
- 8.3.1.2 finalフィールド
- 8.3.1.3 transientフィールド
- 8.3.1.4 volatileフィールド
- 8.3.2 フィールドの初期化
- 8.3.2.1 クラス変数用の初期化子
- 8.3.2.2 インスタンス変数用の初期化子
- 8.3.2.3 初期化中のフィールド使用への制限
- 8.3.3 フィールド宣言の例
- 8.3.3.1 例: クラス変数の隠ぺい
- 8.3.3.2 例: インスタンス変数の隠ぺい
- 8.3.3.3 例: 多重に継承されたフィールド
- 8.3.3.4 例: フィールドの再継承
- 8.4 メソッド宣言
- 8.4.1 形式仮引数
- 8.4.2 メソッドのシグネチャ
- 8.4.3 メソッド修飾子
- 8.4.3.1 abstractメソッド
- 8.4.3.2 staticメソッド
- 8.4.3.3 finalメソッド
- 8.4.3.4 nativeメソッド
- 8.4.3.5 strictfpメソッド
- 8.4.3.6 synchronizedメソッド
- 8.4.4 メソッドのthrows節
- 8.4.5 メソッド本体
- 8.4.6 継承,上書き及び隠ぺい
- 8.4.6.1 (インスタンスメソッドによる)上書き
- 8.4.6.2 (クラスメソッドによる)隠ぺい
- 8.4.6.3 上書き及び隠ぺいの要件
- 8.4.6.4 同じシグネチャをもつメソッドの継承
- 8.4.7 オーバロード
- 8.4.8 メソッド宣言の例
- 8.4.8.1 例: 上書き
- 8.4.8.2 例: オーバロード,上書き及び隠ぺい
- 8.4.8.3 例: 不当な上書き
- 8.4.8.4 例: 上書き及び隠ぺい
- 8.4.8.5 例: 隠ぺいされたクラスメソッドの呼出し
- 8.4.8.6 上書きの大きな例
- 8.4.8.7 例: 例外投げ(throw)がひき起こす不正な上書き
- 8.5 メンバ型宣言
- 8.5.1 アクセス修飾子
- 8.5.2 staticメンバ型宣言
- 8.6 インスタンス初期化子
- 8.7 静的初期化子
- 8.8 コンストラクタの宣言
- 8.8.1 形式仮引数
- 8.8.2 コンストラクタのシグネチャ
- 8.8.3 コンストラクタ修飾子
- 8.8.4 コンストラクタのthrows節
- 8.8.5 コンストラクタ本体
- 8.8.5.1 明示的コンストラクタ呼出し
- 8.8.6 コンストラクタのオーバロード
- 8.8.7 デフォルトコンストラクタ
- 8.8.8 クラスのインスタンス化の抑制
9. インタフェース
- 9.1 インタフェース宣言
- 9.1.1 インタフェース修飾子
- 9.1.1.1 abstractインタフェース
- 9.1.1.2 strictfpインタフェース
- 9.1.2 上位インタフェース及び下位インタフェース
- 9.1.3 インタフェース本体及びメンバ宣言
- 9.1.4 インタフェースメンバ名へのアクセス
- 9.2 インタフェースメンバ
- 9.3 フィールド(定数)宣言
- 9.3.1 インタフェース内でのフィールドの初期化
- 9.3.2 フィールド宣言の例
- 9.3.2.1 あいまいな継承フィールド
- 9.3.2.2 多重継承フィールド
- 9.4 抽象メソッド宣言
- 9.4.1 継承及び上書き
- 9.4.2 オーバロード
- 9.4.3 抽象メソッド宣言の例
- 9.4.3.1 例: 上書き
- 9.4.3.2 例: オーバロード
- 9.5 メンバ型宣言
10. 配列
- 10.1 配列型
- 10.2 配列変数
- 10.3 配列生成
- 10.4 配列のアクセス
- 10.5 配列: 簡単な例題
- 10.6 配列初期化子
- 10.7 配列のメンバ
- 10.8 配列に対するオブジェクトClass
- 10.9 非文字列としての文字の配列
- 10.10 配列記憶例外
11. 例外
- 11.1 例外の原因
- 11.2 コンパイル時の例外検査
- 11.2.1 エラーを検査しない理由
- 11.2.2 実行時例外を検査しない理由
- 11.3 例外の取扱い
- 11.3.1 例外の正確性
- 11.3.2 非同期例外処理
- 11.4 例外の例
- 11.5 例外階層
- 11.5.1 ロードエラー及びリンクエラー
- 11.5.2 仮想計算機エラー
12. 実行
- 12.1 仮想計算機の開始
- 12.1.1 クラスTestのロード
- 12.1.2 Testのリンク: 検証,準備及び(オプションの)記号解決
- 12.1.3 Testの初期化: 初期化子の実行
- 12.1.4 Test.mainの呼出し
- 12.2 クラス及びインタフェースのロード
- 12.2.1 ロード処理
- 12.3 クラス及びインタフェースのリンク
- 12.3.1 バイナリ表現の検証
- 12.3.2 クラス又はインタフェース型の準備
- 12.3.3 記号参照の解決
- 12.4 クラス及びインタフェースの初期化
- 12.4.1 初期化の発生時点
- 12.4.2 初期化手続きの詳細
- 12.4.3 初期化: コード生成との関係
- 12.5 新しいクラスインスタンスの生成
- 12.6 クラスインスタンスの終了
- 12.6.1 終了化子の実装
- 12.6.2 終了化子の呼出しの非順序性
- 12.7 クラス及びインタフェースのアンロード
- 12.8 プログラムの抜出し
13. バイナリの互換性
- 13.1 バイナリの形式
- 13.2 バイナリ互換性の有無
- 13.3 パッケージの機能変更
- 13.4 クラスの機能変更
- 13.4.1 abstractクラス
- 13.4.2 finalクラス
- 13.4.3 publicクラス
- 13.4.4 上位クラス及び上位インタフェース
- 13.4.5 クラス本体及びメンバ宣言
- 13.4.6 メンバ及びコンストラクタへのアクセス
- 13.4.7 フィールド宣言
- 13.4.8 finalフィールド及び定数
- 13.4.9 staticフィールド
- 13.4.10 transientフィールド
- 13.4.11 メソッド及びコンストラクタ宣言
- 13.4.12 メソッド及びコンストラクタの仮引数
- 13.4.13 メソッドの結果の型
- 13.4.14 abstractメソッド
- 13.4.15 finalメソッド
- 13.4.16 nativeメソッド
- 13.4.17 staticメソッド
- 13.4.18 synchronizedメソッド
- 13.4.19 メソッド及びコンストラクタのthrows節
- 13.4.20 メソッド及びコンストラクタ本体
- 13.4.21 メソッド及びコンストラクタのオーバロード
- 13.4.22 メソッドの上書き
- 13.4.23 静的初期化子
- 13.5 インタフェースの機能変更
- 13.5.1 publicインタフェース
- 13.5.2 上位インタフェース
- 13.5.3 インタフェースメンバ
- 13.5.4 フィールド宣言
- 13.5.5 abstractメソッド宣言
14. ブロック及び文
- 14.1 文の正常完了及び中途完了
- 14.2 ブロック
- 14.3 局所クラス宣言
- 14.4 局所変数宣言文
- 14.4.1 局所変数の宣言子及び型
- 14.4.2 局所変数宣言の有効範囲
- 14.4.3 局所変数による名前のおおい隠し
- 14.4.4 局所変数宣言の実行
- 14.5 文
- 14.6 空文
- 14.7 ラベル付き文
- 14.8 式文
- 14.9 if文
- 14.9.1 if-then文
- 14.9.2 if-then-else文
- 14.10 switch文
- 14.11 while文
- 14.11.1 中途完了
- 14.12 do文
- 14.12.1 中途完了
- 14.12.2 do文の例
- 14.13 for文
- 14.13.1 for文の初期化
- 14.13.2 for文の繰返し
- 14.13.3 for文の中途完了
- 14.14 break文
- 14.15 continue文
- 14.16 return文
- 14.17 throw文
- 14.18 synchronized文
- 14.19 try文
- 14.19.1 try-catchの実行
- 14.19.2 try-catch-finallyの実行
- 14.20 到達不能文
15. 式
- 15.1 評価,表示及び結果
- 15.2 値としての変数
- 15.3 式の型
- 15.4 FP厳密式
- 15.5 式及び実行時検査
- 15.6 評価の正常完了及び中途完了
- 15.7 評価順序
- 15.7.1 左辺オペランドを最初に評価
- 15.7.2 演算前にオペランド評価
- 15.7.3 括弧及び優先順位に従う評価
- 15.7.4 引数リストにおける左から右への評価
- 15.7.5 他の式の評価順序
- 15.8 一次式
- 15.8.1 字句リテラル
- 15.8.2 クラスリテラル
- 15.8.3 this
- 15.8.4 限定this
- 15.8.5 括弧で括った式
- 15.9 クラスインスタンス生成式
- 15.9.1 インスタンス化されるクラスの決定
- 15.9.2 取囲みインスタンスの決定
- 15.9.3 コンストラクタと引数の選択
- 15.9.4 クラスインスタンス生成式の実行時評価
- 15.9.5 匿名クラス宣言
- 15.9.5.1 匿名コンストラクタ
- 15.9.6 例: 評価順序及びメモリ不足の検出
- 15.10 配列生成式
- 15.10.1 配列生成式の実行時評価
- 15.10.2 例: 配列生成評価順序
- 15.10.3 例: 配列生成及びメモリ不足の検出
- 15.11 フィールドアクセス式
- 15.11.1 一次式によるフィールドアクセス
- 15.11.2 superによる上位クラスメンバのアクセス
- 15.12 メソッド呼出し式
- 15.12.1 コンパイルの段階1: 探索すべきクラス又はインタフェースの決定
- 15.12.2 コンパイルの段階2: メソッドシグネチャの決定
- 15.12.2.1 適用可能及び参照可能なメソッドの検索
- 15.12.2.2 最も特殊なメソッドの選択
- 15.12.2.3 例: オーバロードのあいまいさ
- 15.12.2.4 例: 返却値の型の無視
- 15.12.2.5 例: コンパイル時の解決
- 15.12.3 コンパイルの段階3: 選ばれたメソッドの適切性
- 15.12.4 メソッド呼出しの実行時評価
- 15.12.4.1 ターゲット参照の計算(必要な場合)
- 15.12.4.2 実引数の評価
- 15.12.4.3 型及びメソッドのアクセス可能性の検査
- 15.12.4.4 呼出しメソッドの検索
- 15.12.4.5 フレームの生成,同期及び制御の移行
- 15.12.4.6 例: ターゲット参照及び静的メソッド
- 15.12.4.7 例: 評価の順序
- 15.12.4.8 例: 上書き
- 15.12.4.9 例: superを用いたメソッド呼出し
- 15.13 配列アクセス式
- 15.13.1 配列アクセスの実行時評価
- 15.13.2 例: 配列アクセス評価順序
- 15.14 後置式
- 15.14.1 後置増分演算子 ++
- 15.14.2 後置減分演算子 --
- 15.15 単項演算子
- 15.15.1 前置増分演算子 ++
- 15.15.2 前置減分演算子 --
- 15.15.3 単項プラス演算子 +
- 15.15.4 単項マイナス演算子 -
- 15.15.5 ビット単位の補数演算子 ~
- 15.15.6 論理的な補数演算子 !
- 15.16 キャスト式
- 15.17 乗除演算子
- 15.17.1 乗算演算子 *
- 15.17.2 除算演算子 /
- 15.17.3 剰余演算子 %
- 15.18 加減演算子
- 15.18.1 文字列連結演算子 +
- 15.18.1.1 文字列変換
- 15.18.1.2 文字列連結の最適化
- 15.18.1.3 文字列連結の例
- 15.18.2 数値型加減演算子 ( +及び - )
- 15.19 シフト演算子
- 15.20 関係演算子
- 15.20.1 数値比較演算子 <, <=, >, 及び >=
- 15.20.2 型比較演算子 instanceof
- 15.21 等価演算子
- 15.21.1 数値等価演算子 == 及び !=
- 15.21.2 論理型等価演算子 == 及び !=
- 15.21.3 参照型等価演算子 == 及び !=
- 15.22 ビット単位及び論理演算子
- 15.22.1 整数値ビット単位演算子 &, ^, 及び |
- 15.22.2 論理型論理演算子 &, ^, 及び |
- 15.23 条件AND演算子 &&
- 15.24 条件OR演算子 ||
- 15.25 条件演算子 ? :
- 15.26 代入演算子
- 15.26.1 単純代入演算子 =
- 15.26.2 複合代入演算子
- 15.27 式
- 15.28 定数式
16. 確実な代入
- 16.1 確実な代入及び式
- 16.1.1 論理定数式
- 16.1.2 論理演算子 &&
- 16.1.3 論理演算子 ||
- 16.1.4 論理演算子 !
- 16.1.5 論理演算子 ? :
- 16.1.6 条件演算子 ? :
- 16.1.7 代入式
- 16.1.8 演算子++及び--
- 16.1.9 他の式
- 16.2 確実な代入及び文
- 16.2.1 空文
- 16.2.2 ブロック
- 16.2.3 局所クラス宣言文
- 16.2.4 局所変数宣言文
- 16.2.5 ラベル付き文
- 16.2.6 式文
- 16.2.7 if文
- 16.2.8 switch文
- 16.2.9 while文
- 16.2.10 do文
- 16.2.11 for文
- 16.2.11.1 初期化部
- 16.2.11.2 増分部
- 16.2.12 break, continue, return, 及びthrow文
- 16.2.13 synchronized文
- 16.2.14 try文
- 16.3 確実な代入及び仮引数
- 16.4 確実な代入及び配列初期化子
- 16.5 確実な代入及び匿名クラス
- 16.6 確実な代入及びメンバの型
- 16.7 確実な代入及び静的初期化子
- 16.8 確実な代入,コンストラクタ,及びインスタンス初期化子
17. スレッド及びロック
- 17.1 用語及び枠組み
- 17.2 実行順序
- 17.3 変数についての規則
- 17.4 double及びlong の非アトム的取扱い
- 17.5 ロックについての規則
- 17.6 ロック及び変数の相互作用についての規則
- 17.7 volatile宣言された変数の規則
- 17.8 予測される記憶動作
- 17.9 議論
- 17.10 例: 実行可能なスワップ
- 17.11 例: 無秩序書込み
- 17.12 スレッド
- 17.13 ロック及び同期
- 17.14 待機集合及び通知
18. 構文
- 18.1 Javaプログラム言語の文法
索引
解説