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

[cover photo]
  • 2006年03月 発行
  • 720ページ
  • ISBN4-87311-279-6
  • フォーマット Print PDF
  • 原書: Head First Java, Second Edition

オライリー・ジャパンで書籍を購入:
定価4,320円

Ebook Storeで電子版を購入:
価格3,456円

『Head First Java』は、これからJavaを学ぶ人、さらに深くJavaとオブジェクト指向のことを理解したい人のための本です。本書の最大の特徴はイラストや写真を多用したユニークなスタイル。しかし、これは見た目だけやさしくするためのものではありません。本書は認知心理学や教育心理学の成果をベースに、読者の集中力を切らさないように、また学習した内容を忘れないように、注意深く構成されているのです。他にもショートストーリー、クロスワードパズルなど、これまでのプログラム解説書には見られない内容が数多く盛り込まれ、楽しみながらJavaの本質を学ぶことができます。著者のKathy Sierra氏はSun Microsystemsのマスタートレーナーとして最新のJavaをインストラクターに教えた経験を持ち、Bert Bates氏はいくつかのJava資格試験の中心的な作成メンバーです。2人のJavaに関する深い理解と教育に関する豊富な経験が、この一冊に凝縮しています。第2版はJava 5.0に対応し、サイズも価格も手頃になりました。

サンプルPDF


関連書籍

Head Firstデザインパターン
詳解 Javaプログラミング 第2版 VOLUME 1

序章 この本の使い方
	この本が対象としている読者
	本当に真面目な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ブロックでの処理の流れ
	fi nallyブロック:例外が発生した場合もしなかった場合も行うべき処理
	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

索引

訳者あとがき

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

p.11 「条件判定」の段落
誤:int x = 4 ; // 変数 x に3を代入
正:int x = 4 ; // 変数 x に4を代入

p.11 「条件判定」の段落
誤:x = x - 1; // つまりこの場合永久に繰り返すことになる
正:x = x + 1; // つまりこの場合永久に繰り返すことになる

p.118 ソースコード下から6行目
誤:System.out.println(" x == " +x);
正:System.out.println(" x = " + x);

p.122 「JVMになってみよう」解答の下から6行目
誤:System.out.println(" x == " +x);
正:System.out.println(" x = " + x);

p.148 ソースコード20行目
誤:for (DotCom dotCom ToSet : dotComsList) {
正:for (DotCom dotComToSet : dotComsList) {

p.149 ソースコード4行目
誤:for (DotCom dotCom ToSet : dotComsList) {
正:for (DotCom dotComToSet : dotComsList) {

p.149 ソースコード10行目
誤:dotComsList.remove(i);
正:dotComsList.remove(dotComToTest);

p.154 6行目、7行目
誤:16章
正:17章

p.155 「素朴な疑問に答えます」下から10行目、1行目
誤:16章
正:17章

p.157 「素朴な疑問に答えます」下から2行目
誤:16章
正:17章

p.180 一番下の「注意」
誤:注意:default、protected については、16 章、付録 B で詳しく触れます。
正:注意:default、protected については、付録B で詳しく触れます。

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]