import java.util.* ; class A { A(int i1) { System.out.println( "A(): " + i1 ) ; } } class B { //Gets initialized after static A normalAObject1 ; A normalAObject2 ; { normalAObject1 = new A( 1 ) ; normalAObject2 = new A( 2 ) ; } //Static Gets initialized first. Either through //use of A or access the static object static A staticAObject1 ; static A staticAObject2 ; //Block of code executed only once static { staticAObject1 = new A( 3 ) ; staticAObject2 = new A( 4 ) ; } B() { //Gets initialized after data members initialization System.out.println( "B()" ) ; } } public class Initialization1 { public static void main( String args[] ) { //Kicks off static initialization //as well as object data initialization B BObject1 = new B() ; System.out.println( "Another instance of B created." ) ; B BObject2 = new B() ; } //public static void main( String args[] ) }