关于java的初始化
2009-03-05 23:34
113 查看
java编译器确保域(成员变量或块)在被使用之前必需初始化,即使你没直接初始化,它也会默认给你一个值。
1.
如果不涉及继承跟static,用new创建对象时,会调用那个类的构造函数,而在调用构造函数之前必需先初始化域(因为在构造函数里,可能会用到这些成员变量)
等域初始化完后再调用构造函数。强调一点:只要是成员变量,那么不管它放在类的哪个部位(但在方法或块内部不算,因为那算是局部变量),它都在构造函数调用之前调用,这是编译器确保的。
2.
如果涉及继承,当用new创建子类对象时,调用顺序是这样的:
1.先初始化父类的域(成员变量或块)
2.调用父类的构造函数(没有明确定义的话,调用默认那个,即编译器为你创建的)
3.再到子类,初始化子类的域
4.这时才轮到调用子类的构造函数
原则是:要确保域在被调用之前要被初始化.
上面是涉及两层,如果是涉及多层继承的,那么一致递推上去,即先初始化父类的域,然后调用父类构造函数,再初始化子类的域然后再调用子类的构造函数,再初始化子子类的域(用这个名字好像有点怪,哈哈,就是孙子类的意思)然后再调用子子类的构造函数,一致类推下去
3.涉及static的话,static域是在编译的时候加载的,原则是:
1.static域是在非static(上面说的都是非static)之前调用的
2.static域只初始化一次(即只调用一次),打个比方A a = new A(); A 里有static域,只有当你第一次使用new创建对象的时候它会在非static之前调用,而如果你还想再用new创建对象时,static域这段代码是不会被调用的(因为static的东西是属于类,所以对象共享的,一次就够了)
4.如果涉及继承跟static结合的话(而这个是初始化里最难的,很多初学者会卡在这里),只要按照3.2结合就行了。
1.
如果不涉及继承跟static,用new创建对象时,会调用那个类的构造函数,而在调用构造函数之前必需先初始化域(因为在构造函数里,可能会用到这些成员变量)
等域初始化完后再调用构造函数。强调一点:只要是成员变量,那么不管它放在类的哪个部位(但在方法或块内部不算,因为那算是局部变量),它都在构造函数调用之前调用,这是编译器确保的。
2.
如果涉及继承,当用new创建子类对象时,调用顺序是这样的:
1.先初始化父类的域(成员变量或块)
2.调用父类的构造函数(没有明确定义的话,调用默认那个,即编译器为你创建的)
3.再到子类,初始化子类的域
4.这时才轮到调用子类的构造函数
原则是:要确保域在被调用之前要被初始化.
上面是涉及两层,如果是涉及多层继承的,那么一致递推上去,即先初始化父类的域,然后调用父类构造函数,再初始化子类的域然后再调用子类的构造函数,再初始化子子类的域(用这个名字好像有点怪,哈哈,就是孙子类的意思)然后再调用子子类的构造函数,一致类推下去
3.涉及static的话,static域是在编译的时候加载的,原则是:
1.static域是在非static(上面说的都是非static)之前调用的
2.static域只初始化一次(即只调用一次),打个比方A a = new A(); A 里有static域,只有当你第一次使用new创建对象的时候它会在非static之前调用,而如果你还想再用new创建对象时,static域这段代码是不会被调用的(因为static的东西是属于类,所以对象共享的,一次就够了)
4.如果涉及继承跟static结合的话(而这个是初始化里最难的,很多初学者会卡在这里),只要按照3.2结合就行了。
相关文章推荐
- Thinking in Java :关于初始化的总结
- 关于java的初始化顺序的问题
- 关于java类的初始化过程
- 关于Java变量、数组、对象的声明、初始化与访问方式-----《疯狂Java突破程序员基本功的16课》读书笔记----第一章
- 关于Java中类在构造对象时的初始化步骤详解
- 关于java中变量的初始化的问题
- 关于java数组的初始化
- 关于Java中类在构造对象时的初始化步骤详解
- 关于java的初始化顺序
- Java 关于含有继承类的成员初始化过程讲解
- 一个关于Java JFrame 无法初始化组件问题
- 展讯的一道笔试Java题(关于静态初始化问题)
- 关于java对象初始化的问题
- 关于JAVA中变量的初始化及类属性的默认值问题
- 关于java中初始化顺序的总结及其势力代码!希望高手们可以帮助补充
- 由一道Java面试题想到的(关于类初始化以及多态)(一)
- 一道关于java 类初始化 成员初始化的笔试题的解析
- 关于java构造器初始化顺序例子
- 关于java里面Collection包括List,Map等初始化内部匿名类和泛型的一个例子
- 关于java对象初始化的一点有意思的东西