java中代码块和构造方法以及普通方法的代码执行顺序总结

说实话,这块真的不好理解啊~都怪jvm  执行顺序搞这么复杂,哼╭(╯^╰)╮ 但是  我们能怎么办,只能研究呗!!!

!:首先,毫无置疑的,静态代码块在加载时就执行了,所以肯定是最先执行的。。。。

2:老师是不是说过,非静态代码块是在每次实例化对象时被调用的,那问题就来了,是非静态代码块中的内容先执行的,还是构造方法中的内容执行的呢?

  其实:在Child Child = new Child()时,new Child()时就会创建一个对象了,但是这个对象还不会执行构造方法中的内容,然后带着这个创建的这个对象去执行非静态代码块中的 内容,执行完后,就去执行构造方法中的内容了,重点来了,其实在执行非静态代码块之前,会带着这个对象执行类中的成员变量部分,因为已经有了对象,所以就有了依附于对象的这些属性,那么这时这些属性的初始值就是这些属性的数据类型初始值,如果这些属性被赋值了,然后再被赋值。其实顺序就是:

  

用new创建并初始化对象步骤:
      给对象的实例变量(非“常量”)分配内存空间,默认初始化成员变量;
      成员变量声明时的初始化;
     初始化块初始化(又称为构造代码块或非静态代码块);
     构造方法初始化

下面的代码会帮助你理解

 package thisTest;

 public class Child {

     private static String name;

     static {
System.out.println("我是静态代码块!!!!!!所以我不能用this~"+name);
} {
System.out.println(this+"我是动态代码块"+this.name);
}
public Child(String name) {
this.name = name;
System.out.println(this+"我是构造方法"+this.name);
} public static void main(String[] args) {
Child child=new Child("张三");
System.out.println(child+"普通方法"+child.name);
}
}

输出结果:

我是静态代码块!!!!!!所以我不能用this~null
thisTest.Child@52e922我是动态代码块null
thisTest.Child@52e922我是构造方法张三
thisTest.Child@52e922普通方法张三

java中代码块和构造方法以及普通方法的代码执行顺序总结

java中代码块和构造方法以及普通方法的代码执行顺序总结

执行的顺序为

11111111111111111111111

java中代码块和构造方法以及普通方法的代码执行顺序总结

2222222222222222222222222222

java中代码块和构造方法以及普通方法的代码执行顺序总结

3333333333333333333333333

java中代码块和构造方法以及普通方法的代码执行顺序总结

444444444444444444444444444444

java中代码块和构造方法以及普通方法的代码执行顺序总结

这就很好理解了吧~

好了 ,

不用谢我, 我是雷锋!告辞——

上一篇:吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享


下一篇:【Java】 重拾Java入门