Cannot declare Public static final String s = new String(“123”) inside an inner class

后端 未结 4 1441
清酒与你
清酒与你 2021-01-05 15:26

I tried to declare a class as shown below

class Outer{
    private final class Inner{
      public static final String s1 = new String(\"123\");
      public         


        
相关标签:
4条回答
  • 2021-01-05 15:48

    cf Java Language specification, second edition, §8.1.2

    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

    0 讨论(0)
  • 2021-01-05 15:57

    Read Java Language Specification, 3rd ed, §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.

    This is why you cannot declare 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).

    This explains why you can do public static final String s2 = "123";

    A static nested class can have static members.

    0 讨论(0)
  • 2021-01-05 15:59

    Inner classes were designed to work in the context of the outer class, I think static variables would break this rule.

    8.1.2 Inner Classes and Enclosing Instances

    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. Inner classes may not declare static members, unless they are compile-time constant fields (§15.28).

    0 讨论(0)
  • 2021-01-05 15:59

    try this, it works fine inside an inner class:

    public static final String  s="123";
    

    I don't know the reason why it is allowed.

    0 讨论(0)
提交回复
热议问题