zoukankan      html  css  js  c++  java
  • (转)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 
  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/zhengwenwei/p/2044491.html
Copyright © 2011-2022 走看看