0
        public class A{
          public static void main(String[] args){
           static final int MAX_VALUE = 100; //COMPILE TIME ERROR
           System.out.println("MAX_VALUE");
          }
        }

为什么static final int MAX_VALUE=100;给出编译时错误,它给出的错误是“参数 MAX_VALUE 的非法修饰符;只允许 final ”

4

10 回答 10

5

您不能在方法内声明静态变量。静态变量属于类;在方法中声明的变量是局部变量,属于该方法。

于 2013-07-29T10:56:27.823 回答
1

局部变量不能是静态的。您可以创建最终局部变量或最终静态类变量(实际上是常量,顺便说一句。),但不能创建局部静态变量:

public class A{
    static final int CLASS_CONST = 42;

    public static void main(String[] args){
       final int LOCAL_CONST = 43;

       ...
    }
 }
于 2013-07-29T10:56:55.573 回答
1

静态变量属于类。不是方法

在 a 中声明的变量methodlocal variables并且属于 that method

所以它变成

final int MAX_VALUE = 100;

喜欢阅读: 关于了解实例和类成员的文档

于 2013-07-29T10:56:57.003 回答
1

关键字static不能在方法内部使用。这将是有效的代码:

public class A{

   static final int MAX_VALUE = 100; // This line can't go in a method.

   public static void main(String[] args){
      System.out.println("MAX_VALUE: "+MAX_VALUE);
   }
}
于 2013-07-29T10:58:10.297 回答
0

您不能static在方法中删除事物。将其向上移动一行。

于 2013-07-29T10:56:48.327 回答
0

您不能在方法中创建静态 final,您必须在方法之外创建它:

public class A {
          static final int MAX_VALUE = 100;

          public static void main(String[] args){
             System.out.println("MAX_VALUE");
          }
        }
于 2013-07-29T10:57:13.137 回答
0

你应该在类 A 中声明这个常量,而不是在main()方法 中

public class A{

    static final int MAX_VALUE = 100; //COMPILE TIME ERROR

    public static void main(String[] args){
        System.out.println("MAX_VALUE");
    }
}
于 2013-07-29T10:58:10.080 回答
0

改变

public class A{
      public static void main(String[] args){
       static final int MAX_VALUE = 100; //COMPILE TIME ERROR
       System.out.println("MAX_VALUE");
      }
    }

public class A{
      static final int MAX_VALUE = 100; //NO ERROR YAY!!

      public static void main(String[] args){
       System.out.println("MAX_VALUE");
      }
    }
于 2013-07-29T10:58:32.140 回答
0

静态变量是类级别的变量,你不能在方法中声明它们。
根据文档

有时,您希望拥有所有对象共有的变量。  
这是通过静态修饰符完成的。具有静态的字段
声明中的修饰符称为静态字段或类变量。
它们与类相关联,而不是与任何对象相关联
于 2013-07-29T11:04:24.503 回答
0

其他人已经指出静态成员属于类而不是特定实例。因此,您不必创建类实例来使用静态成员,而是可以直接调用 SomeClass.SOME_STATIC_MEMBER。

如果不实例化该类,则不能调用非静态类的任何其他成员。意思是如果你有——

public class SomeClass {

    public int add (int x, int y){
        return x + y;
    }

}

要使用上面 SomeClass 的add方法,您必须先实例化-

SomeClass someClass = new SomeClass();
int sum = someClass.add(5, 10);

因此,允许我们在非静态方法中声明静态成员是没有意义的,因为我们要使用该方法,我们必须实例化该方法所属的类。

于 2013-07-29T11:19:45.880 回答