-------------------------------------------------------------
i am confused regarding order of execution?
is it:
static initializers and static variables first and then instance initializers and instance variables?please clear my doubt or is it in the order of declaration?
--------------------------------------------------------------
Consider the following program
class Parent{
static int statVar=10;
int initVar=100;
static {
System.out.println("static1 - parent "+statVar);
}
{
System.out.println("instance init1 - parent "+initVar);
}
Parent(){
System.out.println("Constructor - parent");
}
static {
System.out.println("static2 - parent");
}
{
System.out.println("instance init2 - parent");
}
}
public class Child extends Parent{
static {
System.out.println("static1 - Child");
}
{
System.out.println("instance init1 - child");
}
Child(){
System.out.println("Constructor - child");
}
static {
System.out.println("static2 - child");
}
{
System.out.println("instance init2 - child");
}
public static void main(
String[] args) {
new Child();
}
}
The output will be
static1 - parent 10
static2 - parent
static1 - Child
static2 - child
instance init1 - parent 100
instance init2 - parent
Constructor - parent
instance init1 - child
instance init2 - child
Constructor - child
We can have conclusion about order of execution like following
1. static variables and then Static initializers throghout the inheritance hienrarchy as per coding order.
2. Following will happen for individual classes from the top of the hierarchy
a. instance variables and then instance inializers
b. constructor