当前位置: 首页 > 知识库问答 >
问题:

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

刁茂才
2023-03-14

以下代码有什么问题

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

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

我同意下面给出的建议,但我想了解为什么这是不允许的,尽管两者都是静态的?

共有3个答案

尚楚
2023-03-14

你不能在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";
}
黎鹤轩
2023-03-14

publicstatic不能在方法定义中使用。因此,这个错误告诉您,方法内部定义的变量所允许的唯一修饰符是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";
}

要理解为什么,您需要理解三个修饰符(公共静态最终)各自的含义。String Name只是说我们跟踪一个String并称之为Name

class MyClass
{
    public String Name = "Robin Wilson";
}

公共代码表示程序的任何部分都可以读取它(否则只能由写在MyClass类中的代码读取)。

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

class MyClass
{
    static String Name = "Robin Wilson";
}

static表示Name变量是类本身的一部分,而不是类的实例。换句话说,MyClass类的所有实例共享相同的Name变量。

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

class MyClass
{
    final String Name = "Robin Wilson";
}

final表示Name的值在分配后永远不会更改。

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

毛越
2023-03-14

您的问题已修改为:

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

方法中的变量只存在于堆栈框架上。每次调用一个方法时,JVM都会创建一个新的堆栈帧,一旦该方法完成,它就会被丢弃。

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

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

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

 类似资料:
  • 我是爪哇的新手,我想在爪哇做一个学校的任命。这是一个遵循MVC模式的小游戏(我不知道它应该如何工作,我所了解的只是这个方法在“包”中分离代码,所以我们只需要修改一些包中的元素,例如,使游戏看起来完全不同;对吗?)。 因此,我们使用JFrame和JPanel包创建了一个启动框架。现在是时候在控制器包中的类名“Control”中创建main()方法了: 现在,我的老师要求我:“私下声明StartupG

  • 所以我对Java还是新手,所以这可能真的很愚蠢,但我找不到答案,所以我们开始吧!在我的代码的开头,我试图简单地用“public class robot{}”来声明这个类,然而,它给了我一个错误“本地类的非法修饰符___;;只允许使用抽象或final”。我在互联网上看到的每一个地方,它都说不要称之为静态类,但我不是!!!这可能真的很蠢,我还不知道,因为我还是新手。请帮忙!这是我的代码:

  • 我写的代码有一个错误消息。一切都应该是好的,因为这些例子都有相同的代码,但是不知何故我得到了一个错误。错误消息说: 期望令牌上 ")",; 语法错误-参数onOptionsItem选择的非法修饰符;只允许最终-期望令牌 "(",; 语法错误

  • 问题内容: 开闭原则指出:“软件实体(类,模块,功能等)应为扩展而开放,而为修改而封闭”。 但是,约书亚·布洛赫(Joshua Bloch)在其著名的著作《有效的Java》中给出了以下建议:“设计和文档化继承,否则禁止继承”,并鼓励程序员使用“最终”修饰符禁止子类化。 我认为这两个原则显然彼此矛盾(我错了吗?)。编写代码时遵循什么原则?为什么?您是否让类保持打开状态,禁止继承其中的某些类(哪些?)

  • 我目前正在从我找到的教程在Eclipse中构建一个应用程序,但我在代码中有错误。 我在下面包含了主要活动文件(MainActivity.java): 错误是这样写的 存在“变量levelNames的非法修饰符;只允许使用final” 有人有什么想法吗?

  • 我正在编写代码以匹配给定字符串或行的方法声明。这就是我的问题所在。当试图匹配修饰符时,当声明 工作。我一直都是这样 这就是我的问题。两者有什么区别,所有修饰符都一样吗?我相信这是有原因的,松散的顺序不是设计决定。 哦,如果有人知道匹配给定字符串的方法的最佳方法,请告诉我。谢谢。现在我正在使用正则表达式。