Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I tried to declare a class as shown below

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

In the above code s1 and bytes wont compile but s2 and byte1 compile. If I put the whole constant declaration in outer class it works fine. what am i missing. Any help?

like image 770
Manoj Avatar asked Jan 18 '11 14:01

Manoj


1 Answers

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.

like image 199
guido Avatar answered Oct 21 '22 15:10

guido