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 
  • 相关阅读:
    C语言 sprintf 函数 C语言零基础入门教程
    C语言 printf 函数 C语言零基础入门教程
    C语言 文件读写 fgets 函数 C语言零基础入门教程
    C语言 文件读写 fputs 函数 C语言零基础入门教程
    C语言 fprintf 函数 C语言零基础入门教程
    C语言 文件读写 fgetc 函数 C语言零基础入门教程
    C语言 文件读写 fputc 函数 C语言零基础入门教程
    C语言 strlen 函数 C语言零基础入门教程
    Brad Abrams关于Naming Conventions的演讲中涉及到的生词集解
    适配器模式
  • 原文地址:https://www.cnblogs.com/zhengwenwei/p/2044491.html
Copyright © 2011-2022 走看看