Java错误 - 参数的非法修饰符 - 仅最终允许

时间:2014-01-22 10:17:54

标签: java

以下代码有什么问题

public static void main(String[] args){
        public static final String Name = "Robin Wilson";
    }

字符串引用名称显示编译错误 - Java错误 - 参数名称的非法修饰符 - 仅限最终允许

对于以下给出的建议可以,但我想理解为什么它不被允许,尽管两者都是静态的?

9 个答案:

答案 0 :(得分:22)

您已修改过您的问题:

  

我想理解为什么它不被允许,尽管两者都是静态的?

方法内的变量仅存在于堆栈帧上。每次调用方法时,JVM都会创建一个新的堆栈帧,并在方法完成后将其丢弃。

public关键字用于控制访问的类,方法和字段。没有可以应用于堆栈(本地)变量的访问概念。它只在被调用时存在于方法内部,并且只能在方法中访问。

static关键字在字段上用于表示在类的所有实例中只存在一个此类成员,以及将这些成员创建为不需要实例的类成员的方法。堆栈中的任何东西都没有静态的概念;这是暂时的。从方法调用返回后,堆栈框架及其上的所有局部变量将不复存在。

基本上,在谈论局部变量时都没有任何意义。

答案 1 :(得分:7)

如何解决

window?.backgroundColor = myColor public 不能在方法定义中使用。因此,此错误告诉您,方法中定义的变量所允许的唯一修饰符是 static

您可以通过删除有问题的修饰符来修复它:

final

或将变量定义移出类似

的方法
class MyClass
{
    public static void main(String[] args){
        final String Name = "Robin Wilson";
    }
}

解释

要了解原因,您需要了解三个修饰符(class MyClass { public static void main(String[] args){ } public static final Name = "Robin Wilson"; } publicstatic)各自的含义。 final只是说我们正在跟踪String Name并将其称为String

公共

Name

class MyClass { public String Name = "Robin Wilson"; } 表示程序的任何部分都可以读取它(否则它只能由public类中编写的代码读取。)

MyClass指定其他代码可以访问的内容。在一个方法里面这没有意义。在方法内部定义的变量只能在该方法内部访问,一旦方法完成,它们就会被抛弃。因此,这些变量不可能是public

静态

public

class MyClass { static String Name = "Robin Wilson"; } 表示static变量是类本身的一部分,而不是类的实例。换句话说,Name类的所有实例共享相同的MyClass变量。

Name指定如何访问它(在类的实例上或通过类本身)。在方法内部这没有意义,因为局部变量在方法关闭后被丢弃,因此没有其他任何东西可以访问它。

最终

static

class MyClass { final String Name = "Robin Wilson"; } 表示final的价值在分配后永远不会改变。

Name描述了如何使用变量。它在一个方法中是有意义的,因为它与访问无关。

答案 2 :(得分:3)

您无法在main内声明此内容,将其置于方法之外,您希望将其作为[类成员]:

public static final String Name = "Robin Wilson";
public static void main(String[] args) throws IOException {  }

否则(我不认为这是你想要的)只需从那里删除public static并简单地写:

public static void main(String[] args){
    final String Name = "Robin Wilson";
}

答案 3 :(得分:1)

您不能将public static modifier用于局部变量。执行以下任何操作

public static void main(String[] args){
        final String Name = "Robin Wilson";
    }

或将其声明为成员变量

public static final String Name = "Robin Wilson";

public static void main(String[] args){

 }

请记住,final是唯一的局部变量修饰符

答案 4 :(得分:0)

您不能将{1}}声明局部变量(方法内的变量是局部变量)。相反,以下代码将起作用:

public static

答案 5 :(得分:0)

因为你将String变量声明为 public static final String Name =“Robin Wilson”;

根据java规则,当您在 Main 方法中声明时,此String name 是Local变量。所以这里只允许最终决定。 您可以将其定义为** final String name =“Robin Wilson”; **在main方法中。 本地变量仅允许最终

答案 6 :(得分:0)

组件的静态声明在类级别上可用。在方法中声明组件使得在方法的堆栈存储器中可用,因此只能通过对象访问。静态属于全班。因此,在声明变量static时没有意义。如果您尝试这样做,您甚至会收到编译时错误。 enter image description here Final关键字与内存无关。

答案 7 :(得分:0)

这意味着您应该在“ main”块之外编写静态函数。它将正常工作。享受

答案 8 :(得分:-1)

private、protected 和 public 修饰符不能用于方法内部的变量。这是因为方法中只能有局部变量。

Java 只是告诉您当时唯一允许的修饰符是 final 关键字。