ソースファイル
 オブジェクト指向
 クラス
 Javadocコメント
 Javadoc
 クラスの利用
 インスタンス
 コンストラクタ
 ガベージC
 パッケージ
 アクセス修飾子
 アクセサメソッド
 thisキーワード
 static修飾子
 オーバーロード
 継承
 オーバーライド
 superキーワード
 参照型の型変換
 抽象クラス
 インターフェース
 例外処理
 Exceptionクラス
 Java API
 Jar

 ソースファイルの形式
 ・ソースファイルは「クラス」単位で構成(例、Sample.java) class BlockSample { // クラス名ブロック{} public static void main(String[] args) { // mainメソッドインデント System.out.println("Hello World"); // ステートメントコメント } }
 オブジェクト指向(Object Oriented:OO)
 ・オブジェクトを中心にしてシステムをとらえる。(操作手順とは異なる。)
 ・オブジェクト指向では、「カプセル化」「継承」「ポリモフィズム」などの概念を用いる。
 ・オブジェクト
現実世界における実態や概念
個別に認識できる存在
オブジェクトは「属性」と「振る舞い(操作)」を持つ。
 ・属性
オブジェクトの特徴や特性を表す。
 ・振る舞い
オブジェクトの機能や働きを表す。
 ・カプセル化
オブジェクトの属性とその属性に対応する操作を一体化
他のオブジェクトから属性を直接アクセスさせない仕組み
公開された操作(アクセッサメソッド)を通してのみアクセスできる。
 ・継承
 ・ポリモフィズム
 ・現実世界における実態
物理的に存在し、名前を付けて呼べる物
 ・現実世界における概念
存在が目に見えなくても、概念として名前を付けて呼べる物

 クラス
 ・世の中に複数存在する類似オブジェクトの中から共通する属性や振る舞いを抽出
 ・概念として名前を付ける。(抽象化する。)
 ・抽象化の度合い
オブジェクトをどう見るかどう扱うかで、クラスとして抽出する内容が異なる。

 Javadocコメント
 ・クラスやクラス内に定義したメンバの直前の行にそれぞれの説明を記述
 ・「/**」から「*/」で囲まれた領域がコメント
 ・Eclipseによる補助:「/**」Enter

 Javadoc
 ・Javadocコメントをもとに、クラスなどの仕様書を生成する仕組み
 ・JDKに、Javadocを生成するツールを用意
Eclipseの機能を使って生成できる。

 クラスの利用
 ・Javaプログラムは複数のクラスから構成
 ・クラスは相互に利用され、プログラムとして動作する。
クラス図における依存:一方が他方を利用する関係を破線矢印「--->」で表現

 インスタンス(instance)
 ・クラスを基に生成されたオブジェクト(実態)
 ・インスタンス化:クラスを基にオブジェクトを生成すること。「new演算子」を用いる。
 ・生成されたインスタンスは、そのクラスの型の変数に代入して使う。
データ型 変数名 = new データ型()
 ・インスタンスのメンバーには「.」を用いてアクセスする。
変数名.メンバー = "abcd"

 コンストラクタ
 ・新しいオブジェクトが適切な初期状態で始まることを保証するために使用
 ・クラスの中に定義するメンバの一つ
 ・そのクラスがインスタンス化されるタイミングで実行される。
 ・コンストラクタには、オブジェクトの生成時に行いたい処理を記述する。
コンストラクタを利用し、フィールドの初期化もできる。
 ・コンストラクタが記述されないときは「デフォルトコンストラクタ」が暗黙的に付加

 ガベージコレクション
 ・Javaで不要となったメモリ領域を自動的に開放する仕組み
 ・どこからも参照されないオブジェクトはガベージコレクションの対象となる。

 パッケージ
 ・Javaのクラスを分類するための仕組み
 ・ソースコードの先頭で「package宣言」をすることで、所属するパッケージを指定
 ・階層化して扱える。
 ・デフォルトパッケージ:クラスでpackage宣言をしない場合に所属するパッケージ
 ・各クラスは、パッケージ名とクラス名を「.」で繋いだ完全修飾名で明確に区別

 アクセス修飾子
 ・クラスや、クラスのメンバのアクセスレベル(可視性)を指定する修飾子
 ・アクセス修飾子を付けたメンバが利用される範囲を限定
public:異なるパッケージからもアクセス可能
protected:同一パッケージ内のクラス及びサブクラスからアクセス可能
指定なし:同一パッケージ内のクラスからアクセス可能
private:同一クラス内のメンバからアクセス可能
 ・クラスに付けれるアクセスレベルは、「public」と「指定なし」

 アクセサメソッド
 ・getter/setter ともいう。
 ・カプセル化で情報隠蔽されたクラスのメンバ変数の値を設定・取得するメソッド

 thisキーワード
 ・インスタンス内のメンバを明示的に指し示すためのキーワード
 ・thisキーワードは、キーワードが書かれているクラスのインスタンス自身を指す。

 static修飾子
 ・クラスのフィールドやメソッドに付ける修飾子
 ・static修飾子を付けたメンバ
クラスをインスタンス化しなくても利用できる。
文脈によって様々な呼称で呼ばれる。

 オーバーロード
 ・同一クラス内に、同じメソッド名で異なる引数を持つメソッドを定義
メソッド名を変えずに、複数の引数パターンに対応する。

 継承(インヘリタンス、inheritance)
 ・既に定義されているクラスを基に、拡張や変更を加えた新しいクラスの定義
汎化/特化を実現
スーパークラス(親クラス):継承の元になるクラス
サブクラス(子クラス):継承で新たに定義したクラス
サブクラスは、extendsキーワードを用いて定義
 ・サブクラスのサブクラス
Javaでは、言語仕様上スーパークラスを一つしか指定できない。(単一継承)
サブクラスを継承してサブクラスを定義できる。
 ・すべてのクラスのスーパークラス(Objectクラス)
Java標準クラスライブラリ(Java API)に定義されたjava.lang.Objectクラス
すべてのクラスは、Objectクラスを継承する。
extendsキーワードを用いないクラスは、暗黙的にObjectクラスを継承
 ・final修飾子のついたクラスは継承できない。
 ・継承関係のあるクラス間でも、アクセス修飾子の制限を受ける。
スーパークラスのprivateメンバには、サブクラスから直接アクセスできない。
 ・サブクラスのインスタンス化とコンストラクタ
スーパークラスのコンストラクタ処理後、サブクラスのコンストラクタ処理
コンストラクタ処理の先頭で引数無しのスーパークラスのコンストラクタ処理
 ・super()によるコンストラクタ呼び出し
super()により、スーパークラスの任意のコンストラクタを明示的に呼び出せる。
サブクラスのコンストラクタの処理の先頭に記述

 オーバーライド
 ・スーパークラスで定義されたメソッドをサブクラスで再定義
スーパークラスのメソッドと同じメソッド名・引数で、異なる振る舞いを定義
 ・オーバーライドしたメソッドの戻り値の型はスーパークラスと同一か、継承された型
 ・オーバーライドしたメソッドの修飾子
スーパークラスに定義されたメソッドよりもアクセスレベルを低くできない。
final修飾子のついたメソッドはオーバーライドできない。
 ・@Overrideアノテーションの付加で正しくオーバーライドしているかコンパイラがチェック

 superキーワード
 ・スーパークラスに定義されたメンバーを明示的に指し示すためのキーワード
 ・thisキーワードは、キーワードが書かれているクラスのインスタンス自身を指す。

 参照型の型変換
 ・サブクラスのインスタンス
スーパークラス型のオブジェクトとして扱える。(暗黙的な型変換:アップキャスト)
 ・アップキャストしたオブジェクト
再びサブクラスの型にキャストできる。(明示的な型変換:ダウンキャスト)
ダウンキャストには、キャスト演算子「()」を利用
 ・参照型変数を通してアクセスできるメンバ
同じ参照型変数の型(クラス)で定義されているメンバ

 ポリモフィズム
 ・異なる振る舞いを持つオブジェクトを同一の操作で扱うことができる性質
 ・操作している側は、オブジェクトの振る舞いの違いを意識しないで操作できる。
 ・多態性、多様性などという。

 抽象クラス
 ・継承されることを前提のクラス
 ・インスタンス化できないクラスとして定義
 ・抽象クラスには、オーバーライドされることを前提とした「抽象メソッド」を定義できる。
具体的処理を持たないため、ブロック{}は記述できない。
抽象メソッドには、private/static/final修飾子を付けられない。
 ・抽象クラス、抽象メソッドには「abstract修飾子」を付ける。
 ・具象クラス・実装クラス・実現クラス:抽象クラスを継承してインスタンス化できるクラス
 ・具象クラスの役割と目的
「クラスの雛型」としての役割を持つ。
抽象クラスを継承するサブクラスに抽象メソッドのオーバーライドを強制できる。
 ・具象クラスの利用
抽象クラスを継承したサブクラスを定義
サブクラスで、抽象クラスの抽象メソッドをオーバーライドする。
サブクラスのインスタンスを抽象クラスの型で扱い、ポリモフィズムを実現する。

 インターフェース
 ・外部からの見立てや、振る舞いの使用を定めることに特化した型定義の仕組み
 ・interfaceキーワードを用いて定義
 ・インターフェースには定数や抽象メソッドなど、限られたメンバしか定義できない。
クラスにインターフェースを実装することで利用
 ・インターフェースのメンバ
定数(final扱い)
抽象メソッド(abstract扱い)
defaultメソッド(Java8以降)
staticメソッド(Java8以降)
メンバのアクセスレベルは記述しなくてもpublic
 ・インターフェースの実装
implementsキーワードを用いてクラスに実装
クラスでは、インターフェースの抽象メソッドをオーバーライドする。
インターフェースを実装したクラスは、その型で扱える。(ポリモフィズムの実現)
多重実装可
サブインターフェースの定義可

 例外処理
 ・Java標準クラスライブラリのExceptionクラスのサブクラスとして様々な例外クラス
 ・例外発生で例外パターンに応じた例外オブジェクトがJVMから生成されthrowされる。
Throwableクラス:すべてのエラーと例外のスーパークラス
Errorクラス及びサブクラス:ハードウェアなどに関連するエラー
Exceptionクラス及びサブクラス:プログラムにおける一般的な例外で処理が必要
 ・try-catch構文による例外処理
例外をキャッチするための構文
tryブロックで例外が発生すると処理が中断、catchブロックに処理が移る。
 ・throw宣言による例外処理
チェック例外が発生しうるコードを記述する場合、メソッドの呼び出し元に処理を委譲
非チェック例外では、通常、throw宣言はしない。
 ・任意の例外オブジェクトの生成とthrow
例外クラスのオブジェクトは「new演算子」で任意に生成できる。
生成した例外クラスのオブジェクトは、「throw命令」でthrowできる。

 Exceptionクラス
 ・チェック例外
可能性のあるコードは例外処理がないとコンパイルエラー
 ・非チェック例外
例外処理が適切でない場合、例外発生時に強制終了
 ・代表的な例外クラス
    代表的な例外クラス 主な例外発生理由
 非 ArithmeticException ゼロ除算など
 非 ArrayIndexOutOfBoundsException 不正なインデックスで配列にアクセス
 非 NullPointerException 参照先がnullのオブジェクトのメンバ呼び出し
  java.io.IOException 何らかの入出力に関する例外

 Java API
 ・Javaでよく使用される機能を持ったプログラム
あらかじめJDKに用意
 ・Java APIドキュメント
Javaのバージョンにより内容が異なる。

 Jar(Java ARchive)
 ・多数のファイルを1つのファイルに集約、圧縮するためのファイル形式
jarファイルは、javaコマンドに-jarオプションを付けて直接実行できる。
 ・jarの圧縮方式は、zip方式と同じ
直接拡張子を入れ替えても正常に動作する。
 ・Eclipseで実行可能なjarの作成
ファイル→エクスポート、Java→実行可能JARファイル
エクスポートするプロジェクトの起動構成を選択
jarファイルのエクスポート先、ファイル名を指定→完了