Head First Java 第2版

2020年1月21日


Head First Java 第2版 ―頭とからだで覚えるJavaの基本


オライリー・ジャパン


著者:Kathy Sierra、Bert Bates
訳者:夏目大
監修:島田秋雄、高坂一城、神戸博之


序章 この本の使い方
この本が対象としている読者
本当に真面目なJavaプログラムの本なのか?
単に読むだけではなく「学習」できる本
自分の思考について考える
この本で著者が工夫したこと
この本を読むときに気を付けること
用意するもの
その他の注意事項
テクニカルエディタの紹介
謝辞

1章 Javaの世界に飛び込もう ― ともかくまずは始めてみる
Javaプログラムのできるまで
Javaプログラム作成の手順
Javaの歴史(概略)
Javaプログラム(ソースファイルの構造)
クラスの構造
mainメソッドを持つクラスの作成
mainメソッドの「中身」
分岐
本格的なJavaアプリケーション
PhraseOMaticプログラムの仕組み
特別座談会(コンパイラとJVM)
エクササイズとパズル

2章 クラスとオブジェクト ― オブジェクト指向の国へ
対決! オブジェクト指向対手続き指向
クラスを作る際に考えるべきこと
クラスとオブジェクトの違い
クラスの作成と使用
Movieクラスの作成とテスト
mainから外へ飛び出す
アプリケーションの実行
エクササイズとパズル

3章 プリミティブと参照 ― 変数の基礎知識
変数の宣言
「ダブルモカをください。intサイズで」
変数に値を代入する際の注意
名前付けのルール
オブジェクトを操作する
オブジェクトへの参照も変数の値である
Javaの真実(ゲスト:オブジェクトリファレンス)
オブジェクト、参照、ガーベージコレクション
オブジェクトの生と死
配列はコップを並べたトレイのようなもの……
Dog型の配列を作る
Dogオブジェクトの操作
エクササイズとパズル

4章 メソッドとインスタンス変数 ― オブジェクトの「ふるまい」
クラスにはインスタンス変数とメソッドがある
メソッドの機能に影響するインスタンス変数(ステート)
メソッドに値を渡す
メソッドは値を戻す
メソッドには、複数のパラメータを宣言することもできる
引数として指定された値の「渡され方」
パラメータ、戻り値の有効な使い方
カプセル化
データの保護
Javaの真実(ゲスト:オブジェクト)
Gooddogクラスをカプセル化する
配列でのオブジェクトの扱い
インスタンス変数の宣言と初期化
インスタンス変数とローカル変数の違い
変数の比較
エクササイズとパズル

5章 本格的なプログラムの作成 ― 本格的なプログラム(メソッド)を書く
バトルシップゲームプログラムを作る
プログラムの設計
簡易版ゲームプログラム
クラスの作成
テストコードの作成
SimpleDotComクラスのテストコードを作成する
SimpleDotComクラスのテストコード
checkYourself()メソッド
新しいテクニック
SimpleDotComクラスのコードとそのテストコードの最終形
SimpleDotComGameクラス(のmain()メソッド)の仮コード
SimpleDotComGameクラスのmain()メソッド
random()とgetUserInput()
GameHelperクラス
forループの基礎知識
ループの処理
拡張forループ
Stringをintに変換する
プリミティブ型のキャスト
エクササイズとパズル

6章 Java APIの基礎 ― Javaライブラリを使用する
簡易版バトルシップゲームプログラムのバグ
バグの原因は?
バグの修正方法
方法1はあまりに複雑
Java APIのクラスを使う
ArrayListクラスの使い方
Javaの真実(ゲスト:ArrayListクラス)
ArrayListと配列の比較
ArrayListを使用したバグの修正
ArrayListを使って修正したコード
「完全版」バトルシップゲームプログラムの作成
簡易版から完全版への変更ポイント
DotComBustクラスの処理
DotComBustクラスの仮コード
DotComBustクラスのリアルコード
DotComクラスのリアルコード
高度な条件判定式
GameHelperクラス
ライブラリ(Java API)の使用
APIの使い方
エクササイズとパズル

7章 継承とポリモーフィズム ― オブジェクト指向をより深く知る
2章の復習
継承について理解する
動物シミュレーションプログラムを構成する
重複を防ぐのに役立つ継承
動物の「食べ方」はみな同じか
継承関係を再検討する
呼び出されているメソッドは?
継承関係を図に表す
IS-A関係とHAS-A関係
IS-A関係に関する注意事項
クラスの継承関係が正しいことを確認する方法
サブクラスが継承できるもの、できないもの
継承の適切な使用
継承は何のために行う?
オーバーライドに関するルール
メソッドのオーバーロード
エクササイズとパズル

