9
class Test {

    public static void main(String[] args) {
        private int x = 10;
        public int y = 20;
        protected int z = 30;
        static int w = 40;  
        final int i = 50;
    }
}

ここで適用できる唯一の修飾子は finalです。他の修飾子の場合、プログラムはコンパイラ エラーを返します。何故ですか?詳しく説明してください。

4

3 に答える 3

11

要するに、そのコンテキストでは他の修飾子は意味がありません。変数がpublicprivateprotected、またはstatic単にメソッドが終了するとスコープ外になる (そしてガベージ コレクションされる) ローカル変数のコンテキストでは意味がありません。これらの修飾子は、クラスフィールド(およびメソッド) の可視性 (または の場合はstaticスコープ) を定義するためのものです。

finalローカル変数のコンテキストで意味のある唯一のものです。これは、最初の宣言後に変数を変更できないことを意味するだけであり、アクセス制御とは何の関係もないためです。

于 2013-10-03T18:45:36.863 に答える
0

これらの宣言はすべてローカル変数宣言であると考えてください。

詳細については、ローカル変数を構成できると述べているJava 言語仕様を参照してください。

LocalVariableDeclarationStatement:
    LocalVariableDeclaration ;

LocalVariableDeclaration:
    VariableModifiersopt Type VariableDeclarators

どこ

VariableModifiers:
    VariableModifier
    VariableModifiers VariableModifier

VariableModifier: one of
    Annotation final

VariableDeclarators:
    VariableDeclarator
    VariableDeclarators , VariableDeclarator

VariableDeclarator:
    VariableDeclaratorId
    VariableDeclaratorId = VariableInitializer

VariableDeclaratorId:
    Identifier
    VariableDeclaratorId []

VariableInitializer:
    Expression
    ArrayInitializer

したがって、唯一許容されるのVariableModifierfinal(およびまれな注釈) です。

于 2013-10-03T18:46:07.373 に答える