Java-修飾子



アクセス修飾子

クラスのメンバー変数、メンバーメソッドへのアクセス(参照可能スコープの制御)は以下の定義により制限できます。

クラス、インタフェース、メソッド、コンストラクタ、変数の修飾子として利用できます。

public 全てのクラスから参照可能です。
protected 同じクラス、同一パッケージ内のクラス、サブクラスからのみ参照可能です。他クラスからのアクセスをプロテクトします。
private 同じクラスからのみ参照可能です。

static修飾子

static宣言は、使用場所により意味が変わります。

class A{
    static int s; //静的変数

    // 静的ブロック
    static{
        System.out.println("静的ブロック");
    }
    // 静的メソッド
    static void hoge(){
        s = -10;
    }
}

class Test{
    public static void main(String args[]){
        A.hoge()
        A.s = 5;
        A a = new A();
    }
}

final修飾子

finalは上書き禁止を意味します。

使用場所により、意味が変わります。

final class クラス名 {
    :
}
class クラス名 {
    final 型 メソッド名(引数) {
        :
    }

    public static final int s = 5;
}

abstract修飾子

abstractは、抽象修飾子と呼ばれ、定義を持たない(宣言のみ)ことを示します。

クラス作成時点では、形式のみ決まっていて実装が決まらないメソッドに対して指定します。

サブクラスで必ず実装しなくてはならない機能を明示することが主な利用目的です。

abstract class クラス名 {
        :
    abstract 型 メソッド名(引数) ;
        :
}

synchronized修飾子

synchronizedは、マルチスレッド環境でメソッドを実行した場合、メソッドのインスタンスに対して排他制御を行います。

synchronizedが指定されたメソッド・ブロックが属するオブジェクトはメソッド・ブロックを実行している間、同じオブジェクト内のsynchronizedが指定されたメソッド・ブロックからアクセスされないようロックされます。

class クラス名 {
    synchronized 型 メソッド名(引数) {
    }
}

下記のように記述することもできます。

class クラス名 {
    void メソッド() {
        synchronized (this) {
       }
    }
}

volatile(揮発性)修飾子

volatile修飾子は、その変数が複数のスレッドからアクセスされても 内容が同期されることが保障されます。

Javaにおけるマルチスレッドは、処理の最適化などの理由でメインメモリの内容を個々のスレッドが保持している作業メモリにコピーして処理を行うことがあります。

このとき、作業メモリとメインメモリの間で不整合が生じる可能性があり、同じ変数でもスレッドによって値が異なるという現象が発生します。

複数のスレッドから参照される可能性のある変数にvolatileを指定することで、この問題を回避することができます。

class クラス名 {
    //以下のように宣言すると複数のスレッドから参照されても不整合は生じない。
    volatile int nCount;
}

transient修飾子

一時的な変数であり、「オブジェクトのシリアライズ(直列化)」の対象から除外されます。

オブジェクトのシリアライズとは「オブジェクトの情報をストリーム化」することであり、オブジェクトをファイル保存したり、 ネットワークで送信することができるようになります。

class クラス名 {
    transient String buf;
}

native修飾子

nativeは、メソッドがネイティブメソッドであることを示します。

ネイテブメソッドは型、メソッド名、引数の型といった作法のみを定義するものであり、その実装がJava以外の言語で記述されてコンパイルされていることを示します。

class クラス名 {
    public native 型 メソッド名(引数);
}

strictfp(厳密浮動小数)修飾子

strictfpは、floatやdoubleの浮動小数点演算がプラットフォームに依存しない動作(IEEE754の仕様)で厳密に行うように指示します。

なお、strictfpを指定しない浮動小数点演算は、CPUの仕様によって若干結果が異なります。

strictfp class クラス名 {
    double d1, d2;
}

関連



スポンサード リンク