8章 インターフェースと抽象クラス ― ポリモーフィズムの高度な利用方法
前章の例のおさらい
Animalオブジェクトはどんな動物を表す?
抽象クラスのインスタンスは作成できない
抽象クラスと具象クラス
抽象メソッド
抽象メソッドの本体はサブクラスで必ず作る
ポリモーフィズムの応用例
クラスの異なるサブジェクトを混在させる
Animalのサブクラス以外のオブジェクトを格納するにはどうするか
Objectクラスのメソッド
Objectクラスを使用する際の注意
DogオブジェクトがDogクラスのオブジェクトではなくなるとは?
元のクラスのメソッドは使えない
すべてのクラスはObjectクラスの特性、機能を受け継ぐ
「ポリモーフィズム」は元来「多くの形」を意味する
利用できるメソッドを変更する
ペットショッププログラムのための修正方法
インターフェース
Petインターフェースの作成とインプリメント
スーパークラスバージョンのメソッドを使用する
エクササイズとパズル

9章 コンストラクタとガーベージコレクション ― オブジェクトの生と死
オブジェクトはどこに存在するか
メソッドはスタックに格納される
ローカル変数が参照型のものである場合は?
インスタンス変数の格納場所
オブジェクト誕生の神秘
コンストラクタのコード
オブジェクトのインスタンス変数の設定
コンストラクタを使用してオブジェクトのインスタンス変数の初期設定をする
複数のコンストラクタを作る
引数のないデフォルトコンストラクタはどのような場合でも必ず作られるのか
コンストラクタの復習
スーパークラスのコンストラクタとサブクラスのコンストラクタは同時に実行されるのか
オブジェクトのコンストラクタにおけるスーパークラスのコンストラクタの役割
Hippoオブジェクトを作るには、Animalオブジェクト、Objectオブジェクトとしての部分も必要
スーパークラスのコンストラクタを意図的に呼び出す場合は?
親より先に子供は産まれるか?
スーパークラスのコンストラクタに引数がある場合
コンストラクタの中でコンストラクタを呼び出すには?
オブジェクトの「寿命」はどのくらい?
参照型変数の場合
特別座談会(インスタンス変数とローカル変数)
エクササイズとパズル

10章 数値の扱いとスタティック変数、メソッド ― 数値の扱い
Mathクラスのメソッド:「グローバル的」なメソッド
通常のメソッドとスタティックメソッドの違い
スタティックメソッドを持つクラスを作る
スタティックメソッドではスタティックでない変数(インスタンス変数)は利用できない
スタティックメソッドの中で通常のメソッドを呼び出すことはできない
スタティック変数:クラスのすべてのインスタンスで値が同じになる変数
スタティック変数の初期化
static fi nalと宣言した変数は定数のようになる
finalは必ずしもstaticと同時に使用しなくてよい
Mathクラスのメソッドの概要
プリミティブのラッピング
プリミティブとオブジェクトの境界線を曖昧にする機能
さまざまなケースで行われる自動ラッピング、アンラッピング
ラッパに用意されているユーティリティメソッド
数値を数字に変換する
数値のフォーマッティング
フォーマッティングについての指示の仕方
“%"は「この部分にフォーマッティング対象の値が入る」ということを意味する
フォーマット文字列には独自の文法がある
フォーマッティング指示のコード
必須なのは型の指定だけ
フォーマッティング対象を複数指定する
日付のフォーマッティング
日付の活用
時間を進める、さかのぼる
Calenderを継承するオブジェクトの取得
Calenderオブジェクトを使う
Calender APIの主要機能
スタティックインポート
特別座談会(インスタンス変数とスタティック変数)
エクササイズとパズル

