Java8_21:パッケージとアクセス修飾子

パッケージ

・目的:関連するクラスをまとめる、名前の衝突を避ける
・組織のドメインを逆にした文字列が推奨

アクセス修飾子

パッケージのトップレベルにあるクラス

・public
・package private:何も付けない場合: 同じパッケージからのみ呼び出すことが出来る
・アプリの起点であるmain()があるクラスはpublicに指定する。
・main()メソッドもpublicになる。

フィールドとメソッド

・private:同じクラスからのみ呼び出せる
・protected:同じパッケージからのみ呼び出せる。ただし別のpackageであってもサブクラスからは呼び出せる。

・フォルダとファイルの作成
 \java_lessons\com\dotinstall\myapp\model\User.java
 \java_lessons\com\dotinstall\myapp\model\AdminUser.java
 \java_lessons\com\dotinstall\myapp\MyApp.java

・パッケージに含めるには、宣言が必要となる。
 packege (フォルダ名).(フォルダ名)
 ※フォルダ名とドットでつなげる

パッケージのコンパイル

・他のパッケージを読み出す場合は、importで読み出すことが出来る
・起点となるmainメソッドを含むクラスをコンパイルすると、そこから呼び出される全てをコンパイルすることができる。

getter, setter

・一つのソースファイルにつき、publicなクラスは一つだけ。
・フィールドは、基本的にはprivate とする。
・privateなフィールドに値を設定するメソッドをsetter, 値を取得するメソッドをgetterと呼ぶ

static

staticフィールド(クラス変数)

・個々のインスタンスで値を保持するのではなく、クラスで保持する。
・アクセス時は、「クラス名.フィールド名」となる(thisは使えない)

staticメソッド

インスタンスを作らずに実行できる。
・main()もstaticメソッドである。

staticイニシャライザ

・ static { }の括弧内に記述する
・クラスが初期化される際に行う処理を書く(クラス変数の初期化など)

インスタンスイニシャライザ

・{}の中に記述する
インスタンス化される前に実行される:インスタンスイニシャライザ
インスタンス化された後に実行される:コンストラク
・主な用途:コンストラクタがオーバーロードされており複数ある場合、共通処理を書いておく。

final:変更できない

・クラス  :クラスを継承できなくなる
・メソッド :オーバーライド出来なくなる
・フィールド:定数(static finalの形でよく使われる。インスタンスごとに値を持たせるより共通にした方が良い

抽象クラス(abstract)

・目的:関連するクラスの共通部分だけを切り出して具象クラスに実装を任せる(大規模開発用)
・他のクラスに継承されることを前提とするクラス(それ自体はインスタンス化できない)
・抽象クラスを継承するクラスを具象クラスと呼ぶ
・メソッドにもabstractを付けると、具象クラスで実装されなかった場合にエラーを出す。

インターフェース

・クラスの機能を拡張する仕組み
・Interfaceに続けてインターフェースの名前を入力する
・インターフェースを使う場合は、クラスにimplementsを使う。
・継承との違い:インターフェースは、いくつでも適用が可能

要素

・定数      :public static finalを省略できる
・抽象メソッド  :public abstractを省略できる
・defaultメソッド :直接実装を書く
・staticメソッド :インターフェースに属するメソッド。defaultメソッドが複雑になったときに処理をまとめるという使い方がある。

列挙型(C言語との違い)

・変数として定義したあと、変数名.oridinal()とすることで値を取り出すことができる。

例外処理

・例外が発生する可能性のある処理をtry{}で囲む
・エラーが出たら、catch(エラー名 e){}として、括弧内にエラー時の処理を書く
・標準でExceptionクラスがある。独自の例外処理を行う場合は、Exceptionクラスを継承してクラスを作成し、その中のメソッドに独自エラー処理を記述する。(コンストラクタでエラーメッセージを受け取ることが出来る)
・エラーを投げる場合は、キーワードthrowを使う