This week's book giveaway is in the OO, Patterns, UML and Refactoring forum.
We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line!
See this thread for details.
The moose likes Beginning Java and the fly likes Simple code Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Simple code" Watch "Simple code" New topic

Simple code

Roberto Diaz
Ranch Hand

Joined: Mar 08, 2002
Posts: 40
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.
Corey McGlone
Ranch Hand

Joined: Dec 20, 2001
Posts: 3271
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,

SCJP Tipline, etc.
Karl Laird
Ranch Hand

Joined: Jul 14, 2001
Posts: 67
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.

The Eagle sneers at the Peacock<p>Systems Administrator<br />OrderWare Solutions Ltd<br /><a href="" target="_blank" rel="nofollow"></a>
Valentin Crettaz
Gold Digger

Joined: Aug 26, 2001
Posts: 7610
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 {

[Blog] [Blogroll] [My Reviews] My Linked In
Ken Manohar

Joined: Mar 16, 2002
Posts: 4
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).
It is sorta covered in the JavaRanch Style Guide.
subject: Simple code
It's not a secret anymore!