Instantiation

From Suhrid.net Wiki
Jump to navigationJump to search

Constructors

  • Every class - including Abstract classes - MUST have a constructor.
  • Constructor chaining is built in. Every class constructor will call its default superclass constructor using super().
  • Every constructor as its first statement has a call to this() or super().
  • Compiler will only automatically insert call to no-arg super() or this().
  • CANNOT call an instance method or access instance variables till the super constructor has run.
  • Only Static variables can be accessed as a call to super() or this().

Field Initializers

  • Initialization of fields can be done through field declaration statements.
  • Declaration of field must occur before its usage in any initializer if it is used on the RHS of an assignment. Example:
public class Init4 {
	
	int length = 10;
	
	int area = length * width; //Illegal since width is a forward reference being used on the RHS.
	
	int width = 20;

}

* Initializer expression must not result in an uncaught checked exception. Compiler will throw an error.

<syntaxhighlight lang="java5">

public class Init4 {
	
	int length = 10;

        int width = 20;
	
	int area = getArea(); //Compiler error - uncaught exception.
	
        private int getArea() throws Exception {
            return length * width;
        }
}

Initialization Blocks

  • A static initialization block runs when the class is first loaded.(Runs only once)
  • An instance init block runs every time a new instance is created.
  • An instance init block runs right after the call to super() in a constructor (ie. after all the super-constructors have run).
  • In case of multiple init blocks (either instance and static) they run in the order in which they are defined.