设为首页 加入收藏

TOP

Java类的初始化顺序内容简介
2014-11-24 02:38:51 来源: 作者: 【 】 浏览:0
Tags:Java 初始 顺序 内容简介

  我把Java类的初始化顺序分为两部分。第一部分是类的初始化,第二部分是对象的初始化。


  在初始化之前JVM必须先把该类的字节码加载到内存中来。这时不管创不创建对象都会马上执行类的初始化:


  执行静态初始化表达式(如static int a = 10)和静态初始化块(即static{}中的内容),注意两者按在源代码中的先后顺序执行。


  当创建一个对象,就会执行对象的初始化:


  首先调用父类的构造函数。


  第二步执行初始化表达式(如int a = 10)和初始化块({}中的内容),同样按在源代码中的先后顺序执行。


  最后执行自身的构造函数。


  对于静态初始化表达式与初始化表达式,如果只是声明,没有初始化,则赋默认值。如int i;则i会被赋值为0。


  总结:
  1、 类初始化
  (1) 静态初始化表达式,静态初始化块
  2、对象初始化
  (1)父类的构造函数
  (2)初始化表达式,初始化块
  (3)自身的构造函数
  注意:初始化表达式可能不是准确的术语,但明白是指什么就行了。


  测试代码:


  代码


 package principle;
  public class InitializeTest {
  public static void main(String[] args) throws ClassNotFoundException{
  System.out.println("-----类初始化-----");
  Class.forName("principle.MyClass");
  System.out.println("n" + "-----对象初始化-----");
  MyClass myClass = new MyClass();
  }
  }
  class MyClass extends Father{
  MyClass() {
  System.out.println("3.自身的构造函数");
  }
  static int staticInt = 5; //如果放在static{}后面则编译不通过
  static {
  System.out.print("1.静态初始化表达式:staticInt=" + staticInt + "t");
  System.out.println("静态初始化块");
  }
  int instanceInt; //将会被赋默认值0
  {
  System.out.print("2.初始化表达式:instanceInt=" + instanceInt + "t");
  System.out.println("初始化块");
  }
  }
  class Father {
  Father() {
  System.out.println("1.父类的构造函数");
  }
  }
  输出结果:
 
 -----类初始化-----
  1.静态初始化表达式:staticInt=5 静态初始化块
  -----对象初始化-----
  1.父类的构造函数
  2.初始化表达式:instanceInt=0 初始化块
  3.自身的构造函数


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇简易的Java浏览器之开发感想 下一篇实现文件下载的Java代码

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: