Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

system.out.println statement outside any method in java

My question is can't we write an output statement outside the main in java? If I enclose it in { } braces then I don't get error, but if I directly write it, I get an error. why so?

public class abc 
{ 
   int a=3; 
   int b=0; 
   System.out.println("this statement gives error"); //Error!! 
   {System.out.println("this works fine");} 
   public static void main(String args[]) {

   System.out.println("main"); 
      abc t=new abc();
   }
} 

I tried writing it in main, it works. Why doesn't it work without a method?

like image 438
user2777893 Avatar asked Sep 13 '13 21:09

user2777893


4 Answers

When you enclose it in braces, you are putting it in an initializer block, which runs when the class is instantiated. No statements except variables declarations/initialization may take place outside of methods or initialization blocks in Java.

like image 147
Kon Avatar answered Nov 09 '22 12:11

Kon


A Class can only have attributes or methods.

A class is the blueprint from which individual objects are created.

    int a=3;   // attributes
    int b=0;   // attributes
    System.out.println("this statement gives error"); //Error!! 

    {System.out.println("this works fine");}  // init block whenever an object is created.
                                              // since it is inside { }
like image 29
JNL Avatar answered Nov 09 '22 10:11

JNL


{...} is called an instance initializer . It runs in addition to the constructor each time an instance object is created .

static{...} is another type of block that is called Static Initializer it is when you add a static keyword before { } . This static initializer only runs when the class is first loaded.

So you can write code in these two block and class member functions.

Other than that the only place left is meant for the class data members declaration and initialization.

like image 4
Kinaan Khan Sherwani Avatar answered Nov 09 '22 12:11

Kinaan Khan Sherwani


Basics/Fundamentals

Java Class contains only member functions and class variables and few other exceptions like instance initliazer, static blocks etc.

You can't just sprinkle executables(like System.out.println()) anywhere you wish inside Class.


Instance initliazer

{...} in Java is instance initializer which gets called whenever an object is created. Because it is instance initializer, it actually gets called before constructor.

You can write System.out.println() inside {...} or instance initializer.


Static block

static{...} is called static block in Java, which contains lines of code which gets called ONLY ONCE when the class is loaded by JVM.

Again, You can write System.out.println() inside {...} or static block.


Simple executable example below

public class JavaExample {
    public JavaExample (String name){
        System.out.println("Inside constructor" + name);
    }
    {
        System.out.println("Inside instance initializer");
    }

    static{
        System.out.println("Inside static block");
    }
    //System.out.println("Will give error"); //ERROR

    public static void main(String[] args) {
        JavaExample obj1 = new JavaExample ("obj1");
        JavaExample obj2 = new JavaExample ("obj2");
        System.out.println("Inside the public static void main");
    }
}

Output

> Inside static block 
> Inside instance initializer 
> Inside constructor: obj1 
> Inside instance initializer 
> Inside constructor: obj2 
> Inside the public static void main

Please note the order of execution.

  1. Static block (gets called once when JVM loads Class, hence first of all)
  2. Instance initializer (before the call of any object instantiation)
  3. Constructor (during object creation/initialization)
like image 1
Om Sao Avatar answered Nov 09 '22 11:11

Om Sao