アクセス制限
クラスにも、クラス内のデータ(オブジェクトを含む)やメソッドにも、すべてアクセス制限が付きます。
アクセス制限とは、そのクラスやデータやメソッドなどに、どこからアクセス可能かという範囲を指定するものです。
コードを管理していく上でも重要な決まり事となります。隠蔽する事でソースコードの保守性が高まるからです。
- public修飾子
public int age; Sake wine = new Sake("white",2008); wine.age = 2001; // ageがpublicだと可能
publicの付いた変数はこのクラスのオブジェクト内外から一般的にアクセス可能です。
classの前にpublicが付いていないと、ほかのクラスの中でオブジェクトを作る事ができなくなります。
- protected修飾子
protected int age;
protectedが付いた変数は、この変数が属するオブジェクト内部の他にこのクラスが属するパッケージ内のオブジェクトやこのクラスのサブクラスのオブジェクトからアクセス可能になります。
- 無修飾子
int age;
protectedと同じように同一パッケージやオブジェクトからアクセス可能となります。
- private修飾子
private int age;
この変数が属するオブジェクトからのみアクセス可能となります。一般的にはprivate修飾子を付ける事でコードの保守性が高まります。
- static
private static void main(String[] args){ ・・・・・・
クラスを書いていく時に、そのクラスから作られるオブジェクトに属するデータやオブジェクトではなくクラス自体に属するデータやメソッドが必要ならそれらにはstatic修飾子をつけます。
- final
static final int age = 18;
finalというからに「最終的に」変更したくないものに対して付けます。finalが付いている変数などに代入などをするコードが書いてある場合にはコンパイル段階でエラーを吐きます。このように普遍的なデータは個々のオブジェクトではなく、static、すなわちクラスに属するデータにします。
- abstract
public abstract void swim();
クラスの中のどれかのメソッドの処理内容を具体的に書かずに、具体的な処理内容はそのクラスの多様なサブクラスに任せるときに、メソッドの名前にabstractを付けます。一般的な処理を定義する時などに使われます。
- synchronized
処理が正しい時間順に行われなければならない場合などに使います。
スレッドが待ち行列を作りデータが壊れないような書き込み処理などを行う場合に使います。
- その他
- volatile
- transient
- native
- strictfp