Search code examples
javastringstaticpublicfinal

Can't create a public static final String in java


This code:

public class CommandPrompt {
  public static void main(String[] args) {
    public static final String prompt = System.getProperty("user.name")+">";
      System.out.println(prompt);
    }
  }

Returns this error message:

CommandPrompt.java:5: error: illegal start of expression
public static final String prompt = System.getProperty("user.name")+">";
^
CommandPrompt.java:5: error: illegal start of expression
public static final String prompt = System.getProperty("user.name")+">";
       ^
CommandPrompt.java:5: error: ';' expected
public static final String prompt = System.getProperty("user.name")+">";
             ^
3 errors

I have seen public static final String been used before, why can't I use it here?


Solution

  • Explanation

    You can't use public and static inside a method.
    Both are reserved for class attributes: public is an access modifier and static declares a class scoped variable.

    Correction

    public class CommandPrompt {
        public static void main(String[] args) {
          final String prompt = System.getProperty("user.name")+">";
          System.out.println(prompt);
        }
    }
    

    or

    public class CommandPrompt {
        public static final String prompt = System.getProperty("user.name")+">";
    
        public static void main(String[] args) {
          System.out.println(prompt);
        }
    }
    

    Related question