contents memorandum はてな

目次とメモを置いとく場

『Java言語プログラミングレッスン[第3版](下)―― オブジェクト指向を始めよう』(結城浩 ソフトバンククリエイティブ 2012//1999)

著者:結城 浩[ゆうき・ひろし](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