Forums Register Login
Simple code
public class Simple
System.out.println("Here"); //Does not work.!!!
System.out.println("Here"); //Works. Why ??

public void test()
public static void main(String args[])
Simple obj = new Simple() ;
Above given code will not compile,
but it will work just fine if I enclose the line
//4 within initializer block.
Please enlighten.
You are not allowed to have normal expressions simply "lying about" in your class. According to the JLS, §8.1.5 Class Body and Member Declarations:

A class body may contain declarations of members of the class, that is, fields (�8.3), classes (�8.5), interfaces (�8.5) and methods (�8.4). A class body may also contain instance initializers (�8.6), static initializers (�8.7), and declarations of constructors (�8.8) for the class.

Therefore, if you want to put that expression in your class, it must go in either a method, an instance initializer, a static initializer, or a constructor.
I hope that helps,
In other words the second one works because you have effectively made it into a static block, however the first one will not compile as it is neither static nor enclosed within a method.
In other words the second one works because you have effectively made it into a static block
not a static block but an instance initializer.
A static block is declared as follows
static {
The statement in question is not an assignment statement or a method signature therefore it cannot exist outside a static or instance block. Such a statement will display "HERE" on a screen, if executed properly, thus it needs to be enclosed within a block (a block is any code or statements found within { } braces).

This thread has been viewed 669 times.

All times above are in ranch (not your local) time.
The current ranch time is
Dec 15, 2018 22:25:53.