首页 > 其他 > 详细

new 对象时的暗执行顺序

时间:2019-02-24 12:02:16      阅读:179      评论:0      收藏:0      [点我收藏+]

为什么称为暗执行顺序,因为当我们在new 对象时,其不是简简单单的new一个完事,它要首先检查父类的,静态的,非静态的等代码,就好像我们结婚生孩子一样,要先到祖宗那里,公安局那里,左邻右舍那里,告诉他们,我们要结婚了.下面来看其本质:

这里有一个父类一个子类:

class Father{
{
System.out.println("父类非静态代码块");
}
static{
System.out.println("父类静态代码块");
}
public Father(){
System.out.println("父类构造器");
}
public static void method(){
System.out.println("父类静态方法");
}
public void method2(){
System.out.println("父类非静态方法");
}
}

class Son extends Father{
{
System.out.println("子类非静态代码块");
}
static{
System.out.println("子类静态代码块");
}
public Son(){
System.out.println("子类构造器");
}
public static void method(){
System.out.println("子类静态方法");
}
public void method2(){
System.out.println("子类非静态方法");
}
}

当new Son()时,会打印:

  父类静态代码块
  子类静态代码块
  父类非静态代码块
  父类构造器
  子类非静态代码块
  子类构造器

可能你会总结出这样的规律:先父后子,先静态后非静态最后才是构造器,但这是不准确的,因为按这个原则还有一种执行顺序:

  父类静态代码块
  父类非静态代码块
  父类构造器

  子类静态代码块
  子类非静态代码块
  子类构造器

所以观察了细微问题后,对规律再做总结,就像我们写论文一样,用目录层级完美诠释它们的执行顺序:

1.静态代码块:

  1.1 父的

  1.2 子的

2.父其他

  2.1 父非静态代码块

  2.2 父构造器

3.子其他

  3.1 子非静态代码块

  3.2 子构造器

 

即:总体原则是静态代码块--->父其他--->子其他.

你记住了吗?



new 对象时的暗执行顺序

原文:https://www.cnblogs.com/wangxuejian/p/10425704.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!