909422229__代码块的执行顺序

原创 2016年08月28日 14:39:45

构造代码块优先构造方法执行
静态块优先于构造方法的执行
执行顺序:静态代码>构造代码块>构造函数


main调用此类静态方法-》
加载静态变量
(从上到下按顺序,构造本类对象的时候,下面的静态块都还没开始,所以不会打印b也没有值)-》
类块初始化-》
构造方法-》
最后再调用main的静态方法


JAVA中赋值顺序

1.父类的静态变量赋值
2.自身的静态变量赋值
3.父类成员变量赋值
4.父类块赋值
5.父类构造器赋值
6.自身成员变量赋值
7.自身块赋值
8.自身构造器赋值

原因:JVM中类的装载机制和实例化机

可以从类的生命周期和对象的初始化来分析:
1.类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载,只有在准备阶段和初始化阶段才会涉及类变量的初始化和赋值,因此只针对这两个阶段进行分析;
2.类的准备阶段需要做是为类变量分配内存并设置默认值,因此类变量st为null、b为0;(需要注意的是如果类变量是final在加载阶段就已经完成了初始化,可以把b设置为final试试);
3.类的初始化阶段需要做是执行类构造器(类构造器是编译器收集所有静态语句块和类变量的赋值语句按语句在源码中的顺序合并生成类构造器,对象的构造方法是init,类的构造方法是cinit,可以在堆栈信息中看到),因此先执行第一条静态变量的赋值语句即st = new StaticTest (),此时会进行对象的初始化,对象的初始化是先初始化成员变量再执行构造方法,因此打印2->设置a为110->执行构造方法(打印3,此时a已经赋值为110,但是b只是设置了默认值0,并未完成赋值动作),等对象的初始化完成后继续执行之前的类构造器的语句,接下来就不详细说了,按照语句在源码中的顺序执行即可。

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA中静态代码块、构造方法、Super()父类与子类之间执行顺序

父类、子类之间代码块与构造方法 静态于非静态之前,代码块于构造方法之前执行,父类构造方法于子类代码块,另外,静态代码块只执行一次。父类除子类静态外都由于子类先执行 public class Hel...

Java中四大代码块的执行顺序(附code)

Java中四大代码块的执行顺序(附code)

关于Java中静态代码块以及构造函数的执行先后顺序

----------------------android培训、java培训、期待与您交流! ----------------------         对静态代码块以及构造函数的执行先后顺序,一直...

继承中,父类与子类都有静态代码块和构造函数的时执行顺序

当父类与子类都有静态代码块和构造函数的时候,执行顺序如下: 父类静态代码块 > 子类静态代码块 java虚拟机加载类时,就会执行该块代码。 父类构造函数 > 子类构造函数 (先有父亲,后有孩子) ...

java继承中父类和子类静态、非静态代码块,构造函数,静态方法的执行顺序

java继承中父类和子类静态、非静态代码块,构造函数,静态方法的执行顺序

Java代码块执行顺序

Java中静态代码块、构造代码块、构造方法代码块、父子类代码块之间执行顺序及代码示例 1、静态代码块 public class HelloA { public HelloA() { ...

java中变量、代码块、构造执行顺序

首先创建3个类: 1、Foo类,用于打印变量 public class Foo { public Foo(String word) { System.out.pri...

java静态和非静态代码块的执行顺序

1、静态代码块是在类加载时自动执行的,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块。 顺序: 静态代码块--》非静态代码块--》类构造方法。  2、在静态方法里面只能直...

关于java代码块与继承的执行顺序

我们知道: 静态代码块是在类加载的时候调用的,并且只会调用一次。 构造代码块是在类被创建为对象时调用。 继承的时候会优先加载父类,然后再加载当前类,然后再调用父类构造函数,最后调用当前类构造函数...
  • acm_cxq
  • acm_cxq
  • 2016年11月09日 13:03
  • 192

Java中(静态)变量、(静态)代码块的执行顺序

首先创建3个类: 1、Foo类,用于打印变量 public class Foo { public Foo(String word) { System.out.print...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:909422229__代码块的执行顺序
举报原因:
原因补充:

(最多只允许输入30个字)