11章 例外処理 ― 危険をともなうプログラムの作成
音楽演奏プログラムを作る
基礎的なことがらについて学ぶ
まず必要なのはSequencerオブジェクト
正しく動作しない恐れがある(他人が書いた)メソッドを呼び出す
Javaのメソッドでは、実行中に何か例外が起きたことを呼び出し側のコードに知らせるために「例外」を発生させる
try/catchブロック
例外はすべてException型を継承するクラスのオブジェクト
例外を発生させるメソッドを作る
try/catchブロックでの処理の流れ
finallyブロック:例外が発生した場合もしなかった場合も行うべき処理
1つのメソッドが複数種の例外を発生させることもある
例外とポリモーフィズム
catchブロックを複数作る場合は、対応する例外クラスが下位のものから順に並べる
上位の例外クラスに対応するcatchブロックを先にすることはできない
例外処理をしたくない時は……「回避!」
例外処理の回避は実は「先送り」
例外についてのまとめ
音楽演奏プログラム
プログラムキッチン(音楽演奏プログラム)
音楽演奏プログラムの基本的な作り方
簡単な音楽演奏プログラム
MidiEventオブジェクト(MIDIデータ)の作成
ShortMessageオブジェクトの内容
setMessage()メソッド
楽器と音程を変更できるプログラム
12章以降で作成するプログラムの概要
エクササイズとパズル

12章GUIの基礎 ― グラフィカルなインターフェース
まずウィンドウを作る
ボタンを備えたウィンドウ(フレーム)を作る
前ページのプログラムの場合、ボタンをクリックしても何も起きない……
イベント処理
イベントリスナーとイベントソースのコミュニケーション
ActionEventの扱い
リスナー、ソース、イベント
再びGUIの話……
描画パネルをフレームに組み込む
paintComponent()メソッドの例
Graphics2DをGraphicsの代わりに使用する
描画する円の色をグラデーションにするためのコード
イベントと図形の描画
フレームに複数のウィジェットを組み込む
ボタンのクリックによって円の色を変化させる
ボタンを2つにする
内部クラス
内部オブジェクトを作る
Javaの真実(ゲスト:内部オブジェクト)
内部クラスをアニメーションに利用する
アニメーションプログラムのコード
プログラムキッチン(ミュージックビデオプログラム)
GUI部品以外で発生するイベントに対応するリスナーの作成
MidiEventオブジェクトの作成
ユーティリティメソッドmakeEvent()の使用例
第2段階:Controllerイベントのリスナーの作成、登録
第3段階:音楽に合わせて図形を描画する
エクササイズとパズル

13章Swingの基礎知識 ― Swingを利用する
Swingコンポーネント
レイアウトマネージャ
レイアウトマネージャの機能
レイアウトマネージャの分類
さまざまなSwingコンポーネント
プログラム・キッチン(BeatBoxプログラム)
エクササイズとパズル

14章 シリアライゼーションとファイルI/0 ― オブジェクトの保存
ドラムパターンを保存する
オブジェクトの保存方法
オブジェクトをシリアライズしてファイルに保存する
データの通り道となる「ストリーム」
シリアライゼーションとは
インスタンス変数の値はどのようなかたちで保存されるか
クラスにシリアライズの機能を持たせるにはSerializableインターフェースをインプリメントする
インスタンス変数をシリアライズの対象から外すには「transient」宣言する
デシリアライゼーション:保存したオブジェクトの再現
デシリアライズはどのように行われるか
ゲームキャラクターオブジェクトのシリアライズとデシリアライズ
オブジェクトのデータをプレーンテキストファイルに書き込む
暗記カードプログラム
QuizCardBuilderクラスの概要
java.io.Fileクラス
バッファを使うメリット
テキストファイルからデータを読み込む
QuizCardPlayerクラスの概要
StringTokenizerの使用方法
クラスのバージョン
バージョンID
プログラム・キッチン(BeatBoxプログラムにドラムパターンを保存する)
エクササイズとパズル

15章 ネットワークとスレッド ― ネットワーク接続のためのプログラムを書く
チャットクライアントとチャットサーバ
チャットプログラムの概要
接続、送信、受信
ネットワーク(ソケット)接続を確立する
TCPポートもアドレスの一部
ソケット接続経由でのデータの読み取りにもBufferdReaderが使用できる
ソケット接続経由でのデータ書き込みにはPrintWriterを使用する
簡単なクライアントプログラム
クライアントプログラムのコード
サーバプログラムの作成
サーバプログラムのコード
簡単なチャットクライアントの作成
スレッドを表すThreadクラス
「マルチスレッド」の意味
スレッドを起動するためのコード
スレッドには「ジョブが必要」
Runnableインターフェースをインプリメントする
スレッドの状態の変化
通常は実行可能/実行中という2つの状態の間で切り替えが行われる
スレッドスケジューラ
スレッドをスリープさせる
Sleepメソッドを使用すればスケジューラをある程度コントロールできる
ユーザースレッドを2つ作る
スレッドの問題点「競合」
Dr.Steveショー「離婚の危機? このカップルは修復可能か」
複数のスレッドによるオブジェクトの共有
「RyanとMonica」プログラム
オブジェクトのアクセスには「ロック」をかけることができる
makeWithdrawl()メソッドに同時にアクセスできるスレッドを1つに限定する
すべてのオブジェクトが備える「ロック」
「更新が無効になる」という問題
コードを実行してみる……
incremant()メソッドをsynchronized宣言する
synchronized宣言の問題点
改良型チャットクライアント
チャットサーバのコード
プログラム・キッチン(BeatBoxプログラムの完成バージョン)
エクササイズとパズル

