Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling a Java method with no name

I'm looking at the code below and found something a bit strange:

public class Sequence {     Sequence() {         System.out.print("c ");     }      {         System.out.print("y ");     }      public static void main(String[] args) {         new Sequence().go();     }      void go() {         System.out.print("g ");     }      static {         System.out.print("x ");     } } 

I would've expected this to give a compilation error as the System.out with "y " doesn't belong to a method declaration just a { }. Why is this valid? I don't see how this code would or should be called.

When running this it produces x y c g also, why does the static { } get called before the sequence constructor?

like image 523
david99world Avatar asked Dec 04 '12 08:12

david99world


People also ask

What is static method without name in Java?

Static methods are the methods in Java that can be called without creating an object of class. They are referenced by the class name itself or reference to the Object of that class.

Can a method be called without an object?

We can call a static method by using the ClassName. methodName. The best example of the static method is the main() method. It is called without creating the object.

Which class has no name in Java?

Anonymous class is an inner class which does not have a name and whose instance is created at the time of the creation of class itself and these classes are somewhat different from normal classes in its creation.

Does Java have standalone functions?

Java doesn't have standalone functions at all.


1 Answers

This:

static {     System.out.print("x "); }    

is a static initialization block, and is called when the class is loaded. You can have as many of them in your class as you want, and they will be executed in order of their appearance (from top to bottom).

This:

{    System.out.print("y "); } 

is an initialization block, and the code is copied into the beginning of each constructor of the class. So if you have many constructors of your class, and they all need to do something common at their beginning, you only need to write the code once and put it in an initialization block like this.

Hence your output makes perfect sense.

As Stanley commented below, see the section in the Oracle tutorial describing initializaiton blocks for more information.

like image 91
jlordo Avatar answered Oct 04 '22 04:10

jlordo