您的位置:首页 > 编程语言 > Java开发

Java基础-子父类构造函数、静态变量(代码块)、普通变量的调用顺序

2015-04-19 10:21 357 查看
子父类构造函数、静态变量(代码块)、普通变量的调用顺序

创建子类的时候,先检查父类是否有静态的属性,如果有,则先调用静态属性的语句,然后检查子类是否也有静态类型属性,有,则调用子类的静态类型,然后在调用父类普通变量,构造函数,然后才是子类的普通属性,构造函数。
顺序是:
父类静态
子类静态
父类属性
父类构造函数
子类属性
子类构造函数

注意:如果父类是个抽象类,而这时候父类构造函数调用到子类里的函数,而且需要引用子类的某个属性,这时候这个属性输出多少呢?答案从上面的构造顺序知道,因为父类构造函数运行的时候子类的属性还没有被初始化(准确说应该是没有被用户初始化,但是编译器已经初始化为0)
所以,输出的结果是0。

因此,编写构造器时有一条有益的规则:

“用尽可能简单的方法使对象进入正常状态;如果
可以的话,
避免调用其他方法” 在构造器内唯一能够安全调用的那些方法是基类中的 final方法(也适用于 private 方法,它们自动属于 final 方法)。这些方法不能被重载,因此也就不会出现上述令人惊讶的问题。

单步跟踪一下代码可验证结果:
class BB{
static int m = 4;
private int st = 3;
BB(){
System.out.println("father constractor");
}
}

public class staticTest extends BB{
static int a = 4;
private int sy = 3;
staticTest(){
System.out.println("son constractor");
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//		BB b = new BB();
staticTest bb = new staticTest();
System.out.println("static test");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