JAVA言語 修飾子

TOP > JAVA入門 >  修飾子
このエントリーをはてなブックマークに追加

修飾子

public, private, protected 以外の修飾子を解説します。
修飾子クラスインタフェースメソッドコンストラクタブロック変数説明
static××スタティック修飾子
final×××ファイナル修飾子
abstract×××抽象修飾子
native×××××ネイティブ修飾子
synchronized××××同期修飾子
transient×××××一時的修飾子
volatile×××××揮発性修飾子
strictfp×××厳密浮動小数修飾子
const××××××定数

スタティック修飾子(static)

クラスを利用する際は new でインスタンス化して利用しますが、 static の付いた 変数やメソッドは インスタンス化せずに利用可能です。
class クラス名 {
    public static final double PI = 3.14159265358979323846;

    public static void main(String[] args) {
        :
    }

    public static double sin(double a) {
        :
    }
}
java.lang.Math クラスの関数( Math.cos() など )が代表例です。
x = Math.cos(y); // new を使用せずに利用できる。

ファイナル修飾子(final)

final はクラス、メソッド、変数などを上書禁止にします。クラスに用いた場合はサブクラスを定義できない、メソッドに用いた場合はサブクラスでメソッドをオーバーロードできない、変数に用いた場合はその変数を変更できない(定数)ことを意味します。
final class クラス名 {
    final 型 メソッド名(引数) {
        :
    }

    public static final double PI = 3.14159265358979323846;
}

抽象修飾子(abstract)

abstract は抽象の意味で、クラス、インタフェース、メソッドが抽象的(不完全)であることを示します。メソッド名、引数の型などを定義しておき、実際の機能は、サブクラスで実装します。 抽象クラス はインスタンス化できないため、サブクラスを定義して不完全なメソッドの実体を作成してから使用します。
abstract class クラス名 {
    abstract void testFunction(int a);
}

揮発性修飾子(volatile)

マルチスレッドの場合、同じ変数でもスレッド毎に値が異なってしまう問題がありますが、volatile をつけることにより、この問題を回避します。
class クラス名 {
    volatile int nCount;
}

同期修飾子(synchronized)

メソッドに synchronized 修飾子を付けるとそのメソッドがマルチスレッド環境で実行された場合の排他制御が可能になります。
class クラス名 {
    synchronized void メソッド() {
        :
    }
}

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

クラスにstrictfp を指定すると、float や double の浮動小数点演算がプラットフォームに依存しなくなります(デメリットとしては若干高速性が犠牲になります)。
strictfp class クラスA {
    double x, y;
}

一時的修飾子(transient)

変数にtransient修飾子を付けることでシリアライズの対象から除外す一時的な変数として扱います。シリアライズとはファイルに保存する場合などにバイトストリームに変換する事です。
class クラス名 {
    transient String tmp;
}

ネイティブ修飾子(native)

ネイテブメソッドは型、メソッド名、引数の型を定義するだけで、C/C++言語など他の言語を用いてその中身を実装します。
class クラス名 {
    public native void testFunction(int a);
}

定数修飾子(const)

C/C++ 言語では const 修飾子は良く用いられ、値を変更することができない定数を表します。 Java では定義されていますが使用されません。