「標準教科書」がJava 21対応の最新版で登場!
初心者がJava言語を学ぶにふさわしい解説書。Javaの基本的な知識・概念・機能はもちろん、文法、プログラムの書き方を豊富なサンプルプログラムとともに、詳細かつ丁寧に解説。プログラミングの基礎知識がない方でも、解説→例題(サンプル)→理解度チェックという3つのステップで、Javaの文法を完全習得。初学者から、再入門者、学生・ホビープログラマまでおすすめの一冊。更新履歴
- 正誤訂正:2025年9月23日 更新
目次
- 第1章 イントロダクション
- 第2章 Javaの基本
- 2.1 変数
- 2.1.1 変数の宣言
- 2.1.2 識別子の命名規則
- 2.1.3 よりよい識別子のためのルール
- 2.1.4 定数
- 2.2 データ型
- 2.2.1 データ型の分類
- 2.2.2 基本型の種類
- 2.2.3 整数型
- 2.2.4 浮動小数点
- 2.2.5 文字型
- 2.2.6 真偽型
- 2.2.7 型推論
- 2.3 リテラル
- 2.3.1 整数リテラル
- 2.3.2 浮動小数点数リテラル
- 2.3.3 補足 型サフィックスと区切り文字
- 2.3.4 文字リテラル
- 2.3.5 文字列リテラル
- 2.4 型変換
- 2.4.1 暗黙的な変換
- 2.4.2 明示的な変換(キャスト)
- 2.5 参照型
- 2.5.1 クラス型
- 2.5.2 配列型
- この章の理解度チェック
- 第3章 演算子
- 3.1 算術演算子
- 3.1.1 非数値が混在する演算
- 3.1.2 + 演算子による文字列結合
- 3.1.3 インクリメント演算子/デクリメント演算子
- 3.1.4 除算とデータ型
- 3.1.5 浮動小数点数の演算には要注意
- 3.2 代入演算子
- 3.2.1 基本型/参照型による代入
- 3.2.2 定数は「再代入できない変数」
- 3.3 関係演算子
- 3.3.1 同一性と同値性
- 3.3.2 浮動小数点数の比較
- 3.3.3 配列の比較
- 3.3.4 オートボクシングされた値の比較
- 3.3.5 条件演算子
- 3.4 論理演算子
- 3.4.1 ショートカット演算(短絡演算)
- 3.5 ビット演算子
- 3.5.1 ビット論理演算子
- 3.5.2 ビットシフト演算子
- 3.6 演算子の優先順位と結合則
- 3.6.1 優先順位
- 3.6.2 結合則
- この章の理解度チェック
- 第4章 制御構文
- 4.1 条件分岐
- 4.1.1 if命令―単純分岐
- 4.1.2 if命令―多岐分岐
- 4.1.3 if命令―入れ子構造
- 4.1.4 補足 中カッコは省略可能
- 4.1.5 switch 命令
- 4.1.6 switch 式[14]
- 4.1.7 switch によるパターンマッチング[21]
- 4.2 繰り返し処理
- 4.2.1 while/do...while 命令
- 4.2.2 補足 無限ループ
- 4.2.3 for 命令
- 4.2.4 拡張for 命令
- 4.3 ループの制御
- 4.3.1 break 命令
- 4.3.2 continue 命令
- 4.3.3 入れ子のループを中断/スキップする
- この章の理解度チェック
- 第5章 標準ライブラリ
- 5.1 ラッパークラス
- 5.1.1 基本型⇔ラッパーオブジェクトの変換―ボクシング/アンボクシング
- 5.1.2 数値⇔文字列の変換
- 5.2 文字列の操作
- 5.2.1 文字列の長さを取得する
- 5.2.2 文字列を比較する
- 5.2.3 文字列が空であるかを判定する
- 5.2.4 文字列の前後から空白を除去する
- 5.2.5 文字列を検索する
- 5.2.6 文字列に特定の文字列が含まれるかを判定する
- 5.2.7 部分文字列を取得する
- 5.2.8 文字列を特定の区切り文字で分割する
- 5.2.9 文字列を整形する
- 5.2.10 文字列テンプレートによる文字列フォーマット[21 Preview]
- 5.3 正規表現
- 5.3.1 正規表現の基本
- 5.3.2 文字列が正規表現パターンにマッチしたかを判定する
- 5.3.3 正規表現で文字列を検索する
- 5.3.4 正規表現オプションでマッチング時の挙動を制御する
- 5.3.5 例 正規表現による検索
- 5.3.6 正規表現で文字列を置換する
- 5.3.7 正規表現で文字列を分割する
- 5.4 日付/時刻の操作
- 5.4.1 日付/時刻オブジェクトを生成する
- 5.4.2 日付/時刻を比較する―equals/isBefore/isAfter メソッド
- 5.4.3 年月日、時分秒などの時刻要素を取得する
- 5.4.4 日付/時刻値を整形する
- 5.4.5 日付/時刻値の差分を取得する
- 5.4.6 日付を加算/減算する
- 5.4.7 Java 7 以前の日付/時刻操作
- 5.4.8 Date-Time API ⇔ Calendar の相互変換
- 5.5 ストリーム
- 5.5.1 テキストをファイルに書き込む
- 5.5.2 テキストファイルを読み込む
- 5.5.3 バイナリファイルの読み書き
- 5.5.4 オブジェクトのシリアライズ
- 5.6 その他の機能
- 5.6.1 数学演算―Math クラス
- 5.6.2 long 型以上の整数を演算する―BigInteger クラス
- 5.6.3 乱数を生成する―Random クラス
- 5.6.4 数値を整形する―NumberFormat クラス
- 5.6.5 配列を操作する―Arrays クラス
- 5.6.6 文字列をUnicode 正規化する
- 5.6.7 ファイルシステムを操作する―Files クラス
- 5.6.8 HTTP経由でコンテンツを取得する―HttpClient クラス
- この章の理解度チェック
- 第6章 コレクションフレームワーク
- 6.1 コレクションフレームワークの基本
- 6.1.1 コレクションの基本構文
- 6.1.2 コーディング上のイディオム
- 6.1.3 特殊なコレクションの生成
- 6.2 リスト
- 6.2.1 ArrayList(サイズ可変の配列)
- 6.2.2 LinkedList(二重リンクリスト)
- 6.3 セット
- 6.3.1 セットの基本操作
- 6.3.2 TreeSet(ソート済みセット)
- 6.4 マップ
- 6.4.1 HashMap(ハッシュ表)
- 6.4.2 TreeMap(ソート済みマップ)
- 6.5 スタック/キュー
- 6.5.1 ArrayDeque(両端キュー)
- この章の理解度チェック
- 第7章 オブジェクト指向構文―基本
- 7.1 クラスの定義
- 7.1.1 クラス名
- 7.1.2 修飾子
- 7.1.3 メンバーの記述順
- 7.2 フィールド
- 7.2.1 修飾子
- 7.2.2 既定値
- 7.3 メソッド
- 7.3.1 メソッド名
- 7.3.2 実引数と仮引数
- 7.3.3 戻り値
- 7.3.4 修飾子
- 7.3.5 this キーワード
- 7.3.6 メソッドのオーバーロード
- 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.5.5 ファクトリーメソッド
- 7.6 クラスメソッド/クラスフィールド
- 7.6.1 クラスメソッド
- 7.6.2 クラスフィールド
- 7.6.3 クラス定数
- 7.6.4 static 初期化ブロック
- 7.6.5 初期化処理の実行順序
- 7.7 引数/戻り値の様々な記法
- 7.7.1 可変長引数のメソッド
- 7.7.2 引数とデータ型
- 7.7.3 null 安全の対策―Optional クラス
- 7.8 パッケージ
- 7.8.1 パッケージの基本
- 7.8.2 名前の解決
- 7.8.3 static インポート
- この章の理解度チェック
- 第8章 オブジェクト指向構文―カプセル化/継承/ポリモーフィズム
- 8.1 カプセル化
- 8.1.1 アクセス修飾子
- 8.1.2 フィールドのアクセス権限
- 8.1.3 アクセサーメソッド
- 8.1.4 例 不変クラス
- 8.2 継承
- 8.2.1 継承の基本
- 8.2.2 フィールドの隠蔽
- 8.2.3 メソッドのオーバーライド
- 8.2.4 super による基底クラスの参照
- 8.2.5 派生クラスのコンストラクター
- 8.2.6 継承/オーバーライドの禁止
- 8.2.7 シールクラスによる継承先の制限[17]
- 8.2.8 参照型における型変換
- 8.2.9 型の判定
- 8.2.10 委譲
- 8.3 ポリモーフィズム
- 8.3.1 ポリモーフィズムの基本
- 8.3.2 抽象メソッド
- 8.3.3 インターフェイス
- 8.3.4 インターフェイスのメンバー
- 8.3.5 インターフェイスと抽象クラスの使い分け
- この章の理解度チェック
- 第9章 オブジェクト指向構文―入れ子のクラス/ジェネリクス/例外処理など
- 9.1 Objectクラス
- 9.1.1 オブジェクトの文字列表現を取得する―toString メソッド
- 9.1.2 オブジェクト同士が等しいかどうかを判定する―equals メソッド
- 9.1.3 オブジェクトのハッシュ値を取得する―hashCode メソッド
- 9.1.4 補足 オブジェクトを比較する― compareTo メソッド
- 9.1.5 オブジェクトを複製する―clone メソッド
- 9.2 例外処理
- 9.2.1 例外処理の基本
- 9.2.2 finally ブロック
- 9.2.3 try-with-resource 構文
- 9.2.4 例外クラスの階層構造
- 9.2.5 例外をスローする
- 9.2.6 例外の再スロー
- 9.2.7 独自の例外クラス
- 9.3 列挙型
- 9.3.1 列挙型の基本
- 9.3.2 列挙型の正体
- 9.3.3 メンバーの定義
- 9.3.4 ビットフィールドによるフラグ管理
- 9.4 レコード
- 9.4.1 レコードの基本
- 9.4.2 レコード型のパターンマッチング
- 9.4.3 レコードパターンのより複雑な例
- 9.5 入れ子のクラス
- 9.5.1 static メンバークラス
- 9.5.2 非static メンバークラス
- 9.5.3 匿名クラス
- 9.5.4 ローカルクラス
- 9.6 ジェネリクス
- 9.6.1 ジェネリック型の定義
- 9.6.2 型パラメーターの制約条件
- 9.6.3 ジェネリックメソッド/ジェネリックコンストラクター
- 9.6.4 境界ワイルドカード型
- この章の理解度チェック
- 第10章 ラムダ式/Stream API
- 10.1 メソッド参照/ラムダ式
- 10.1.1 メソッド参照/ラムダ式を利用しない例
- 10.1.2 メソッド参照の基本
- 10.1.3 ラムダ式の基本
- 10.1.4 ラムダ式における変数のスコープ
- 10.1.5 ラムダ式を伴うコレクション系のメソッド
- 10.2 Stream API
- 10.2.1 Stream API の基本
- 10.2.2 ストリームの生成
- 10.2.3 ストリームの中間処理
- 10.2.4 ストリームの終端処理
- この章の理解度チェック
- 第11章 高度なプログラミング
- 11.1 マルチスレッド処理
- 11.1.1 スレッドの基本
- 11.1.2 排他制御
- 11.1.3 排他制御のその他の手段
- 11.1.4 スレッドプール
- 11.1.5 定期的なスレッド実行
- 11.1.6 仮想スレッドを生成する
- 11.1.7 スレッドの処理結果を受け取る―Callable インターフェイス
- 11.1.8 スレッド処理の後処理を定義する―CompletableFuture クラス
- 11.2 アノテーション
- 11.2.1 アノテーションの記述位置
- 11.2.2 アノテーションの基本構文
- 11.2.3 標準のアノテーション
- 11.2.4 アノテーションの自作
- 11.2.5 補足 リフレクションの主なメソッド
- 11.3 モジュール
- 11.3.1 モジュールの基本
- 11.3.2 標準ライブラリのモジュール
- 11.3.3 推移的な依存
- 11.3.4 パッケージを公開する
- 11.3.5 特殊なモジュール
- 11.3.6 例 非モジュールライブラリとの共存
- この章の理解度チェック
- 付録A 「練習問題」「この章の理解度チェック」解答
正誤表
| 該当頁 | 該当箇所 | 修正刷 |
|---|---|---|
| 訂正箇所 | 訂正事項 | 更新日 |
| p.135 | リスト4.17 WhileOmit.java 3-4行目 | 2刷 |
| Console.WriteLine(i++); Console.WriteLine("********"); |
System.out.println(i++); System.out.println("********"); |
2024/03/01 |
| p.152 | コラム「ソースコードからドキュメントを生成する──javadocコマンド」本文1行目 | 2刷 |
| /*~*/の形式で | /**~*/の形式で | 2024/07/18 |
| p.156 | リスト5.1 AutoBoxing.java 上から3行目 | 2刷 |
| 1~ 10000の総和を求める | 1~ 9999の総和を求める | 2024/07/18 |
| p.161 | リスト5.10の下 本文1行目 | - |
| それ以前のバージョンではtrim/trimLeft/trimRightメソッドを利用してください。trimXxxxxメソッドはstripXxxxxメソッドとほぼ同じ挙動を~ | それ以前のバージョンではtrimメソッドを利用してください。trimメソッドはstripメソッドとほぼ同じ挙動を~ | 2025/04/11 |
| p.190 | リスト5.31 RegUnicodeProp.java | 2刷 |
| - | import java.util.regex.Pattern; (※先頭にimport文を追加) |
2024/07/18 |
| p.192 | 本文 1行目 | - |
| replaceメソッドでも名前付きキャプチャグループを利用できます。 | replaceAllメソッドでも名前付きキャプチャグループを利用できます。 | 2025/04/05 |
| p.200 | リスト5.40 TimeGet2.java 5-7行目 | - |
| var week = new String[] {"日曜日","月曜日", ..."土曜日"}; | var week = new String[] {"月曜日","火曜日", ..."日曜日"}; 先頭を月曜日、末尾を日曜日 にしてください。 |
2025/01/16 |
| p.203 | リスト5.42 TimePattern.java 上から4行目 | 2刷 |
| import java.time.format.DateTimeForm | import java.time.format.DateTimeFormatter; | 2024/07/18 |
| p.230 | リスト5.59 RandomExample.java 中略の下 | 2刷 |
| - | var rnd = new Random(); (※変数宣言を追加) |
2024/07/18 |
| p.234 | リスト5.63 ArrayDeep.java 1行目 | 2刷 |
| mport java.util.Arrays; | import java.util.Arrays; | 2024/07/18 |
| p.265 | 表6.5 | - |
| boolean remove(int index) | E remove(int index) | 2025/09/23 |
| p.283 | リスト6.22 MapNavigable.java | 2刷 |
| put("peace", "1切れ"); put("piece", "平和"); |
put("peace", "平和"); put("piece", "1切れ"); |
2024/07/18 |
FAQ
現在、FAQはありません。
ダウンロード
お問い合わせ
書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。
お問い合わせの前にFAQ・正誤表をご確認ください。すでに掲載済みの内容については個別回答が難しい場合があります。