Java本はプログラミング言語としては本屋さんでもっとも多い棚を占有する程ですが、その分どの本を選べばよいか迷うことも多いでしょう。Javaを扱うエンジニアを対象にJava本を選ぶ基準を考えてみます。
Javaを理解するための本を選ぶ基準
(順次増強予定)
- packageを使用しており、packageについて解説がある
Javaでアプリケーションを作成するなら、パッケージを使いこなすことは不可欠です。
- クラスパスについて解説がある
これも必ずはまることなので、しっかり押さえておく必要があります。インストールド・エクステンションとクラスローダーについても知っておく必要があります。
- スレッド安全性について解説がある
JavaVMを起動すればいやでもシステム側でスレッドを複数作ってくれます。スレッドを使わないつもりでも、安全性についてはしっかり押さえておく必要があります。
仮想マシンのメリットは結構ですが、実アプリケーションではどうしてもJavaVM上では実現できない要求を解決する場面があります。その際、JNIを使って解決するという方法を知っておくことが必要です。
- switch文は悪、ポリモーフィズムを使うこと、制御構造(ネスト)は最小限にすることを述べている
文法解説から始まるJava本で学ぶと、制御構文を使いまくるコーディングをする人が育ちます。文法解説よりも正しく使いこなすことを理解するのが大事です。
- 最新のガベージコレクション(HotSpot)を説明している
「オブジェクト生成コストは高いので・・・」といった都市伝説を書いている本はだめ本です。また、文法解説本でのfinalize()を読むと変な処理を埋め込みHotSpotを阻害してしまいます。
- リソースリークを防ぐtry-finallyの使い方を教えている
常に異常系を考慮しないとプロとは呼べません。
- 直接Exception型をcatchしたりthorws宣言に記述したりしていない
Exception型は論外ですが、入門本によってはIOExceptionをmainメソッドにthrows宣言してコード中に一切例外処理を入れていないものがあります。これも悪いコーディングを蔓延させるのでよろしからずです。
- 例外処理のcatch文で適切な処理が記述されている
catch文が空(例外の握りつぶし)なのは、悪いコーディングです。サンプルコードをいい加減に作っている本は読む価値なしです。
- 変数名、クラス名が適切に命名されている
class Chap1_1 とか、int n1 といった命名に溢れた本で勉強したプログラマーは・・・
- 変数の説明、基本型・参照型について正確に記述されている
「変数は値を入れる箱」では、オブジェクトの参照値が入っていることがわかりません。
- 配列をオブジェクトとして記述している
C言語の配列の説明みたいな書き方では問題です。
- メソッドの呼び出しが"virtual"、すなわち実行時に検索され選択され呼び出されることを説明している
オーバーライドの説明がいまいちなものが多いです。