静态属性、静态代码块、静态方法、构造方法、普通方法的执行顺序

静态代码块:

是在当类被载入(内存)时,(最先被调用的),静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。执行类的载入之前就会调用。

非静态代码块:

是在当类的对象被创建载入(内存)时,(最先被调用的),每创建一个对象,即每载入一个对象,非静态代码块都执行一次。执行类对象的载入之前就会调用。

对象载入之前,一定要是类先被载入。

静态方法、非静态方法:都是调用时,才执行的。静态方法属于类的,加载完类就可以调用静态方法;非静态方法是属于对象的,加载完对象就可以调用非静态方法。

加载类的动作没有什么标志性,但是加载对象的标志动作就是new动作,会去执行

更精简:

静态代码块:类每次加载到内存中调用一次,并最先调用

非静态代码块:类的对象每次加载到内存中调用一次,并最先调用,然后是调用对应的构造方法

静态方法、非静态方法:都是进行方法调用时才执行,调用静态方法,前提是:类已经加载到内存中;调用非静态方法,前提是类的对象已经加载到内存中。

那么,

类什么时候被加载/类加载时机:【即类被使用时,就会加载】
第一:生成该类对象的时候,会加载该类及该类的所有父类;
第二:访问该类的静态成员的时候;
第三:class.forName("类名");

静态属性、静态代码块、静态方法、构造方法、普通方法的执行顺序

时间: 2024-08-01 11:52:00

静态属性、静态代码块、静态方法、构造方法、普通方法的执行顺序的相关文章

java中类的静态代码块、构造代码块、构造方法、静态成员的初始化顺序详解

一.描述 java中类的静态代码块.构造代码块.构造方法.静态成员的初始化顺序: 首先,在类加载时,为类中的静态成员变量分配内存空间,并为其赋予默认值(整数型为0,浮点型为0.0,布尔型为false,字符型为'\u0000',引用型为null): 其次,执行静态成员变量的显式初始化操作.静态成员的初始化方法有两种,其一为在声明的时候直接初始化,其二为使用静态代码块进行初始化, 这两种初始化方式会按照在类中的出现顺序来执行,而且只在类加载的时候执行一次. 再次,如果创建了类的对象,便会在堆中为类的

Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺

class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法.子类也是这样,然后继承之后,关于程序打印输出的结果.涉及到Java类的各种成员的初始化顺序.经测试,得到如下结论: 1.父类[静态成员]和[静态代码块],按在代码中出现的顺序依次执行.2.子类[静态成员]和[静态代码块],按在代码中出现的顺序依次执行.3.父类的[普通成员变量被普通成员方法赋值]和[普通代码块],按在代码中出现的顺序依次执行.4.执行父类的构造方法

关于静态块、静态属性、构造块、构造方法的执行顺序

总结: 1.类加载时,执行静态代码块和初始化静态变量.执行顺序跟代码顺序一致. 2.类实例化时,初始化变量.执行代码块.执行构造.其中初始化变量和代码块的顺序跟代码顺序一致.执行构造是在最后. 3.实例化子类时,会先调用父类的构造方法.调用构造方法之前,会先执行该类的代码块. 4.类只会加载一次. 5.静态变量或静态方法中如果调用构造,可以把构造当做一个普通方法来看.但会先执行一遍代码块. 下面是在网上找到的比较典型的例子,以此来说明 例一: class A { static { System.

子父类中码静态代块 构造代码块. 代码块 构造函数 成员变量 实例变量 执行顺序

刚开始接触时,很不容易分清楚 创建子类或者多态的情况: /* 创建子类的情况: 1.父类静态代码块 2.子类静态代码块 3.父类构造块 /实例变量(new 创建的变量成员)//谁在前执行谁,执行完再执行构造函数 4.父类构造函数//父类构造函数有方法,如果方法子类有就执行子类的方法,没有才再执行父类方法.//如果子类有父类没有会报错!//父类私有该方法就执行父类的方法 5.子类构造块/实例变量//谁在前执行谁,执行完再执行构造函数 6.子类构造函数 7.子类普通方法//调用成员变量,看子类的值,

静态构造代码块、构造代码块、构造方法执行的顺序问题

/ 当前方法的执行结果是什么?请简述原理 / class Demo1 { static { Demo2 d = new Demo2(); } { System.out.println("我是Demo1的构造代码块"); } public Demo1() { System.out.println("我是Demo1的构造方法"); } } class Demo2 { static { Demo1 d = new Demo1(); } { System.out.print

java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数

一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构 Cat继承Animal Runner里包含main函数,程序入口 Sing类主要用来打印执行顺序的序列号 二.代码 public class Animal { Sing s1=new Sing(1,"animal\tnot static field"); static Sing s2=new Sing(2,&q

普通代码块、构造块、静态代码块、构造方法浅析

1.普通代码块:直接在一个方法中或语句中出现的{}被称为普通代码块. 相同类型的代码块执行顺序为,先定义先执行. 2.构造块:直接在类中定义的且没有加static关键字的代码块{}称为构造代码块. 构造块在创建对象时被执行,每次创建对象都会被执行,且构造块的执行顺序 优先于类构造函数. 3.静态代码块:在java类中使用static关键字声明的代码块称为静态代码块.静态 代码块主要用于初始化类,为类的静态属性初始化.有如下特定: 1)静态代码块不能存在任何方法体内 2)静态代码块不能直接访问实例

浅析Java中的构造代码块、静态代码块与构造方法

构造代码块.静态代码块与构造方法是三种不同的代码块,那么他们到底有什么区别呢? 一.简单认识一下构造代码块.静态代码块与构造方法 class A { //构造代码块 { System.out.println("构造代码块A"); } //静态代码块 static { System.out.println("静态代码块A"); } //构造方法 public A() { System.out.println("构造方法A"); } } 二.弄清三者

静态代码块、非静态代码块、构造方法的执行顺序

java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的static,都是最先初始化好的.结构如下: static { 静态语句代码块 } { 非静态语句代码块 } 异同点 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋     值. 不同点:静态代码块在非静态代码块之前执行(静态代码块-->非静态代码块-->构造方法).     静态代码块只在第一次new执行一次,之后不在执行,而非静态