Amanjackのブログ

プログラミング初心者、FX初心者の成長日記

スッキリわかるJAVA入門<第3版>

下記の本を読みましたので、復習もかねて書評をしたいと思います。

スッキリわかるJava入門 第3版 (スッキリシリーズ)

スッキリわかるJava入門 第3版 (スッキリシリーズ)

 

 

ネットで絶賛されているだけあって、非常に分かりやすかったです。オンラインスクールでjavaの勉強をしましたが、理解せずに無理やり進めていた箇所がこの本を読んでほとんど理解できました。人生で読んだ本で一番ページ数があり一番読むのが大変でしたが、それだけに得たものは大きかったです。ただ、非常に重たいのが難点です。

 

読書日数:10日間程度

読書時間:25時間程度

 

dokojavaに関して

本書はdokojavaと言った開発環境を構築せずにjavaの動きをWEB上で再現できるサービスがあります。本書には大量のソースコードが記載されておりますが、全てにQRコードが記載されており、結果が分からない時は携帯ですぐに調べることができます。私の場合は結果が分からない時だけ利用しました。記載してある全てのコードの動きを調べていては時間がとても掛かりますので、基本は読んで終わりでした。しかし、dokojavaがあると無いとでは全然違います。QRコードを読むだけですぐにソースコードがでてきてコンパイルと実行をしてくれるので使いやすいです。全てのコードに対して結果を記載すればページ数がさらに増えますし、きちんと理解できていれば結果は推測できるため、たまに分からないときにすぐに調べられるのは大きいです。

 

0章 Javaをはじめよう

Javaの基礎知識に関しての説明があります。簡単なサンプルを動かしたり、実際にJavaに触れて、イメージを作る章です。

  

第1章 プログラムの書き方

最初はマクロな視点から基礎的な情報をインプットし、後半は変数やデータ型の話になり本格的なJavaの学習が始まります。

データ型
  • byte 小さい整数 1byteは8bitで -128~127のデータ量
  • short byteより少し大きい整数 年齢などを表す時に使用
  • int 整数はだいたいintでまかなえる
  • long intでまかなえない大きい整数を表す時に使用 億を超えるような時に使用
  • float 小数を利用できる
  • double doubleより広い範囲の小数
  • boolean trueかfalseのみ
  • char 1文字扱うときに使用
  • String 文字の並びに使用

 

第2章 式と演算子

演算子や計算方法を学びます。計算方法は自動変換や仕組みから解説があり、深掘りして記載されていて理解しやすいです。命令文として利用する簡単なメソッドの説明があります。 

  • オペランド 演算子以外の文字や数字の入った変数や値のこと
  • リテラル ソースコードに直接記述されている具体的な値のこと(オペランドの一部)
  • エスケープシーケンス コードに影響を与えてしまうため¥マークをつけないといけない特殊文字のこと
  • インクリメント ++ と書く演算子で1増やす
  • デクリメント -- と書く演算子で1減らす
  • キャスト データの型を強制的に型変換する
  • 引数 = パラメータ 命令文を実行する時に使用する追加情報

  

第3章 条件分岐と繰り返し

構造化定理と言い、順次、分岐、繰り返しを組み合わせればどんな複雑なプログラムでも作成可能になるようです。もちろん、それだけ覚えれば良いわけではありません。

  • if文 条件によって分岐を行う if ( A == B){ ~ }
  • if-else文 if文の条件が満たされなかった場合の分岐を作ることができる
  • if ( A == B ){ ~ }
  • else { ~ }
  • swich文 case式までジャンプする if-else文の条件が多い場合はswich文にする
  • break文 処理を中断する
  • continue文 処理を最初に戻す
  • while文 条件によって繰り返しを行う while ( A == B ) { ~ }
  • for文 条件による繰り返し for( int i; i < 10; i++){ ~ }
  • 関係演算子 ==, != , >,  >=, などの記号のこと
  • 論理演算子 &&, || などの記号のこと
  • ネスト 分岐や繰り返し構文の多重構造のことを入れ子やネストと言う 

 

第4章 配列

今まで変数に1つずつしか格納していなかったですが、配列によって1つの変数に何個も格納できるようになりました。それにしても分かりやすいです。今まで理解せずに進めていた部分が読んだところから体に染み込んでいく感覚です。

  • 拡張for文 配列の要素を1つずつ取り出すfor文を省略する記法 for( int value : intA )
  • 参照型 メモリ上のアドレスに変数を代入する
  • ガベージコレクション 実行中に生み出したメモリ上のゴミを削除する機能

 

第5章 メソッド

私にとってメソッドとはクラスが持つ「技」と言うイメージがあります。波動拳みたいな。以前は戻り値が理解できていなかったですが、この本によって理解できました。

  • 実引数 渡す値 具体的な値や変数
  • 仮引数 受け取る値 まだ値が与えられていない
  • 戻り値 メソッドで定義し、returnで返す値のこと
  • オーバーロード 仮引数が異なれば違うメソッドとして利用できる
  • シグネチャ メソッド名と引数の情報をまとめてシグネチャと呼ぶ 「オーバーロードシグネチャが重複しない場合に利用できる」

 

