黑马程序员技术交流社区
标题:
java中父类和子类都有构造方法时,子类对象的初始化过程
[打印本页]
作者:
张云飞
时间:
2013-8-21 14:05
标题:
java中父类和子类都有构造方法时,子类对象的初始化过程
本帖最后由 张云飞 于 2013-9-17 16:28 编辑
先看一个代码例子(如果感觉有点乱的话,建议自己边思考边自己写着玩):
class Fruit{
public static String Fruit_name = "Fruit静态变量";
public String color = "Fruit非静态变量";
static{
System.out.println(Fruit_name); //若将Fruit_name的初始化放在static程序块后边,则编译错误,说明static成员变量及代码块级别相同,只看向后顺序
//System.out.println(color); //此时color还未初始化
System.out.println("Fruit的Static程序块");
}
public Fruit(){
System.out.println("Fruit()");
}
{ //虽然在构造函数后边,却先执行
System.out.println("---------------");
System.out.println(color);
System.out.println("Fruit非Static程序块");
}
}
public class Apple extends Fruit{
public static String apple_name = "appale静态变量";
public String apple_color = "Apple非静态变量";
static{
System.out.println(apple_name);
//System.out.println(apple_color); //此时apple_color还未初始化
System.out.println("Apple的Static程序块");
}
{
System.out.println("---------------");
System.out.println(apple_color);
System.out.println("Apple非Static程序块");
}
public Apple(){
System.out.println("appale()");
}
public static void main(String args[]){
new Apple();
}
}
复制代码
初始化次顺序为:
1、父类静态成员变量和静态代码块(看代码中向后顺序执行) --> 子类静态成员变量和静态代码块(看代码中向后顺序执行)
2、父类非静态成员变量和非静态代码块(看代码中向后顺序执行) --> 父类构造方法
3、子类非静态成员变量和非静态代码块(看代码中向后顺序执行) --> 子类构造方法
建议按照自己的思路重新编写一下代码,理解更清楚。
作者:
许庭洲
时间:
2013-8-27 19:26
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2