16章 コレクションとジェネリック型 ― データ構造
ジュークボックスで人気のある曲を調べる
Arraylistに曲名を保持するコード(ソート機能なし)
ArrayListクラスにはソートメソッドはない
ArrayListだけがコレクション(複数のデータをひとまとめにするクラス)ではない
TreeSetを使用してもよいが……Collections.sort()メソッドを使用することもできる
Collections.sort()を使用してコードを改良する
StringではなくSongオブジェクトをソートする
Songクラスを利用してコードを改造する
コンパイルできない!
sort()メソッドの宣言
コレクションを「タイプセーフ」にするジェネリック型
ジェネリック型
ジェネリッククラスを使用する
ArrayListの型パラメータを使用する
ジェネリックメソッドを使用する
sort()メソッド
この場合の"extends"は「"extends"あるいは"implements"」という意味
これで問題が明らかに……
comparableインターフェースをインプリメントしたSongクラス
リストのソートは確かにできたが……
Comparatorを使用する
Comparatorを使用してコードを改造する
ソートは問題なくできるが、要素の重複が
必要なのはListではなくSet
Collection API(一部)
HashSetを使用する
オブジェクトを「同等」と見なす条件は?
HashSetの重複確認:hashcode()とequals()
hashCode()とequals()をオーバーライドしたSongクラス
ソートした要素の順序が狂わないためにはTreeSetを使う
TreeSetについての注意点
TreeSetの要素は「比較のできる」ものにする
List、Setの次はMap……
再びジェネリック型について
ポリモーフィズムとジェネリック型
ArrayListではどうか……
これが許容されたとしたら……
ワイルドカードを使えば……
別の書き方……
エクササイズ&パズル

17章 プログラムの提供 ― プログラムが完成したら……
Javaプログラムの提供
プログラムができた。その後は……
ソースファイルとクラスファイルを分けて保存する
プログラムに必要なファイルをJARファイルにまとめる
JARファイルの実行
クラスをパッケージにまとめる
パッケージ名の重複を避ける
クラスをパッケージに所属させる
パッケージに属するクラスのコンパイル、実行
-dオプションの優れた機能
パッケージに属するクラスを実行可能JARファイルにまとめる
JARファイルの内容確認、内容の抽出
Java Web Start
.jnlpファイル
JWSを利用するプログラムを提供する手順
エクササイズとパズル

18章RMIによるプログラムの提供 ― 分散コンピューティング
メソッドの呼び出しは通常、同一のヒープ上のオブジェクト間で行われる
他のマシン上のオブジェクトのメソッドを呼び出すには?
小型デバイス上のオブジェクトAからパソコン上のオブジェクトBのメソッドを呼び出すには?
RMIを設計してみる
ヘルパーの役割
RMIのクライアントヘルパー、サーバヘルパー
クライアントがスタブを取得するには
スタブのクラスファイルをクライアントに提供するには
クライアントマシン、サーバマシンに必要なクラスファイル
RMIは実際にどのように応用されているのか?
サーブレット
サーブレットの作成・実行
簡単なサーブレットの例
PhraseOMaticプログラムを利用したサーブレットを作ってみる
サーブレットで利用しやすいよう改良したPhraseOMaticクラスのコード
EJB(Enterprise JavaBeans):大規模システムのためのRMI
Jiniとは
サービスの自動検索機能
ルックアップサービスの自動修復機能
ユニバーサルサービスブラウザ
ユニバーサルサービスブラウザの動き

付録A BeatBoxプログラム完全版
eatBoxプログラム完成版(クライアント)のコード
eatBoxサーバプログラム完成版

付録B 本文で触れなかった重要事項ベスト10

索引
訳者あとがき

書籍目次

Posted by shi-n