13章は例外です。

・例外として投げることができるクラスはThrowableの拡張クラスであり、ErrorとExceptionがあり、ExceptionはさらにRuntimeExceptionとそれ以外がある。
・Errorは処理継続できない時。
・この内、それ以外だけがコンパイラによって前もってチェックされる。
・コンパイラによって前もってチェックされる例外は、メソッド内のcatch節で処理するか、
型 メソッド名(引数の並び) throws XXException {
...
throw XXException();
...
}
と書く。
・前もってチェックされない例外とは、いつでもどこでも起こりうるのでチェックしていられないということ。
・FileNotFoundExceptionはRuntimeExceptionではない。ファイルがないのは実行してみないと分からないが、実行する前から起こりうることが分かるという解釈をとる。
・try ... catch ... finally ではtry節内でreturnしたとしてもfinally節は実行される。
・finally節内でreturnしてはならない。

例外という仕組みのありがたみがまだピンと来ていません。
17章はパッケージです。

ここ辺は色々記憶が曖昧になっていたので復習できて良かったです。

・アクセス制御はprivate、何も付けない、protected、publicがある。意味はこの順にクラス内のみ、パッケージ内のみ、パッケージ内もしくはサブクラス、他のパッケージからもOK。
・protectedというキーワードがわざわざ存在するのはパッケージの階層とクラス階層は無関係だから。パッケージのpppとppp.qqqは単に別のパッケージと考えるべき。
・何もつけない方がprotectedよりも縛りがきつい。
・クラスとインタフェース自体にはpublicか何もつけないかしかない。
・フィールドとメソッドはさらにprivateとprotectedもありうる。
・クラスとインタフェース自体のアクセス制御の影響をフィールドとメソッドは受ける。フィールドやメソッドをpublicにしてもクラスやインタフェースに何もついていなければ他のパッケージからはアクセスできない。
14章はインターフェースです。インターフェースについてはほぼ覚えていましたが、インターフェースの配列を作る時一見インスタンスを作っているかのような記述になるが問題ないのは忘れていました。

IntefaceA[] ary = new InterfaceA[3];

aryの各要素には、IntefaceAをimplementsしたクラスのインスタンスを入れることができます。