当前位置: 首页 > 面试题库 >

错误:字段名称不能声明为静态

西门淮晨
2023-03-14
问题内容
public class Application {
    public static void main(String[] args) {
        final class Constants {
            public static String name = "globe";
        }
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Constants.name);
            }
        });
        thread.start();
    }
}

编译错误: The field name cannot be declared static in a non-static inner type, unless initialized with a constant expression

解决办法?


问题答案:

Java不允许您在函数局部内部类内定义非最终静态字段。只允许顶级类和静态嵌套类具有非最终静态字段。

如果您要staticConstants班级中添加一个字段,请将其放在Application班级级别,如下所示:

public class Application {
    static final class Constants {
        public static String name = "globe";
    }
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Constants.name);
            }
        });
        thread.start();
    }
}


 类似资料:
  • 我已经建立了一个字段声明列表,需要找出每个字段的名称: 我找不到任何检索字段名称的方法。 奇怪的是,其中一个构造函数确实接受一个字段参数,所以不确定为什么它没有getter。我需要从另一个节点获取它吗? FieldDeclaration(节点列表修饰符、类型、字符串名称)创建一个FieldDeclaration。https://www.javadoc.io/doc/com.github.javap

  • 问题内容: 我试图找到为什么不能将类创建为静态类的原因?喜欢: 问题答案: 在Java中,关键字通常将一个方法或字段标记为不存在,而不是每个类实例一次,而是一次。一个类一旦存在就已经存在,因此实际上,所有类都以这种方式是“静态的”,并且所有对象都是该类的实例。 确实对 内部 类具有含义,这是完全不同的:通常,内部类实例可以访问与其绑定的外部类实例的成员,但是如果内部类为,则它没有这样的引用并且可以

  • 问题内容: 杰克逊图书馆的班级似乎是线程安全的。 这是否意味着我应该像这样将我声明为静态字段? 而不是像这样的实例级字段? 问题答案: 是的,建议您这样做是安全的。 您所引用页面的唯一警告是,共享器一旦被共享便无法修改。但您不更改配置,这样就可以了。如果确实需要更改配置,则可以从静态块执行此操作,也可以。 编辑 :(2013/10) 在2.0及更高版本中,可以通过注意到还有一种更好的方法来增强上述

  • 问题内容: Java教程说,由于内部类与封闭类的实例相关联,所以它(内部类)本身不能定义任何静态成员。 对我来说很有趣,为什么内部类不能声明静态成员,例如某个字段,该内部类的实例可能会与同一内部类的其他实例共享这些成员?这仅仅是Java中必须被视为理所当然的事情的实现吗? 问题答案: 基本上只是一个任意决定。我们没有理由也 不可能 得到支持,但还算不上什么好的理由 来 支持它。只需在外部类中声明静

  • 问题内容: 为什么不能在Java中将类声明为静态类? 问题答案: 只有嵌套的类可以是静态的。这样,你可以使用嵌套类而无需外部类的实例。

  • 问题内容: 我有以下课程: 是否可以使用反射仅获取静态字段的列表?我知道我可以使用来获得所有字段的数组。但是似乎无法确定实例是否代表静态字段。 问题答案: 您可以这样做: