栏目导航
热点推荐
- 三十条有用的 Java 编程规则
- Java制作水印图片源码
- Java常见异常及可能的导致原因
- Java中的修饰词使用方法总结
- J2EE系统异常的处理准则
- Java中的异常、断言、日志解析(
- Java面试技巧:Java面试题集锦(
- 面向Java开发人员的Scala指南:
- Java程序员:一刻钟精通正则表达
- 网友经验分享:学好java开发的关
- 专家解答:创建表格与数据库进行
- Java远程访问Domino数据库
阅览排行
Java类的初始化顺序内容简介
www.jz123.cn 2009-12-25 来源: 中国建站 责任编辑(袁袁) 我要投递新闻
我把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.自身的构造函数 |
0
上一篇:Eclipse使用ant编译时的乱码问题 下一篇:用JFreeReport做报表的实践过程