有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java错误仅允许对参数进行非法修改

下面的代码有什么问题

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

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

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


共 (6) 个答案

  1. # 1 楼答案

    如何修复它

    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";
    }
    

    说明

    要理解原因,您需要了解三个修饰符(publicstaticfinal)各自的含义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的值在赋值后永远不会更改

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

  2. # 2 楼答案

    当您将字符串变量声明为public static final String Name=“Robin Wilson”

    根据java规则,当您在Main方法中声明该字符串时,该字符串name是局部变量。所以这里只允许期末考试。 您可以将其定义为**final String name=“Robin Wilson”**在主要方法中。 对于局部变量,仅允许最终

  3. # 3 楼答案

    不能对局部变量使用公共静态修饰符。执行以下任一操作:

    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. # 4 楼答案

    您的问题已修改为:

    I want to understand why it is not permitted, though both are static?

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

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

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

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

  5. # 5 楼答案

    您不能将局部变量(方法中的变量是局部变量)声明为public static。相反,以下代码将起作用:

    public static void main(String[] args){
            final String Name = "Robin Wilson";
        }
    
  6. # 6 楼答案

    您不能在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";
    }