A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 如果是自己总结,你会得到更多。.

查看全部评分

2 个回复

正序浏览
加载静态优先于非静态
运行时,创建对象静态代码块>构造代码块>构造函数,其他的需要看你的调用了
若有父类,因为没有参数构造方法第一行都有super(),隐藏的
所以,创建对象时
父类静态代码块>静态代码块>父类构造代码块>构造代码块>父类构造函数>构造函数,
其他则看你调用的程序
回复 使用道具 举报
(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的构造方法

一起回答了

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马