著者:結城 浩[ゆうき・ひろし](1963-) プログラマー。技術書ライター。
装丁:米谷テツヤ[よねたに・てつや] グラフィックデザイナー。
本文デザイン:花本浩一[はなもと・こういち] ブックデザイナー(麒麟三隻館)
Java言語プログラミングレッスン 第3版(下) | SBクリエイティブ
【目次】
CONTENTS [iii-xiii]
上巻の復習 [xiv-xvii]
第11章 クラスとインスタンス
この章では… 002
この章を読み始める前に 002
クラスとインスタンス 002
クラスとインスタンス
クラスにはどんなものがあるか
クラスを宣言する
拡張クラスを宣言する
インタフェースを実装したクラスを宣言する
フィールドとメソッド 007
フィールド
メソッド
setSizeメソッド
メソッドを宣言しただけでは何も起きない
インスタンスの作り方 011
インスタンスの作り方
フィールドへのアクセス
メソッドの呼び出し
this :インスタンスの指定はいつ必要なのか?
コンストラクタ 016
コンストラクタとは何か
コンストラクタを宣言する
コンストラクタを呼び出す
引数なしコンストラクタ
フィールドの初期値
mainメソッド
インスタンスはどこに作られているのか? 021
クラスフィールドとクラスメソッド 023
クラスフィールドとは何か
クラスフィールドの宣言
クラスメソッドの宣言
例:getAreaメソッドを2通りで書いてみよう
mainメソッド
クラスメソッドだけのクラス
修飾子 032
final
abstract
その他の話題 034
toStringメソッド
この章で学んだこと 036
練習習問題 037
第12章 スーパークラスとサブクラス
この章では... 044
スーパークラスとサブクラス 044
スーパークラスとサブクラス
スーパークラスは1つ
extendsでスーパークラスを指定
Objectクラスとクラス階層
スーパークラスを指定しないクラス宣言
継承 050
継承とは何か
フィールドの継承
メソッドの継承
コンストラクタは継承されない
コンストラクタの自動的な呼び出し
super():スーパークラスのコンストラクタの明示的な呼び出し
this():自分のクラスのコンストラクタの明示的な呼び出し
継承とIS-A関係
合成とHAS-A関係
継承の目的
オーバーライド
多態性とオーバーライド
finalメソッドはオーバーライドできない
継承とアクセス制御
アクセスメソッド
クラスライブラリとパッケージ 067
final クラスと拡張の禁止 068
finalクラスは拡張できないクラス
抽象クラス 069
抽象クラスとは何か
抽象クラスはサブクラスに期待する
この章で学んだこと 072
練習問題 073
第13章 例外
この章では… 078
例外とは何か 078
日常の「例外」とJava言語の「例外」
例外とは何か
例外を起こしてみよう
例外をキャッチしてみよう
深いメソッド呼び出しから投げられる例外
コールスタック
中断しても大丈夫なの?
めんどうですか?
代表的な例外処理の例 085
数への変換
ファイル処理
ネットワーク処理
自分で投げる例外
さまざまな例外 091
例外の階層
チェックされる例外
「チェックされない例外」の意味
例外の階層とcatch節
例外を用いたプログラミングの注意点 096
マニュアルの読み方
スタックトレースを使う
finallyをうまく使う
メソッドのエラー通知法
例外のクラスを自分で作る
チェックされる例外かどうかに注意
この章で学んだこと 100
練習問題 100
第14章 インタフェース
この章では… 106
インタフェースとは何か 106
インタフェースについて学ぶ前に
インタフェースとは何か
インタフェースの「実装」
extendsとimplementsの違い
例:DebugPrintableインタフェース
インタフェース型の変数
配列でインタフェースを利用する
メソッドの引数でインタフェースを利用する
インタフェースのフィールド
インタフェースの中でenumを宣言する
スーパーインタフェース
多重継承とインタフェース
クラスとインタフェースの比較 122
練習問題 122
第15章 ガーベッジコレクション
この章では… 126
インスタンスの参照とガーベッジコレクション 126
インスタンスの生成と参照
インスタンスの参照をやめる
誰からも参照されていないインスタンス
引数として渡されるインスタンス
ガーベッジコレクタ
ガーベッジコレクションの例
例:ガーベッジコレクションの動作確認
例:配列の例
例:ガーベッジになってくれないインスタンス
gcメソッド
finalize 138
この章で学んだこと 139
練習問題 139
第16章 スレッド
この章では… 144
スレッドとは何か 144
スレッドとは何か
マルチスレッドとは何か
スレッドの排他制御と同期
マルチスレッドの例
マルチスレッドを使わないと、どんな不便があるのか
スレッドを作る2つの方法 150
Threadクラス(方法A) 151
詳しく読んでみよう
Runnableインタフェース(方法B) 155
詳しく読んでみよう
クラス宣言の違い
スレッド開始の違い
スレッドを作る2つの方法のまとめ 158
トピック:2つのスレッドが同じフィールドに代入したらどうなる?
BadBank:2つのスレッドが同じフィールドに代入する例
GoodBank:2つのスレッドが同じフィールドに代入する正しい例
synchronizedは「ここには1人しか入れません」
synchronized メソッドと synchronizedブロック
クラスメソッドとsynchronized
トピック:スレッドを止めるにはどうする? 169
トピック:スレッドを少し待たせたいときはどうする?
待ちたいときには Thread.sleepを使う
トピック:スレッドの終了を待つにはどうする?
トピック:スレッド同士を待ち合わせたいときはどうする?
ProducerConsumerクラス
MyQueue クラス
Producerクラス
Consumerクラス
wait/notifyに関する疑問と回答
プライオリティ(優先順位)
トピック:匿名クラスでインスタンス生成 184
この章で学んだこと 185
練習問題 186
第17章 パッケージ
この章では 194
パッケージとは何か 194
名前の衝突とパッケージ
パッケージの利用 196
完全限定名
import によるクラスの取り込み
java.langパッケージ
パッケージの宣言 198
パッケージの宣言
パッケージの階層
package と import
import 宣言の*の意味
無名パッケージ
パッケージはクラス階層と無関係
パッケージとアクセス制御 202
アクセス制御とは何か
アクセス制御の例
publicを付けたクラス宣言
他のパッケージ内のクラスの利用
修飾子の意味とアクセス制御一覧
よく使われるアクセス制御1:publicクラスとそうでないクラス
よく使われるアクセス制御2:privateメソッド、privateフィールド
よく使われるアクセス制御3:privateなコンストラクタ
よく使われるアクセス制御4:privateなコンストラクタ
パッケージ名は衝突しないのか 211
ユニークなパッケージ名
ユニークなパッケージ名の生成方法
パッケージの保存場所 212
スタティックなインポート宣言 212
スタティックなインポート宣言とは何か
シングル・スタティック・インポート宣言(staticフィールドの取り込み)
シングル・スタティック・インポート宣言(staticメソッドの取り込み)
スタティック・インポート・オン・デマンド宣言
この章で学んだこと 217
練習問題 218
第18章 ファイル操作と入出力、クラスの調べ方
この章では… 222
ファイルとは何か
ファイルの読み込み 224
例:ファイルの表示
大きな構造
「Readerのインスタンスを作る」
「readメソッドで読み込む」
「closeメソッドで終了」
インスタンスは作りっぱなし?
バッファリングについて
クラスライブラリのマニュアルを読む 230
クラスライブラリのマニュアルとは
パッケージ
クラスとインタフェース
クラス階層
親クラスと実装しているインタフェース
対象クラスに注意
コンストラクタ
メソッドの説明を読む
フィールドの説明を読む
ファイルの書き込み 237
例:ファイルの書き込み
FileWriter, BufferedWriter, PrintWriter
printinメソッド
closeメソッド
ファイルの削除・名前変更 239
例:ファイルを削除する
例:ファイルの名前変更
例:ファイルの存在確認
ディレクトリ操作 244
例:ディレクトリの一覧を得る
例:ディレクトリを作成する
クラスやメソッドを見つける方法
文字ストリームとバイトストリーム 247
Javaでの文字コードは何か
ソースファイルの文字コードは何か
データの文字コードは何か
文字ストリームとは何か
文字ストリームを使う理由
文字コードの変換をしながら読み込み
文字コードの変換をしながら書き込み
例:DatalnputStream
DatalnputStreamの生成
readByteで読み込み
EOFExceptionの終了判定
この章で学んだこと 256
練習問題 257
第19章 コレクション
この章では… 262
コレクションとは何か 262
配列の復習
自動的に長くなるArrayList
パラメータ付き型とジェネリクス
確保
追加(addメソッド)
要素数(sizeメソッド)
参照(getメソッド)
ArrayListの内部はどうなっているか
イテレータ
拡張 forループ
基本型のコレクションとオートボクシング
削除と確認
Javaコレクションフレームワークの全体像 282
Javaコレクションフレームワークのクラス階層
Vector, Stack, Hashtable
主なクラスのサンプルプログラム 286
ArrayList - サイズが自動的に大きくなる配列(List インタフェースを実装)
LinkedList - キューやスタック(Queue, List インタフェースを実装)
LinkedListをキューとして用いる
LinkedListをスタックとして用いる
HashSet - 重複を許さない集合(Set インタフェースを実装)
HashMap - キーと値の対応関係(Map インタフェースを実装)
この章で学んだこと 300
練習問題 300
付録
A 練習問題の解答 306
第11章
第12章
第13章
第14章
第15章
第16章
第17章
第18章
第19章
B Java SE 7の主なパッケージ一覧 354
C C言語とJava言語の相違点 355
型
配列
制御構造
アクセス制御とスコープ
クラス
メモリ
文字と文字列
その他
D アノテーション 360
アノテーションとは
例
コメントを使った例
@Overrideアノテーションを使った例
標準的に定義されているアノテーション
E enum〔エナム〕 363
enumとは
enumの使い方
static final intとenumの違い
F java.util.concurrentパッケージを用いたProducerConsumerクラス 367
BlockingQueueインターフェースとArrayBlockingQueueクラス
G 本書で触れなかった内容 370
H Project Coin 371
Project Coinとは
1. String文が使えるswitch文
2. 2進数表記とアンダースコアによる区切り
3. 複数例外のキャッチと再スロー
4. ダイヤモンド・オペレータ(型推論の改善)
5. try-with-resource文(自動的なclose)
6. 可変長引数の単純化
| Java SE7からの新しいファイル操作 378
java.nio.file パッケージ
ファイルの内容を標準出力に表示する
標準入力の内容をファイルに書き込む
ファイルを削除する
ファイルの名前を変更する
ディレクトリ構造一覧を得る
ディレクトリを作成する
索引 [389-395]
著作一覧 [396-397]
【Tables】
Table 11-1 インスタンスフィールドとクラスフィールド 025
Table 13-1 いろいろな例外 079
Table 14-1クラスとインタフェースの比較 122
Table 15-1 メモリ管理に関するメソッド一覧 (java.lang.Runtimeクラス) 132
Table 16-1 スレッドを作る2つの方法の比較 159
Table 16-2 プライオリティ関連のメソッドとフィールド(java.lang.Threadクラス) 183
Table 17-1 クラスとインタフェースに対するアクセス制御 206
Table 17-2 クラスのメソッドとフィールドに対するアクセス制御 206
Table 17-3 インタフェースのメソッドとフィールドに対するアクセス制御 206
Table 17-4 パッケージを保存するディレクトリ例 213
Table 19-1 配列と ArrayList の比較 268
Table 19-2 ラッパークラスの例 279
Table 19-3 List, Queue, Deque, Set, Mapインタフェースの主なメソッド一覧 284
Table 19-4 Queue インタフェースのメソッド 290
Table D-1 標準ライブラリで定義されているアノテーション 362
Table I-1 java.nio.file パッケージの主なクラス 378
Table I-2 java.nio.file.StandardOpenOption 381