Java OCAJP7: Blocchi di inizializzazione statici e di istanza

I blocchi di inizializzazione sono parti di codice anonime racchiuse tra parentesi graffe ed eseguite, a seconda del loro tipo, in fase di caricamento della classe o in fase di creazione di un oggetto della classe.
Nel primo caso si parla di blocchi di inizializzazione statici, mentre nel secondo caso di blocchi di inizializzazione di istanza.
Ci sono diversi criteri che determinano l’ordine di esecuzione dei blocchi di inizializzazione:

  1. I blocchi statici vengono eseguiti prima dei blocchi di istanza.
  2. public class OCAJP7Certification {
    
    	public OCAJP7Certification() {
    		System.out.println("Constructor");
    	}
    	
    	static { System.out.println("Static Block"); }
    	
    	public static void main(String[] args) {
    		OCAJP7Certification oca = new OCAJP7Certification();
    	}
    	
    	{ System.out.println("Instance Block"); } 
    	
    }
    

    OUTPUT:

    Static Block
    Instance Block
    Constructor
    

  3. I blocchi dello stesso tipo vengono eseguiti in base all’ordine in cui compaiono all’interno della classe.
  4. public class OCAJP7Certification {
    
    	public OCAJP7Certification() {
    		System.out.println("Constructor");
    	}
    	
    	static { System.out.println("Static Block 1"); }
    	
    	public static void main(String[] args) {
    		OCAJP7Certification oca = new OCAJP7Certification();
    	}
    	
    	{ System.out.println("Instance Block 1"); } 
    	
    	{ System.out.println("Instance Block 2"); } 
    	
    	static { System.out.println("Static Block 2"); }
    	
    }
    

    OUTPUT:

    Static Block 1
    Static Block 2
    Instance Block 1
    Instance Block 2
    Constructor
    

  5. I blocchi statici vengono eseguiti una sola volta al caricamento della classe, mentre i blocchi di istanza vengono eseguiti ogni volta che viene creato un oggetto della classe
  6. public class OCAJP7Certification {
    
    	public OCAJP7Certification() {
    		System.out.println("Constructor");
    	}
    	
    	static { System.out.println("Static Block"); }
    	
    	public static void main(String[] args) {
    		OCAJP7Certification oca1 = new OCAJP7Certification();
    		OCAJP7Certification oca2 = new OCAJP7Certification();
    		OCAJP7Certification oca3 = new OCAJP7Certification();
    	}
    	
    	{ System.out.println("Instance Block"); } 
    		
    }
    

    OUTPUT:

    Static Block
    Instance Block
    Constructor
    Instance Block
    Constructor
    Instance Block
    Constructor
    

  7. I blocchi di istanza vengono eseguiti nel costruttore della classe subito dopo la chiamata super al costruttore della classe padre
  8. class BaseClass {
    	
    	public BaseClass() {
    		System.out.println("Base Class Constructor");
    	}
    }
    
    public class OCAJP7Certification extends BaseClass {
    
    	public OCAJP7Certification() {
    		System.out.println("Constructor");
    	}
    	
    	static { System.out.println("Static Block"); }
    	
    	public static void main(String[] args) {
    		OCAJP7Certification oca = new OCAJP7Certification();
    	}
    	
    	{ System.out.println("Instance Block"); } 		
    }
    
    

    OUTPUT:

    Static Block
    Base Class Constructor
    Instance Block
    Constructor
    

  9. I blocchi statici della classe padre vengono eseguiti prima dei blocchi statici delle sottoclassi
  10. class BaseClass {
    	
    	public BaseClass() {
    		System.out.println("Base Class Constructor");
    	}
    	
    	static { System.out.println("Base Class Static Block"); }
    }
    
    public class OCAJP7Certification extends BaseClass {
    
    	public OCAJP7Certification() {
    		System.out.println("Constructor");
    	}
    	
    	static { System.out.println("Static Block"); }
    	
    	public static void main(String[] args) {
    		OCAJP7Certification oca = new OCAJP7Certification();
    	}
    	
    	{ System.out.println("Instance Block"); } 
    		
    }
    

    OUTPUT:

    Base Class Static Block
    Static Block
    Base Class Constructor
    Instance Block
    Constructor
    
This entry was posted in $1$s. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *