黑马程序员技术交流社区

标题: 求了解的同学帮我总结下类里面不同成员的创建顺序 [打印本页]

作者: 马富林    时间: 2013-11-18 23:28
标题: 求了解的同学帮我总结下类里面不同成员的创建顺序
如果一个类里面同时有:
构造函数,
成员变量,
静态变量,
成员函数,
静态函数,
构造代码块,
静态代码块。
当在另一个类的主函数创建这个类的对象时。上面这些加载和运行的顺序是怎样的。
这问题看了几遍,总是有点模糊。请帮我详细分析下。谢谢。
问题二:如果可以的话再帮我看看要是被实例化的类有父类。而且也有上面这些。那顺序又是怎么样的。

作者: ″先森丶玹°    时间: 2013-11-18 23:45
(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(4)执行父类构造方法。
(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(6)执行子类构造方法。
下面是示例代码:

package 类成员执行顺序;
public class Test {
   public static void main(String[] args) {
      new Son();
   }
}
//父类Parent
class Parent {
   {
      System.out.println("Parent的初始化块");
   }
   static {
      System.out.println("Parent的static初始化块");
   }
   
   public Parent() {
      System.out.println("Parent的构造方法");
   }
}
class Son extends Parent {
   {
      System.out.println("Son的初始化块");
   }
   static {
      System.out.println("Son的static初始化块");
   }
   
   public Son() {
      System.out.println("Son的构造方法");
   }
}
上述代码的执行结果如下:
Parent的static初始化块
Son的static初始化块
Parent的初始化块
Parent的构造方法
Son的初始化块
Son的构造方法

一起回答了
作者: zy888802    时间: 2013-11-19 00:10
加载静态优先于非静态
运行时,创建对象静态代码块>构造代码块>构造函数,其他的需要看你的调用了
若有父类,因为没有参数构造方法第一行都有super(),隐藏的
所以,创建对象时
父类静态代码块>静态代码块>父类构造代码块>构造代码块>父类构造函数>构造函数,
其他则看你调用的程序




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2