【今日学んだこと】未経験からエンジニアで転職「3週間目その1」
今日やったこと
- 本で勉強、2部全部と3部の17章途中まで(~673P)
できなかったこと
ギリギリ1冊目終わらなかった残念
明日やること
- 本で勉強の続き、1冊目全部
- 2冊目突入
今週やること
- 買ったJavaの本を進める
- もう1冊ポチったのでその本も進める
- javaでの開発の流れを調べる
- Javaでできてるサービス探してみてみる
- 必要な機能、要素を書き出す
- Eclipseの設定いじる、デフォルト少しみづらい
来週やること
めも
Javaの資格試験があることを知った
試験を知る- 個人の方 - Java™プログラミング能力認定試験│資格検定のサーティファイ│あなたのスキルアップを応援します|
Javaのこと
【スッキリわかるJava入門 第3版】
7章
・定義:ソフトウェアを開発する時に用いる部品化の考え方のこと
・メリット:楽して楽しくいいものを作れる →教科書的には、 「柔軟性が上がる」「保守性が上がる」:プログラムの変更が容易になる 「再利用性が上がる」:プログラムの一部を簡単に転用できる
・オブジェクト指向による部品化のルール:現実世界に出てくる登場人物の単位で、プログラムをクラスに分割する
・〜指向とは:〜を大切にした、〜を中心に捉えたという意味
・開発者は神様のような存在
・本質:人間が慣れ親しんで把握している現実世界を真似してプログラムを作れば、それは人間にとって把握しやすいものになる →現実世界の登場人物とその振る舞いをコンピュータの中の仮想世界にオブジェクトとして再現し、現実世界と同じように連携して動くようにプログラムを作ること
・それぞれのオブジェクトは、情報保持と行動の責任を果たすために、属性と操作を持っている →属性:ピカチュウ、でんきタイプ、HP〇〇。操作:戦う、逃げる。とか
・継承:部品の流用 →ピカチュウ、という部品があれば、「でんきだまを持ったピカチュウ」もすぐ作れる
・多態性:似ている2つの部品を同じようなものとして利用できる →ピカチュウの「たいあたり」と、ピチューの「たいあたり」は、動き方としては少し違うかもだけど、同じ「たいあたり」とする
・カプセル化:属性や操作を一部の相手から利用禁止にする機能 →例えが浮かばない。。。
8章
・仮想世界の中で活躍するのはオブジェクト、クラスはオブジェクトを作るための型 →だけど、オブジェクトという時にはクラスのことをさすこともあるから、クラスから「インスタンス」を作ると表現する。 ピカチュウクラスから、ピカチュウインスタンスを4匹作る、とか。
・mainメソッド:登場人物にどう動くか指示をする天の声
・Javaプログラムの組成に必要なクラスは、mainメソッドを含む1つの「神様クラス」と現実世界の登場人物を模した複数の「登場人物クラス」
・クラス図(class diagram):設計内容を上から「クラス名」「属性」「操作」の一覧として並べる書き方。 →世界共通の設計図として定義されたUML(Unified Modeling Language)で定められている図の一つ
・操作を定義するには4つを考える必要がある。 →操作の名前 →操作する時に必要な情報一覧 →操作の結果として指示もとに返す情報 →処理内容
・this:「自分自身のインスタンス」を意味する
・staticをつけるつけないの話題は14章
・クラス名は先頭大文字、フィールド名とメソッド名は最初の単語以外は大文字
・クラスを定義すると、Javaで利用可能な型の種類はどんどん増えていく →いつでも準備されているStringやintだけでなく、Pikachukクラスを定義したら、Pikachu型も使えるようになる →インスタンスは、クラス型変数に入れて利用する →同じクラスからインスタンスを2つ生み出したら、どっちがどっちかわからなくなる →それぞれ、p1とp2にってしたらどっちがどっちかわかるようになっている。
9章
・クラス型をフィールドに用いる →あるクラスが別のクラスをフィールドとして利用している関係を「has-aの関係」という →ピカチュウがでんきだまを持っているpikachu has a denkidama
・コンストラクタ:インスタンスが生まれた直後に自動実行される処理をあらかじめ定義できるようになっている →newされた直後に自動的に実行される. 開発者が直接呼び出す手段は用意されていない →メソッド名がクラス名と完全に等しい、メソッド宣言に戻り値が記述されていない(voidもばつ)がコンストラクタと見なされる条件
・Javaでは全てのクラスはインスタンス化するとき必ず何かしらのコンストラクタを実行することになっている →本来全てのクラスは最低でも1つ以上のコンストラクタ定義を持ってないといけない
・特例で、1つもコンストラクタが定義されていない場合に限り、「引数なし、処理内容なし」のコンストラクタ(デフォルトコンストラクタ)がコンパイル時に自動的に追加される
・同一クラス内の別コンストラクタの呼び出しをJVMに依頼する方法
this(引数);
10章
継承
・継承関係
Heroが親クラス(スーパークラス) ↑ SuperHeroが子クラス(サブクラス) ↑ UltraHeroが孫クラス
・多重継承はJavaでは禁止
「Heroクラス」「Enemyクラス」 ↑ ↑ 「ハーフクラス」 はだめ
・オーバーライド:親クラスを継承して子クラスを宣言するときに、親クラスのメンバを子クラスがわで上書きすること
・宣言時にfinalがつけられているクラスは継承できない
・一部のメソッドについてのみオーバーライドを禁止したい場合はmそのメソッドの宣言にfinalを浸かる
・super:「今より一つ内側のインスタンス部分」を表す予約語 →これを使えば、親インスタンス部分のメソッドやフィールドに子インスタンス部分からアクセスできる
super.フィールド名 super.メソッド名(引数)
・孫クラスから親クラス(間に子クラスがある)は親インスタンスへアクセスできない
・Javaでは全てのコンストラクタはその先頭で必ず内部インスタンス部分(親クラス)のコンストラクタを呼び出さなければならない 親クラスのコンストラクタの呼び出し super(引数);
・「is aの原則」:子クラス is a 親クラスが正しい継承の関係。子クラスは親クラスの一種である スーパーヒーローは、ヒーローの一種である。 この原則でないと、クラスが拡張していったときに、矛盾が生じるand多態性が利用できなくなる
・子クラスになればなるほど、特殊で具体的なものに「特化」していく ・親クラスになればなるほど、抽象的で曖昧なものに「汎化」していく
・継承ツリー:継承関係を表す図のこと
11章
高度な継承
・未来に備える開発者の役割:他の開発者が効率よく安心して利用できる継承の材料を作ること
高度な継承に関する ・不都合A:継承の材料となるクラスをつくる時点では、その処理内容をまだ確定できない「詳細未定のメソッドが存在する」
・不都合B:クラスには2つの利用方法(newによる利用、継承による利用)があり、開発者はそれを自由に選ぶことができる
・抽象メソッド:現時点では何をするかを特定できないメソッド
public abstract 戻り値 メソッド名(引数リスト);
抽象メソッドを含むクラスの宣言
public abstract class クラス名{ ......... }
Javaのルール ・抽象メソッドを含むクラスは、必ずabstract付きのクラスにしなければならない
抽象クラスの制約:抽象クラスは、newによるインスタンス化が禁止される。間違ってnewされることもない
・実装(implements)する:未定だったメソッドの内容を確定させること
・インタフェースとして特別扱いできる2つの条件 →全てのメソッドは抽象メソッドである →基本的にフィールドを1つも持たない
インタフェースの宣言 public interface インターフェース名 { }
インタフェース:クラスの仲間で、抽象くらすの親玉みたいなもの
インタフェースに宣言したメソッドは自動的にpublicかつabstractになるというルールあり
implements:インタフェースを継承してこクラスを定義する場合はextendsではなくimplementsを使う
・インタフェースの効果 →同じインタフェースをimplementsする複数の子クラスたちに、共通のメソッド群を実装するように強制できる →あるクラスがインタフェースを実装していれば、少なくともそのインタフェースが定めたメソッドは持っていることが保証される
インタフェースでは特別に多重継承が許されている
public class クラス名 implements 親インタフェース名, 親インタフェース名,...{ }
12章多態性(ポリモーフィズム)
メリット:同一視して配列にまとめることができる、ざっくりとして引数を受け取れる
指示する側
・ダウンキャスト:「曖昧な型に入っている中身を厳密な型に代入する」キャスト、失敗の危険が伴う ClassCastException
instanceof演算子 変数 instanceof 型名 →安全にキャストできるかを判定する
13章、カプセル化
・アクセス修飾子、 厳しい private->package private->protected->public ゆるい
定石 ・フィールドは全てprivate ・メソッドはpublic
アクセサ:getterとsetter
getterメソッド
public フィールドの型 getフィールド名{ return this.フィールド名; }
setterメソッド
public void setフィールド名(フィールドの型 任意の変数名) { this.フィールド名 = 任意の変数名; }
getter、setterのメリット →Read Only、Write Onlyのフィールドで実現できる →フィールドの名前など、クラスの内部設計を自由に変更できる →フィールドへのアクセスを検査できる
カプセル化:あるクラスが外部から直接触られないよう、メソッドという殻によってフィールドが保護されているように見えるからこう呼ばれる
第3部、14章、API活用術
等値:同一の存在であること、h1==h2 等価:同じ内容であること、
静的メンバ:staticキーワードがつけられたフィールドやメソッドのこと
静的メソッド(クラスメソッド):staticがついているメソッド →メソッド自体がクラスに属するようになる →インスタンスにメソッドの分身が準備される
15章、文字列と日付の扱い
メソッド定義 public boolean equals(Object o):内容が等しいか調べる public boolean equalslgnoreCase(String s):大文字、おk文字を区別せず内容が正しいか調べる public int length():文字列長を調べる public boolean isEmpty():長さが0を調べる
他にも色々
・ StringBuilderクラス:文字列を連続して連結する場合に用いる
・+演算子が遅い理由 →これによって古いインスタンスは捨てられm連結後の情報を持つ新しいインスタンスがnewにより生成、+は格納される 内部で数万回newすることを意味するので、遅い処理になる。
・書式を指定して画面に表示する System.out.printf(書式文字列,パラメータ...);
・エポック:基準日時である1970年1月1日0時0分0秒のこと。ここからどれくらい距離があるかで日時情報を表現する
・Calenderクラス
16章、コレクション
・コレクションフレームワーク:データをまとめて格納するための入れ物クラス
・ArrayList:配列は宣言する際に、箱を幾つ準備するかを指定する必要があり、後から箱の数を増やすことができないが、ArrayListなどのコレクションクラスは宣言時に準備する箱の数を指定しない。データを追加しようとした際にハオが不足していたら自動的に追加されていくから
ArrayList<~> 変数名 = new ArrayList<~>;
・ラッパークラス:8つのk基本データ型に対応して、情報の中身を保持することを責務とする8つのクラス
・オートボクシング ・オートアンボクシング
・ダイヤモンド演算子:<>のこと
・イテレータ:リストの中身を一つずつ取り出す方法の一つ、リストに含まれる1つの箱を「ここ!」と指している矢印のようなもの
17章、例外
エラーの種類 ・文法エラー(syntex error) →文法の誤りでコンパイルが失敗すること。代表例はセミコロン忘れ、変数名の間違い、privateメソッドを外部から呼び出す、など →コンパイラが指摘したコードの箇所を修正する
・実行時エラー(runtime error) →実行している最中に怒って、動作が継続できなくなるエラー。代表例は配列の範囲外要素へのアクセス、0での割り算、存在しないファイルのオープンなど →あらかじめエラーが発生した時の対応策を記述しておき、自体を回避
・論理エラー(logic error) →実行結果が想定していた内容と違っていること。 →原因箇所を自力で探して、修正
・例外的状況(exceotional situation) →パソコンのメモリが足りなくなった →存在すべきファイルが見つからない →nullが入っている変数を利用しようとした
このような状況に陥った時に備えて準備、対策をすることを例外処理とよぶ。
try { 実行される文 } catch(例外クラス 変数名eとかexがよく使われる) { 例外発生時に実行される文 }
例外発生の如何を問わず必ず処理を実行する時
try { 実行される文 } catch(例外クラス 変数名eとかexがよく使われる) { 例外発生時に実行される文 } finally { 例外があってもなくても必ず実行する処理 }
開いたファイルを閉じる、開いたデータベースやネットワークとの接続を閉じるなど、後片付け処理にはfinallyを使う
??ってなったところ
・P209~
・JDKがつまりどれのことなのかわかってない
・javac
・6章だいたいわかってない
8章 ・インスタンスを型に入れて名前つけて作ると、たくさん作れば作るほど名前は増えるってことなら、ポケモンとかってなんて名前がついてるんだろう
11章以降は飛ばし気味、また戻ってくる ・インタフェースがビミョい
staticの付け所
15章、16章は使う時にまた戻ってきて確認する。時間のところあたりとか
16章もめっちゃさらっと流し見
17章はなんとなくわかるけどちゃんと戻ってくる