• (转)Java初始化顺序


    1在new B一个实例时首先要进行类的装载。(类只有在使用New调用创建的时候才会被java类装载器装入)
    2,在装载类时,先装载父类A,再装载子类B
    3,装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,安装代码中出现的顺序初始化)
    4,装载子类B后,完成静态动作
    类装载完成,开始进行实例化
    1,在实例化子类B时,先要实例化父类A
    2,实例化父类A时,先成员实例化(非静态代码)
    3,父类A的构造方法
    4,子类B的成员实例化(非静态代码)
    5,子类B的构造方法

    先初始化父类的静态代码--->初始化子类的静态代码-->初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数

    测试代码: 

    Java代码  
    1. abstract class base  
    2. {            
    3.     public int age=getNumber(100);           
    4.     static{            
    5.         System.out.println("base static block");          
    6.     }  
    7.           
    8.     {             
    9.         System.out.println("base nonstatic block");           
    10.     }      
    11.     static int sage=getNumber(50);      
    12.     base(){          
    13.         System.out.println(age);          
    14.         System.out.println("base start");  
    15.         draw();//会调用子类覆盖后的方法,这儿是0!         
    16.         System.out.println("base end");              
    17.     }      
    18.     static int getNumber(int base){          
    19.         System.out.println("base.getNumber int"+base);  
    20.         return base;      
    21.     }      
    22.     public  void draw(){          
    23.         System.out.println("base.draw");      
    24.         }  
    25. }  
    26.   
    27. public class initializeOrder extends base{      
    28.     public int age=getNumber(1001);      
    29.     private int _radius=getNumber(10);      
    30.     static int sage=getNumber(250);      
    31.     static{          
    32.         System.out.println("subclass static block");      
    33.     }      
    34.     {          
    35.         System.out.println("subclass nonstatic block");    
    36.     }  
    37.     initializeOrder(int radius){          
    38.         _radius=radius;          
    39.         System.out.println(age);   
    40.         draw();//这儿是1000  
    41.         System.out.println("initializeOrder initialized");      
    42.     }      
    43.     public void draw(){  
    44.         System.out.println("initializeOrder.draw "+_radius);      
    45.         }        
    46.     public static void main(String[] args) {        // TODO Auto-generated method stub         
    47.         new initializeOrder(1000);      
    48.   
    49.     }  
    50.   
    51. }  

    输出为:

    Java代码  
    1. base static block  
    2. base.getNumber int50  
    3. base.getNumber int250  
    4. subclass static block  
    5. base.getNumber int100  
    6. base nonstatic block  
    7. 100  
    8. base start  
    9. initializeOrder.draw 0  
    10. base end  
    11. base.getNumber int1001  
    12. base.getNumber int10  
    13. subclass nonstatic block  
    14. 1001  
    15. initializeOrder.draw 1000  
    16. initializeOrder initialized 
  • 相关阅读:
    KBEngine:记录
    h5游戏研讨
    Django部署方法
    JQuery Advanced
    Web从入门到放弃<7>
    Web从入门到放弃<6>
    Web从入门到放弃<5>
    Web从入门到放弃<4>
    Web从入门到放弃<3>
    Web从入门到放弃<2>
  • 原文地址:https://www.cnblogs.com/zhengwenwei/p/2044491.html
Copyright © 2020-2023  润新知