`
寻梦者
  • 浏览: 627626 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java类的初始化过程

阅读更多

  在《java编程思想》(第四版)146页,说到: 初始化之处就是static初始化发生之处,所有的static对象和static代码段都会在加载时依照程序中的循序初始化

 

 

package com.woyo.init;
/** 
 *@author Antty_ge
 *@date 2010-12-25
 */
class InitParent{
    
    public static int parentId= getParentId(44, true);
    public int id = getParentId(1, false);
    
    static{
        System.out.println("==this is the parent static block===");
    }
    
    public InitParent(){
        System.out.println("===parent构造器");
    }
    
    public static void getParentName(){
        System.out.println("==parent name is antty");
    }
    
    public static int getParentId(int id){
        System.out.println("==parent id is " + id);
        return id;
    }
    public static int getParentId(int id, boolean staticSign) {
        if(staticSign){
            System.out.println("==初始化静态属性parent id is " + id);
        }else{
            System.out.println("===初始化非静态属性 id is" + id);
        }
        return id;
    }
}

class InitChild extends InitParent{
    
    public static int childId =  getChildId(22, true);
    public int id = getChildId(1, false);

    static{
        System.out.println("==this is the child static block===");
    }
    
    public InitChild(){
        System.out.println("===child构造器");
    }
    
    public static void getChildName(){
        System.out.println("==child name is bob");
    }
    
    public static int getChildId(int id, boolean staticSign) {
        if(staticSign){
            System.out.println("==初始化静态属性child id is " + id);
        }else{
            System.out.println("===初始化非静态属性 id is" + id);
        }
        return id;
    }
}

public class Initialization extends InitChild{
   
    public static void main(String[] args) {
       Initialization init = new Initialization();  //测试初始化
    }
}

 运行结果:

 

==初始化静态属性parent id is 44
==this is the parent static block===
==初始化静态属性child id is 22
==this is the child static block===
===初始化非静态属性 id is1
===parent构造器
===初始化非静态属性 id is1
===child构造器

 

 

把代码的59行注释掉,执行main函数,运行结果变为:

 

==初始化静态属性parent id is 44
==this is the parent static block===
==初始化静态属性child id is 22
==this is the child static block===

 

 

最后总结类的初始化过程:

 

(1)如果是继承关系,则先从基类依次进行初始化

(2)static的属性跟代码段 -------如果是加载类

(3)static的属性跟代码段,非静态属性,构造器  ---如果是初始化对象

(4)stastic的方法,不会再加载类,或者初始化对象的时候初始化

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics