「AndroidエンジニアのためのモダンJava 堅牢・安全・軽快なAndroid開発のための基本原則」を読んだ感想

投稿日:2017年3月30日 更新日:

こんばんは、okuzawatsです。
Androidアプリの開発が好きです。

AndroidエンジニアのためのモダンJava 堅牢・安全・軽快なAndroid開発のための基本原則」がAndroidアプリ開発の参考になる本だったので、紹介しておきます。

本書は、Android開発の基盤となるJava言語の再入門を目的とした書籍です。
「Androidアプリの開発を始めた。
なんとなくJavaのコードも書いている。
しかし、正しい文法、構文となると、いまいち自信がない」という方が、基礎を再確認し、Androidアプリを開発する上での底力を高めることが、本書の目的です。

出典:AndroidエンジニアのためのモダンJava 堅牢・安全・軽快なAndroid開発のための基本原則、p.iii

わたくしは、Javaの経験を積まないままAndroidアプリ開発の世界に入りました。
同じような立場の人もたくさんいると思いますが、Androidアプリの開発に必要なJavaの理解を深めてくれる、本書のような書籍はとてもありがたいものなのではないでしょうか。

「AndroidエンジニアのためのモダンJava」の全体構成

「AndroidエンジニアのためのモダンJava」は、3部から構成されています。
はじめにJavaの基礎、次にオブジェクト指向、最後にライブラリをやります。

  • 導入編
    AndroidとJavaの関係、Javaの基本
  • オブジェクト指向構文編
    クラスの基本、カプセル化、継承/ポリモーフィズム、アノテーション、列挙型、例外処理
  • ライブラリ編
    コレクション、ストリーム、ネットワーク、スレッド

Androidアプリ開発をそれなりにやってきてなんとなくわかった気になっていましたが、まだまだ甘かったと思い知らされました。
「これは知らなかった」という知識がたくさんあり、とても勉強になりました。

「AndroidエンジニアのためのモダンJava」を読んで参考になったところ

「AndroidエンジニアのためのモダンJava」を読んで参考になったところを、メモ代わりに軽くまとめていきます。

文字列の連結に「+」を使わない

「+」演算子を使って文字列を連結するのは非効率な処理。
こういう書き方。

String hoge = "Hello " + "World!"

Stringクラスは固定長文字列なので、一度生成された文字列は後から変更できない。
「+」演算子で連結した場合、内部的には「元の文字列」「連結する文字列」「結果文字列」と合計3個のStringオブジェクトを生成している。
文字列の連結には、StringBuilderを使うのが良い。

ラベル構文でネストされたループを脱出

ラベル構文を使うと、ネストされたループをまとめて脱出できる。
break、continueと一緒に使うことができる。

以下の「table」のところがラベル構文。

table:
for (int i = 1; i < 10; i++) {
	for (int i = j; j < 10; i++) {
		if () {
			break table;
		}
	}
}

static初期化ブロック

static初期化ブロック(staticイニシャライザ)は、クラスを初期化する際に実行される。

public class MyInitStatic {
	public static final String HELLO;
	
	static {
		//初期化ブロック
		HELLO = "Hello";	
	}
}

定数値はコンパイル時に参照元のクラスにコピーされるため、定数値を修正した場合、参照元のクラスも再コンパイルしなければならない。
また、参照元のクラスがわずかに大きくなる。
static初期化ブロックで定数を初期化するようにすれば、定数値をコピーできなくなるので、上記の問題を解消できる。

try-with-resources構文

try-with-resources構文は、tryブロックを抜けるタイミングでリソースが自動的に解放される。finally句でのcloseメソッドが不要になる。

try (FileReader reader = new FileReader("C:/Data/sample.txt")) {

} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
}

自動解放できるリソースは、AutoCloseable実装クラスのみ。
tryブロックを抜けたタイミングでリソースを解放し、その後でcatchブロックが処理される。

ArrayListの要素数

ArrayListに要素を挿入する時、メモリーの再割り当てが発生する場合がある。
ArrayListは、あらかじめ一定サイズ(デフォルトは10)の領域を準備している。
要素の追加に伴って領域が不足すると、自動的に一定量だけサイズを拡張する。

メモリーの再割り当てはオーバーヘッドを要する処理であり、リストサイズに比例して処理も重くなる。
もしも要素数がわかっていれば、インスタンス化に際してサイズを宣言しておく。

ArrayList list = new ArrayList(15);

まとめ

「AndroidエンジニアのためのモダンJava」、すごい勉強になりました。
まだ持ってない人、もっとAndroidアプリの開発に強くなりたい人、是非とも買って勉強しましょう!

茨城県つくば市在住のAndroidアプリエンジニアです。Androidアプリ開発に関して何かあれば、メールフォームからお問い合わせください。できる範囲でお答えします。

メールフォーム

-Android, 読書感想文

Copyright© Androidアプリ開発@つくば , 2017 AllRights Reserved Powered by AFFINGER4.