小猫咪,请加油

导航

java 类装载和初始化顺序

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

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

posted on 2013-04-22 17:09  小猫咪,请加油  阅读(216)  评论(0)    收藏  举报