第6章 複数クラスを用いた開発

この章ではJavaの文法や計算式は出てきません。Javaでのファイルの作り方や名前のルール、Java APIに関して学習します。

  • コンパイラ 機械言語に翻訳するプログラム
  • インタープリタ コンパイルしたプログラムを実行する
  • JARファイル JavaArciveの略 Javaの複数クラスをまとめているファイル形式
  • パッケージ グループごとに分類し、管理する仕組み
  • FQCN full qualified class name 完全限定クラス名 別パッケージのクラスを利用する際に使用する
  • import文 importすることによってFQCNを省略できる
  • クラスローダー クラスパスの情報を元にファイルを高速に検索する機能
  • Java API Application Programming Interface Javaに標準装備されているクラス群のこと

 

第7章 オブジェクト指向をはじめよう

Javaと言えばのオブジェクト指向の登場です。オブジェクト指向の目的は複雑化するプログラムを把握しやすくして開発を容易にするために生まれた考え方のようです。ただ、今はJavaより柔軟で使いやすい言語はありそうなので、昔の話のような気もします。この章はオブジェクト指向を理解していくための助走のような章です。

  • オブジェクト指向 ソフトウェアを開発する際にソースをファイルごとに分割し、役割を明確にして開発を容易にする考え方

 

第8章 インスタンスとクラス

オブジェクトは概念なのでクラスとインスタンスを使ってオブジェクトを表現します。クラスが種族や種類でインスタンスが人と言ったイメージです。やはり、物作りは楽しいです。

  • インスタンス クラスに生成されて振る舞いを行うオブジェクト
  • フィールド クラスで宣言する変数
  • this.~ 自分自身のフィールドの指定

 

第9章 さまざまなクラス機構

インスタンスは参照型なので上書きするときは注意が必要です。クラスや参照の理解を深め、コンストラクタを学習する章です。コンストラクタはクラス名で指定しJVMで自動実行する処理です。コンストラクタもメソッドと同様にオーバーロードができます。コンストラクタが1つも定義されていない場合は暗黙のコンストラクタ(デフォルトコンストラクタ)が実行されます。

  • デフォルトコンストラクタ 記述はないが処理がないコンストラクタを自動的に実行するコンストラク
  • this()  同一クラスの別コンストラクタを呼び出す 前章のthis.~ とは別物 

 

第10章 継承

継承とは新たに作るクラスに対してメソッドやフィールドを引き継ぐことができる機能です。継承も勉強はしていましたが、この本を読むことによって理解ができました。継承だけでこんなに長い記述はなかったですから。

  • extendsで継承を行う
  • オーバーライド 継承元のクラスのメソッドやフィールドを上書きすること
  • 多重継承 継承は孫クラスや曽孫クラスを定義することもできますが、子クラスは親クラスを2つ定義できません。
  • final 宣言するとオーバーライドできなくなるフィールドは基本的にfinalで定義する
  • super( ~ ); 親クラスのコンストラクタを呼び出す
  • 継承したインスタンスのコンストラクタは先頭で親クラスのコンストラクタを呼び出さなくてはならない
  • 記述がない場合は暗黙のsuper()コンストラクタを呼び出す
  • 継承は必ず「子クラス is a 親クラス」の関係になっている

 

第11章 高度な継承

さらに継承に関しての知識を増やす章です。高度な継承と言っていますが、すべて継承の一部である抽象クラスに関しての説明です。抽象クラスの説明だけで11章が終わります。

  • 抽象クラス 空のメソッドを入れてオーバーライドを強制するクラス
  • abstractで宣言する
  • インターフェース フィールドを持たず、抽象メソッドのみで、多重継承が許されているクラス interfaceで宣言する 子クラスはimplementsで定義する

 

第12章 多態性

抽象的な話が長くわかりやすいですが少し冗長でした。この章も丸々多態性の説明で具体的な説明は最後に出ます。多態性とは別々のクラス型のインスタンスを同じ配列のグループに入れることができる機能を持ったインスタンス化の方法と言ったところでしょうか。親クラスで宣言し、子クラスを代入します。そうすると、別々の子クラスをまとめて扱うことができるようになります。 

  • instanceof 演算子 キャストできるかどうか確認する演算子
  • ClassCastException 継承できない親クラスにインスタンスしているとでるメッセージ

 

第13章 カプセル化

