再述类初始化、对象实例化过程
来源:互联网 发布:淘宝开直通车技巧 编辑:程序博客网 时间:2024/06/05 17:39
这是以前整理出来的,编写框架代码的时候,在类初始化的过程中,碰到了说一静态变量为null。这里有篇文章不错,下面有连链接,我自己也总结了一下,贴出来。
public class InitTest {
// 变量
public String field = "变量";
//静态变量并初始化
public static InitTest initTest = new InitTest();
// 静态变量
public static String staticField = "静态变量";
// 静态初始化块
static {
System.out.println(staticField);
System.out.println("静态初始化块");
}
// 初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
// 构造器
public InitTest() {
System.out.println("构造器中:"+staticField);
System.out.println("构造器");
}
public static void testStaticMethod(){
System.out.println("静态方法");
}
public static void main(String[]args) {
testStaticMethod();
}
}
输出结果:变量、初始化块、构造器中:null、构造器、静态变量、静态初始化块、静态方法
备注:类初始化顺序:静态变量、静态块、静态方法。静态变量、静态块取决于它们在类中出现的先后顺序。先是类初始化,然后对象实例化
问题:在静态变量中初始化对象,会先初始化对象,即如上顺序变量、初始化块、构造器,然后初始化剩余的静态变量、或者块,这时如果在初始化块、构造器引用了剩余的静态变量,那静态变量就是为空。
分析原因为:类的初始化在在首次主动使用时
可以见文章http://www.ibm.com/developerworks/cn/java/j-lo-clobj-init/index.html
类的初始化时机就是在"在首次主动使用时",包括一下情况:
· 创建某个类的新实例时--new、反射、克隆或反序列化;
- 调用某个类的静态方法时;
- 使用某个类或接口的静态字段或对该字段赋值时(final字段除外);
- 调用Java的某些反射方法时
- 初始化某个类的子类时
在虚拟机启动时某个含有main()方法的那个启动类。
- 再述类初始化、对象实例化过程
- 对象实例化过程
- 对象实例化过程
- 对象实例化过程
- 深入理解Java对象的创建过程:类的初始化与实例化
- 深入理解Java对象的创建过程:类的初始化与实例化
- java对象的创建过程:类的初始化与实例化
- 深入理解Java对象的创建过程:类的初始化与实例化
- 深入理解java对象的创建过程:类的初始化和实例化
- 深入理解Java对象的创建过程:类的初始化与实例化
- 深入理解Java对象的创建过程:类的初始化与实例化
- Java实例初始化过程
- 实例化,执行,初始化,销毁bean对象
- java 对象实例化过程
- 对象的实例化过程
- 考题:对象实例化过程
- 一个对象实例化过程
- java实例化对象过程
- Python字符串的encode与decode研究心得——解决乱码问题
- Microsoft Windows CE 5.0 Board Support Package, Boot Loader, and Kernel Startup Sequence
- 进入U8150 fastboot模式和recovery模式的方法
- Android IT新闻阅读器与手机二维码
- AQtime简介
- 再述类初始化、对象实例化过程
- javascript 的一些验证
- ECLIPSE落实和更新
- qt中隐藏鼠标
- 更新-解决linux oracle shell上下箭调用历史命令
- 学习资料:笔试必看——75道逻辑题答案
- Oracle中Decode()函数使用技巧
- ie 6/7 下相对定位层(relative)挡在绝对定位层(absolute)上面的解决方法
- 不同浏览器JS获取浏览器高度和宽度