欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java类初始化过程

程序员文章站 2022-03-21 20:39:20
...

 

 

/*
测试3个内容:
类加载顺序
子父类执行过程
对象初始化过程


从几次试验我们看到
当执行到类时,类被加载到内存,并初始化
静态成员被加载到共享区
不用实例化对象就可以调用静态资源

静态成员变量,静态成员方法,静态代码块,只初始化一次

而普通变量,普通代码块,构造方法,在每次实例化对象时都要初始化

子类对象要初始化时,
会先初始化父类静态成员和静态代码块,
再初始化子类静态成员和静态代码块,
然后是父类普通代码块,父类构造方法
然后是子类普通代码块,子类构造函数


当子类名直接调用继承自父类的静态成员时,子类不会初始化,而只初始化父类(因为这已经足够了)

补充:子类的所有构造方法中,如果未指定父类构造方法,则第一条语句是隐式的super(),即父类的空参数构造方法*/


class Fu  //父类
{
  public static String staticField = "父类-静态变量";
  public static String extend = "父类-静态变量extend";  //让子类调用
  public String field = "父类-普通变量";
  public Fu() 
  {
      System.out.println("父类-构造方法");
  }
  
  static 
  {
      System.out.println("Fu_static: 父类-静态初始化块");
      System.out.println("Fu_static:"+staticField);     
  }
  
  {
      System.out.println("Fu_普通块:"+field);
      System.out.println("Fu_普通块:"+"父类-初始化块");
  }
}


class Zi extends Fu  //子类
{
  public static String staticField = "子类 静态变量";
  
  public String field = "子类 普通变量";

  {
      System.out.println("Zi_普通块:"+field);
      System.out.println("Zi_普通块:"+"子类 初始化块");
  }
  
  public Zi() 
  {
      System.out.println("子类 子类构造方法");
  }
  
  static 
  {
      System.out.println("Zi_static:"+"子类 静态初始化块");
      System.out.println("Zi_static:"+staticField);
  }

}


class Demo            
{
  public static void main(String args[])  throws Exception
  {
      System.out.println("main方法");
      //Thread.sleep(2000);
      //System.out.println("Zi.staticField:"+Zi.staticField);
      
      //Thread.sleep(2000);
      //System.out.println("...");
      //Fu fu = new Fu();
      
      Thread.sleep(2000);
      System.out.println("");
      
      Zi zi = new Zi();
      System.out.println("");
      Zi zi2 = new Zi();      
      //System.out.println(Zi.extend);  //子类名调用父类静态成员
  }
  
}  

  执行结果情况太多就不贴了

相关标签: 类初始化