エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

【書評】Java本格入門 感想 老を感じる

商品情報

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

gihyo.jp

きっかけ

Twitterでウザいくらい流れてたので、とりあえず手にとって読んでみた。
たぶん、自分は初心者の部類ではないと思いたい! 初心を忘れない意味でも読んだ。

よくよく見たら、コレは技術評論社から出てるんだな。
Web+DB pressとか、SoftwareDesiginを出しているところか。
最近、定期購読するようになったから、社名は覚えた。

内容

呼んだ内容と、自分への補足を記載。

目次

はじめに
Chapter 1 Javaの基本を知ろう ~イントロダクション~
 1.1 Javaとは
 1.2 「Hello Java World!」を表示してみよう
Chapter 2 基本的な書き方を身につける
 2.1 Javaの基本的な記法
 2.2 クラスとメソッド
 2.3 情報共有のために知っておきたい機能
 2.4 名前のつけ方に注意する
Chapter 3 型を極める
 3.1 プリミティブ型と参照型
 3.2 クラスの作成
 3.3 型判定とオブジェクトの等価性
 3.4 型にまつわる問題を予防する
Chapter 4 配列とコレクションを極める
 4.1 配列で複数のデータを扱う
 4.2 コレクションフレームワークで複数のデータを扱う
 4.3. 配列に近い方法で複数の要素を扱う ~Listインタフェース
 4.4 キーと値の組み合わせで値を扱う ~Mapインタフェース
 4.5 値の集合を扱う ~Setインタフェース
 4.6 その他のインタフェース
Chapter 5 ストリーム処理を使いこなす ~ラムダ式とStream API
 5.1 Stream APIを利用するための基本
 5.2 Streamを作成する
 5.3 Streamに対する「中間操作」
 5.4 Streamに対する「終端操作」
 5.5 Stream APIを使うためのポイント
 5.6 Stream APIを使ったListの初期化
Chapter 6 例外を極める
 6-1 例外の基本
 6-2 例外処理でつまずかないためのポイント
Chapter 7 文字列操作を極める
 7-1 文字列操作の基本
 7-2 正規表現で文字列を柔軟に指定する
 7-3 文字列のフォーマットと出力
 7-4 文字コードを変換する
Chapter 8 ファイル操作を極める
 8-1 ファイル操作の基本
 8-2 ファイルを読み書きする
 8-3 ファイルを操作する
 8-4 さまざまなファイルを扱う
Chapter 9 日付処理を極める
 9-1 DateとCalendarを使い分ける
 9-2 Date and Time APIを利用する
 9-3 日付クラスと文字列を相互変換する
 9-4 Date and Time APIで日付/時間クラスと文字列を相互変換する
 9-5 和暦に対応する
Chapter 10 オブジェクト指向をたしなむ
 10-1 プリミティブ型の値渡しと参照型の値渡し
 10-2 可視性を適切に設定してバグの少ないプログラムを作る
 10-3 オブジェクトのライフサイクルを把握する
 10-4 インタフェースと抽象クラスを活かして設計する
Chapter 11 スレッドセーフをたしなむ
 11-1 マルチスレッドの基本
 11-2 スレッドセーフを実現する
Chapter 12 デザインパターンをたしなむ
 12-1 デザインパターンの基本
 12-2 生成に関するパターン
 12-3 構造に関するパターン
 12-4 振る舞いに関するパターン
Chapter 13 周辺ツールで品質を上げる
 13-1 Mavenでビルドする
 13-2 Javadocドキュメンテーションコメントを記述する
 13-3 Checkstyleフォーマットチェックをする
 13-4 FindBugsでバグをチェックする
 13-5 JUnitでテストをする
 13-6 Jenkinsで品質レポートを作成する
Chapter 14 ライブラリで効率を上げる
 14-1 再利用可能なコンポーネントを集めたApache Commons
 14-2 CSVで複数のデータを保存する
 14-3 JSONで構造のあるデータをシンプルにする
 14-4 Loggerでアプリケーションのログを保存する

補足

デフォルトコンストラクタ

Javaは、コンストラクタでインスタンス生成時の処理が記述されているが、下記のように記載されてない場合もある。

public class Test {
}

この場合、コンストラクタはないように思うが、実は存在している。
上記のコードは、下記のコードと同義になる。

public class Test {

    public Test() {
    }

}

気をつけなければならないのは、Singletonを使ったケースで発生する。
今は、DIを使ってSingletonを実現することが多いが、そうじゃない場合、デフォルトコンストラクタの隠蔽を忘れて、インスタンス生成がnewで、できてしまう事がある。

