java - 无法在内部类中声明 Public static final String s = new String ("123")

标签 java constants final inner-classes

我尝试声明一个类,如下所示

class Outer{
    private final class Inner{
      public static final String s1 = new String("123");
      public static final byte[] bytes = new byte[]{0x00, 0x01};

      public static final String s2 = "123";
      public static final byte byte1 = 0x02;
    }
} 

在上面的代码中,s1 和 bytes 无法编译,但 s2 和 byte1 可以编译。如果我将整个常量声明放在外部类中,它就可以正常工作。我错过了什么。有帮助吗?

最佳答案

阅读 Java 语言规范,第 3 版,§8.1.3。

An inner class is a nested class that is not explicitly or implicitly declared static. Inner classes may not declare static initializers (§8.7) or member interfaces.

这就是为什么你不能声明 new public static final String s1 = new String("123");

Inner classes may not declare static members, unless they are compile-time constant fields (§15.28).

这解释了为什么您可以执行 public static final String s2 = "123";

静态嵌套类可以有静态成员。

关于java - 无法在内部类中声明 Public static final String s = new String ("123"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4725505/

相关文章:

java - Spring 3 + Hibernate 4将不同的表从数据库加载到同一个实体类中

java - Java中最长运行错误的长度

c - 修改常量变量(const)

c - 在函数原型(prototype)中的 char * param 中添加/*const*/而不是 const 限定符

Java 并发实践 list 6.2

java - 在对象创建期间是否可以观察最终数组的中间状态?

java - com.sun.tools.javadoc.Main.execute 在 jdk 11 中运行 Doclet 的替代方法是什么?

c# - 在 C# 中实现全局常量的最佳方法是什么?

java - 匿名类中的最终变量

Java 8 Streams - 分层排序嵌套列表