“標準教科書”が完全書き下ろしで11年ぶり新登場!
手を動かしておぼえる(書いて実行して結果を確認する)特長を生かし、Javaプログラミングに必要な知識・概念・機能を体系的かつ網羅的に習得できます。基本的な言語仕様から、標準ライブラリ、コレクション、オブジェクト指向、ラムダ式/Stream API、スレッド、マルチスレッド処理、アノテーション、モジュールまで、サンプルプログラムを例示しながら詳細かつ丁寧に解説します。
更新履歴
- FAQ情報:2024年1月18日 更新
- 正誤訂正:2022年10月6日 更新
目次
- 第1章 イントロダクション
- 1.1 Javaとは?
- 1.1.1 Javaの特徴
- 1.1.2 Javaのエディション
- 1.1.3 Javaの歴史
- 1.2 Javaアプリを開発/実行するための基本環境
- 1.2.1 準備すべきソフトウェア
- 1.2.2 Eclipseのインストール
- 1.2.3 Eclipseの画面構成
- 1.3 Javaプログラミングの基本
- 1.3.1 基本的なアプリの作成
- 1.3.2 コードの全体像
- 1.3.3 デバッグの基本
- この章の理解度チェック
- 第2章 Javaの基本
- 2.1 変数
- 2.1.1 変数の宣言
- 2.1.2 識別子の命名規則
- 2.1.3 よりよい識別子のためのルール
- 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.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.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-TimeAPI⇔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 ファイルシステムを操作する――Filesクラス
- 5.6.7 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 参照型における型変換
- 8.2.8 型の判定
- 8.2.9 委譲
- 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 staticメンバークラス
- 9.4.2 非staticメンバークラス
- 9.4.3 匿名クラス
- 9.4.4 ローカルクラス
- 9.5 ジェネリクス
- 9.5.1 ジェネリック型の定義
- 9.5.2 型パラメーターの制約条件
- 9.5.3 ジェネリックメソッド/ジェネリックコンストラクター
- 9.5.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 スレッドの処理結果を受け取る――Callableインターフェイス
- 11.1.7 スレッド処理の後処理を定義する――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.33 | 本文3行目 | 4刷 |
| まずは(2)を優先して利用することをお勧めします。 | まずは(1)を優先して利用することをお勧めします。 | 2022/05/16 |
| p.42 | 12行目 | 4刷 |
| 5.の予約語とは、 | 4.の予約語とは、 | 2022/05/16 |
| p.77 | この章の理解度チェック[2]問題文 下から2行目 | 3刷 |
| [①]で表記できるようになります。 | [②]で表記できるようになります。 | 2021/02/14 |
| p.90 | 下から7行目 | 4刷 |
| VALUES = new int[] { 10, 20, 30 }; | VALUES = new int[] { 15, 25, 35 }; | 2022/05/16 |
| p.96 | リスト3.15の下 4行目 | 4刷 |
| 戻り値は、配列1>配列2の場合は1、配列1=配列2 の場合は0、配列1<配列2の場合は-1です。 | 戻り値は、配列1>配列2の場合は正数、配列1=配列2の場合は0、配列1<配列2の場合は負数です。 | 2021/06/04 |
| p.102 | 表3.6 主なビット演算子 >>>演算子の用例 | 3刷 |
| 10 >>> 2 → 1010 >>> 2 → 0101 → 5 | 10 >>> 2 → 1010 >>> 2 → 0010 → 2 | 2020/07/21 |
| p.119 | 本文 下から2行目 | 3刷 |
| 「変数.equale(値)」 | 「変数.equals(値)」 | 2021/03/16 |
| p.141 | 「この章の理解度チェック」の[4] 2行目 | 4刷 |
| 「JVM言語」「C#」「Visual Basic」「F#」であれば | 「JVM言語」、「C#」「Visual Basic」「F#」であれば | 2022/05/16 |
| p.158 | リスト5.16 StrFormat.javaの③ | 4刷 |
| System.out.println(String.format("%.2sです。", "サクラ")); // 結果:サクです。 |
System.out.println(String.format("%2sです。", "サクラ")); // 結果:サクラです。 |
2021/06/04 |
| p.158 | リスト5.16 1行目 | 4刷 |
| import java.util.LocalDateTime; | import java.time.LocalDateTime; | 2021/06/04 |
| p.160 | 「③~⑤文字列の表示幅」の下 | 4刷 |
| ③は、文字列幅を2と指定しているため、3文字目以降が表示されません。 | ③は、実際の文字列よりも指定幅が短いので、すべての文字列が表示されます。あくまで最小幅を表すだけで、指定桁で切り捨てられるわけではありません。 | 2021/06/04 |
| p.160 | 本文5行目 | 4刷 |
| 「女の子」に対応すべき「3$」がありません | 「女の子」に対応すべき「2$」がありません | 2022/05/16 |
| p.160 | ⑥~⑦整数の場合 上から4行目 | 4刷 |
| という意味です。 | という意味です(⑦)。 | 2022/05/16 |
| p.163 | 表5.6:Javaで利用できる主な正規表現パターン [X-Z]のマッチする文字列 | 4刷 |
| X~Yの範囲の中の1 文字 | X~Zの範囲の中の1 文字 | 2022/05/16 |
| p.170 | 1つ目のnote 4行目 | 4刷 |
| +(\.[A-Za-z0-9-]+)* | +(\\.[A-Za-z0-9-]+)* | 2022/05/16 |
| p.180 | 練習問題 5.2 [2]下から2行目 | 4刷 |
| 正規表現で「[a-z_0-9]+([-+.][a-z_0-9]+)*@[a-z_0-9]+([-.][a-z_0-9]+)*\.[a-z_0-9]+([-.][a-z_0-9]+)*」 と表すものとします。 | 正規表現で「[a-z0-9.!#$%&'*+/=?^_{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9-]+)*」 と表すものとします。 | 2022/05/16 |
| p.203 | note 1行目 | 4刷 |
| newBufferedWriterFilesクラスは、Java 8で導入された比較的新しいメソッドです。 | newBufferedWriterFilesは、Java 8で導入された比較的新しいメソッドです。 | 2021/06/04 |
| p.203 | 図5.A | 4刷 |
| ファイルの読み込み | ファイルの書き込み | 2021/06/04 |
| p.203 | note 3行目 | 4刷 |
| var | BufferedWriter | 2021/06/04 |
| p.206 | 下から5行目 | 4刷 |
| var | BufferedReader | 2021/06/04 |
| p.210 | リスト5.49 Article.java 下から7行目 | 3刷 |
| public Article(String title, String url) { | public Article(String title, String url, boolean expired) { | 2021/03/16 |
| p.260 | 図6.9 子ノードの数値 | 4刷 |
| 17 | 21 | 2021/06/28 |
| p.263 | 本文最終行、表のキャプション | 3刷 |
| NabigableMap | NavigableMap | 2021/03/16 |
| p.309 | リスト7.26 下から3行目 | 2刷 |
| return this.instance; | return instance; | 2019/12/08 |
| p.394 | 本文3行目 | 4刷 |
| 対称性/一貫性は、意図せず違反することがあります。 | 対称性/推移性は、意図せず違反することがあります。 | 2022/05/09 |
| p.395 | リスト9.4 下の本文 | 3刷 |
| Personクラスのequalsメソッドではtitleフィールドを~ | Personクラスのequalsメソッドではdepartmentフィールドを | 2021/03/16 |
| p.422 | 14行目 | 4刷 |
| 捕捉した例外をそのままスローするだけならば、引数を省略して「throw;」と書いても同じ意味です。 | (すべてカット) | 2021/06/04 |
| p.437 | 図9.11 | 4刷 |
| flagsを含んでいるか | CASE_INSENSITIVE/MULTILINEを含んでいるか | 2022/05/20 |
| p.437 | 図9.11 | 4刷 |
| flagsだけを含んでいるか | CASE_INSENSITIVE/MULTILINEだけを含んでいるか | 2022/05/20 |
| p.437 | リスト9.34 コメント部分 | 4刷 |
| CASE_INSENTIVE/MULTILINEを含んでいるか CASE_INSENTIVE/MULTILINEだけを含んでいるか |
CASE_INSENSITIVE/MULTILINEを含んでいるか CASE_INSENSITIVE/MULTILINEだけを含んでいるか |
2022/05/20 |
| p.548 | 表11.6 allの概要 | 4刷 |
| すべての警告を有効化 | すべての警告を無効化 | 2022/10/06 |
| p.582 | 練習問題 3.2[2]①の解答 | 3刷 |
| false | true | 2019/12/08 |
| p.582 | 「この章の理解度チェック p.107」の[2] 2行目 | 4刷 |
| 値型と参照型とで | 基本型と参照型とで | 2022/05/16 |
FAQ
ダウンロード
お問い合わせ
書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。
お問い合わせの前にFAQ・正誤表をご確認ください。すでに掲載済みの内容については個別回答が難しい場合があります。