public class TestSingleton {

    private static TestSingleton instance;

    public TestSingleton getInstance() {
        if(this.instance == null) {
            this.instance = new TestSingleton();
        }

        return this.instance;
    }
}

上記例だと、一見Singletonを実現できているように見える。
しかし、デフォルトコンストラクタを隠蔽してないため、下記のやり方をされると、インスタンスは複数生成される。

public static void main(String[] args) {
    TestSingleton ts = new TestSingleton();
}

こうなるとSingletonにした意味が無いので、なるべくprivateで、デフォルトコンストラクタを隠蔽させる。

public class TestSingleton {

    private static TestSingleton instance;

    private TestSingleton() {
    }

    public TestSingleton getInstance() {
        if(this.instance == null) {
            this.instance = new TestSingleton();
        }

        return this.instance;
    }
}

FindBugsについて

最近、コミュニティの動きが心配。
分解しないかだけ心配。
下記の記事に簡潔にまとまっている。

blog.kengo-toda.jp

一段レベルアップのために、FindBugsにはお世話になったので、このまま継続していて欲しいのが願望。
似たツールとしては、PMDがある。
こっちも、コードレベルをあげるのに役立った。

気になったこと

ワイドニングとナローイング

型変換のところで出てきた。
学生時代の頃は、「暗黙の型変換」って習った気がする。

今は、横文字主流なのか。。。
俺は、どっちかというと、感じの方が厨二臭くて好きだ。

Javaはデカくなったな。。。

Javaで広範囲をカバーしようとしたら、もっとデカくなりそうな気がする。
フレームワークまわりとかカバーしたら、たぶん広辞苑クラスになるで!

感想

初級者よりちょっと進んだ人向けかな?
広い範囲をカバーしてあるので、気になったところは、別途、本を買うなりしてみたほうがいいかもしれない。
知識領域を広めるために読んでみるのがいいのではなかろうかと思いました。

あと、StreamAPIとか、ラムダ式って、初心者はついてこれるものなのだろうか?
俺、覚えるのに結構時間かかった気がする。
今の若い奴らは、すんなり覚えられるのかと思うと、驚愕!
儂も老いたのぉ。。。。

他に気になったのは、参考文献にあった、ひしだまさんのホームページ。
これって、印税が入ってくるのだろうか?
私、気になります!

実際、読んでたら学生の気分を思い出したわ。
パッケージ関連とか、なんの意味があるのか分かんなかったけど、実際のコードを見て必要性を認識した記憶がある。
あと、ファイル入出力も覚えられなかったころが懐かしいな。
懐かしすぎて、老を感じる。
ちょっと虚しさを覚える一冊やったわ。。。

追加でオススメしたい本

Effective Java

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

Javaではこうするべきってのが、理由付きで載っている。
理屈込で書かれているので、覚えやすい。
基本文法がマスターできたら、あとは、理屈でこう書くべきってのを覚えるといいかも。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

どこいってもオススメされるから、あんまり説明の効果ないかな?
一人で開発はありえない。
絶対チームで開発になる。
可読性を重視するためのコツ・ポイントが、コンパクトにまとめられており、読みやすい。
過去に書評書いたので、気になった人は、読んでもらえればと。

suzaku-tec.hatenadiary.jp

リファクタリング―既存のコードを安全に改善する―

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

本書では触れていなかったが、リファクタリングが開発では必須になる。
アホな現場のガチガチの保守でない限りは、絶対必要になる知識。
みんな大好き「改善」をやるためにも、絶対に読んでおいてもらいたい一冊。
新規で開発する場合も、自分で作りながらリファクタリングすることがあるので、保守しないと思っても、一読したほうが良い。

はじめてのSpring Boot―スプリング・フレームワークで簡単Javaアプリ開発

環境構築が楽なSpringBootを使った入門書。 Javaを使う=Web開発がほとんど。
Webフレームワークを簡単に体験できるのでオススメ。

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

日本でデザインパターンを学ぶといったら、コレ。
自分は、この本からデザインパターンを学んだわけではないが、内容は簡潔にまとめられているので、一読してみるといい。

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

Effective Javaに近い内容だった気がする。
今後、APIの開発は、開発トレンドを見ていると必須だと思う。
この本を読んで、APIとはどうあるべきかを考えてみるといいかもしれない。

Java関連の記事

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp

suzaku-tec.hatenadiary.jp