カプセル化とはアクセス制御を行うための仕組みです。アクセス修飾子を使いフィールドとメソッドを制御します。getterとsetterと言うフィールド操作に利用する仕組みが現れますが、手間が多くややこしいです。

  • private 自分自身のクラスのみ利用可能
  • package private 自分と同じパッケージに属するクラスのみ利用可能
  • protected 自分と同じパッケージに属するクラスと継承した子クラスが利用可能
  • public すべてのクラスで利用可能
  • getterメソッド フィールドの中身を呼び出し元に返すメソッド
  • setterメソッド フィールドの中身を代入するメソッド

 

第14章 Javaを支えているクラスたち

APIの理解が弱くやっと理解できました。暗黙のメソッドがあるとは知っていましたが、暗黙のクラスが継承されているとは知りませんでした。すべてのクラスの祖先にあたる java.lang.objectが暗黙で継承されており、toString()やequals()などが利用できるようになっていたようです。 

  • 静的メンバ staticで宣言したフィールドやメソッドのこと
  • newせずに呼び出せるクラスがある
  • クラス名でもインスタンス名でもメソッドを呼び出すことができる

 

第15章 文字列と日付の扱い

文字列処理と日付の処理はAPIを駆使して作成します。文字列処理とは検索、置換、連結、調査などのことです。日付の処理は機械的な日付の文字列をどのような形フォーマットの日付で表示させるのか設定する方法を学びます。日付の処理が複雑で理解するのが難しいです。日付は常に動いていますし、場所によっても時間が違うし、表示方法もスラッシュで区切るだけや漢字で表示することもあったりと様々なパターンが存在します。正規表現も出てきて覚えることが多い章です。

  • equals() 内容が等しいかどうかを調べる
  • equalsIgnoreCase() 大文字小文字を区別せずに調べる
  • length() 文字列の長さを調べる
  • isEmpty() 文字列が空かどうかを調べる
  • contains() 一部に文字列が含むかどうかを調べる
  • starsWith() 始まりの文字列を調べる
  • endsWith() 終わりの文字列を調べる
  • indexOf() 文字列が最初に登場する位置を調べる
  • lastIndexOf() 文字列を後ろから調べて最初に登場する位置を調べる
  • charAt() 指定位置の一文字を切り出す
  • substring() 指定位置から始まる文字列を任意の長さ切り出す
  • toLowerCase() 大文字を小文字に変換する
  • toUpperCase() 小文字を大文字に変換する
  • trim() 前後の空白を削除する
  • replace() 文字列を置き換える
  • StringBuilderクラス append()で追加した文字列を最後にまとめて連結する
  • maches() 名前の条件一致
  • split() 指定した文字での場所で分割する
  • replaceAll() 指定した文字列を指定した文字列に置き換える
  • String.format() 書式指定文字列を使用して文字列を組み立てる
  • プレースホルダー 専用の記法に沿った特殊な書式(%,、修飾、桁、型で構成)のこと
  • instantクラス 世界における、ある瞬間の時刻を保持する
  • ZonedDateTimeクラス 世界におけるある瞬間の時刻を保持する
  • LocalDateTimeクラス 日常的に使われる日時を使いやす形で保持する
  • Durationクラス 二つの異なる時刻や日付の期間を保持する
  • Periodクラス 二つの異なる時刻や日付の期間を保持する

 

 

第16章 コレクション

コレクションとはjava.utilパッケージに属するAPI群のことでリスト、セット、マップに分けられます。配列より内容が高度になりできることが増えますが、複雑度もまして難しいです。この辺になってくると実際に何度も使って体に覚えさせないと頭だけでは覚え切れません。

  • ArratList< ~ >() インスタンスを格納できて、数も指定する必要はなく随時自動追加される 
  • ジェネリクス <>記号のことで型を宣言する
  • ダイヤモンド演算子 <>のなかに宣言がない状態のこと
  • イテレータ リストから要素を取り出すコレクション専用の方法
  • LinkedList 連結リストと呼ばれるコレクションリスト
  • set 順序関係がなくset()、get()も使えない集合体のコレクション
  • LikedHashSet 値を格納した順序で整列
  • TreeSet 自然順序で整列
  • map キーと値をペアで格納しているコレクション
  • HashMap 様々なメソッドをもつマップ 

 

第17章 例外

例外発生の対策を学べる章です。エラーには文法エラー、実行時エラー、論理エラーの3種類あるようです。

  • 文法エラー コードの形式的誤り
  • 実行時エラー 実行中に想定外の事態が発生し動作継続ができないエラー
  • 論理エラー 記述した処理内容に誤りがあるエラー

 

第18章 まだまだ広がるJavaの世界

Javaの勉強はひと段落し、この章で最後です。今後必要になってくる知識や経験をまとめてくれています。 

  • ファイルを読み書きする
  • インターネットにアクセスする
  • データベースを操作する
  • ウィンドウアプリケーションを作る
  • スマートフォンアプリを作る
  • Webサーバで動くJavaプログラム
  • さらなる高みを目指して

  

もっと詳細に要約をして復習につなげたかったですが、ページ数多すぎてここで断念しました。