首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java初始化顺序

java代码块 静态代码块:用staitc声明,jvm加载时执行,仅执行一次 构造代码块:中直接用{}定义,每一次创建对象时执行。 执行顺序优先级:静态块,main(),构造块,构造方法。...调用时,先执行静态代码块,然后才执行主函数的 静态代码块其实就是给初始化的,而构造代码块是给对象初始化的 静态代码块中的变量是局部变量,与普通函数中的局部变量性质没有区别 一个中可以有多个静态代码块...: 执行父的静态代码块,并初始化静态成员变量 执行子类的静态代码块,并初始化子类静态成员变量 执行父的构造代码块,执行父的构造函数,并初始化普通成员变量 执行子类的构造代码块, 执行子类的构造函数...,并初始化子类普通成员变量 总结 java初始化执行顺序如下: 父静态变量 父静态初始化块 子类静态变量 子类静态化初始化块 父变量 父初始化块 父构造器 子类变量 子类初始化块 子类构造器...规律是 静态变量、静态代码块->普通变量、初始化块、构造器 因为静态代码块是跟关联的,所以只执行一次,并且优先级最高 参考资料 java初始化顺序

84810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java初始化顺序

    初始化顺序 对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是: (静态变量、静态初始化块)>(变量、初始化块)>构造器。...静态变量、静态初始化块,变量、初始化初始化顺序取决于它们在中出现的先后顺序。...(2)执行根基的static初始化,然后是下一个派生的static初始化,依此类推。这个顺序非常重要,因为派生的“static初始化”有可能要依赖基成员的正确初始化。...(4)SubClass存在父,则调用父的构造函数,你可以使用super来指定调用哪个构造函数。基的构造过程以及构造顺序,同派生的相同。...首先基中各个变量按照字面顺序进行初始化,然后执行基的构造函数的其余部分。 (5)对子类成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。

    61930

    Java的,与初始化顺序

    ,变量初始化,调用父的构造器等操作收敛到方法中,收敛顺序(这里只讨论非静态变量和语句块)为:  1....父变量初始化  2. 父语句块  3. 父构造函数  4. 子类变量初始化  5. 子类语句块  6....子类构造函数 所谓收敛到方法中的意思就是,将这些操作放入到中去执行 Java在编译之后会在字节码文件中生成方法,称之为构造器,构造器同实例构造器一样,也会将静态语句块,静态变量初始化,收敛到方法中...所以整个顺序就是:  1. 父静态变量初始化  2. 父静态语句块  3. 子类静态变量初始化  4. 子类静态语句块  5. 父变量初始化  6. 父语句块  7....子类构造函数 初始化顺序 如下父代码 public class Parent { static int a = 1; int b = 1; static {

    31500

    JAVA初始化顺序

    在一个里,初始化顺序是由变量在内的定义顺序决定的。即使变量定义大量遍布于方法定义的中间, 那些变量仍会在调用任何方法之前得到初始化——甚至在构建器调用之前。...例如: //: OrderOfInitialization.java // Demonstrates initialization order. // When the constructor is called...除此之外,t3 在构建器内部得到了重新初始化。...它的输入结果如下: Tag(1) Tag(2) Tag(3) Card() Tag(33) f() 因此,t3 句柄会被初始化两次,一次在构建器调用前,一次在调用期间(第一个对象会被丢弃,所以它后来...从表面看,这样做似乎效率低下,但它能保证正确的初始化——若只定义了一个过载的构建器,它没有初始化 t3;同时在t3 的定义里并没有规定“默认”的初始化方式,那么会产生什么后果 呢?

    71320

    Java初始化顺序

    对于静态成员(static块可以看成普通的一个静态成员,其并不一定在初始化时首先执行)和普通成员,其初始化顺序只与其在定义中的顺序有关,和其他因素无关。...--------构造函数 2 Java继承情况下的初始化顺序: class Test{ static{ System.out.println("父static 块 1 执行...子类 sam1成员初始化 子类 sam2成员初始化 子类 TestSub 默认构造函数被调用 -------父普通成员初始化和构造函数执行 由此得出Java初始化顺序结论: 1 继承体系的所有静态成员初始化...(先父,后子类) 2 父初始化完成(普通成员的初始化-->构造函数的调用) 3 子类初始化(普通成员-->构造函数) Java初始化顺序如图: ?...3.另外一条规则是初始化块和域的初始化按照声明的顺序进行。 详见thinking in java中译本第四版的P147页。

    61870

    java基础☞初始化顺序java继承中的初始化顺序

    1、初始化顺序:父的静态变量-->父的静态代码块-->子类的静态变量-->子类的静态代码快-->父的非静态变量(父的非静态代码块)-->父的构造函数-->子类的非静态变量(子类的非静态代码块...子类的构造函数被执行 2、JAVA 的加载机制 Java加载分为5个过程,分别为:加载,连接(验证,准备,解析),初始化,使用,卸载。...2)将字节流所代表的静态存储结构转化为方法区的运行时数据结构; 3)在内存中生成一个该类的java.lang.Class对象,作为方法区这个的各种数据的访问入口。...初始化 初始化阶段是加载过程的最后一步,主要是根据程序中的赋值语句主动为变量赋值。 当有继承关系时,先初始化初始化子类,所以创建一个子类时其实内存中存在两个对象实例。...以上除了搞清楚执行顺序外,还有一个重点->结论2:静态资源在初始化中只会执行一次。不要与第3个步骤混淆。

    99930

    java小心机(5)| 浅谈成员初始化顺序

    成员什么时候会被初始化呢?一般来说:"的代码在初次使用时才被加载",加载过程包括了初始化。 比如说new A()调用构造函数时,中全部成员都会被初始化。...但对于static域(包括静态成员变量、静态代码块、静态方法),当某个static域被调用时,中的的所有staict就会被初始化,按照定义顺序(即书写顺序)初始化,且只会初始化一次(N个实例共用)。...:静态域 -> 非静态域 -> 构造函数 以上面优先级并按所定义的顺序初始化(即书写顺序) 在有继承父的情况下: class HelloA extends HelloB{ public HelloA...("父:非静态块B"); } } //out: 父:静态块B 子类:静态块A 父:非静态块B 父:构造函数B 子类:非静态块A 子类:构造函数A 从结果可以看出,初始化顺序为:父静态域...->子类静态域->父非静态域->父构造函数->子类非静态域->子类构造函数 这里说明一点:这是初始化顺序,不等同于语句程序的执行过程。

    44610

    java初始化和对象的创建顺序

    学习java编程思想--初始化p146 的加载顺序 * 1加载器启动找到 xxx.class文件,通过extends关键字寻找基,先加载基 * 2初始化初始化static成员变量和static...---> * 2先初始化的static成员变量和static * 3再初始化本类的static成员变量和static * 加载之后,对象创建开始 * 1先加载父的非静态成员变量(静态成员变量在初始化的时候已经加载...,非静态成员变量要随对象的创建而初始化) * 2先加载父的构造函数 * 3再加载本类的非静态成员变量 * 4再加载本类的构造函数 * 总体: * -->表示顺序 * 父-->子类 * 静态-->...非静态 * -->对象 * static随的加载而加载 * 非static成员变量随对象的创建而加载 * 成员变量先于构造器加载 1 package com.test.java.classs;...关键字寻找基,先加载基 7 * 2初始化初始化static成员变量和static---> 8 * 2先初始化的static成员变量和static 9 * 3再初始化本类的static

    1K160

    Java对象初始化顺序

    虽然小示例中使用了 String 类型,Initializer 的实际代码中有一个用于注册的委托对象,与 Lower 的功能是相同的 — 至少 Lower 是这个意图。...当查看初始化顺序的时候一切就变的清晰了: 1.main() 函数调用了 Lower 构造器。 2.Lower 的一个实例被准备好了。...然而,如果有一个明确地赋值 null 的操作,执行流程会略有不同:当父构造器完成后,在其余的构造器运行前,任何变量初始化都会执行(参见java语言规范12.5节)。...这是一个很好的例子,不仅方便我们如何注意一些创建对象的细节(或者知道去哪里查看 Java 编码规范,打印的或者在线的),还显示了为什么像这样写初始化是很糟糕的。...相反的,如果因为一些原因对某些字段的初始化不能在子类本身被完成,它将只需要它自己的某些初始化帮助的变体。

    72310

    c#初始化顺序

    本文转载:http://www.cnblogs.com/ybhcolin/archive/2010/09/24/1834219.html c#初始化顺序 初始化时的执行顺序,依次如下: 1: 子类静态变量...2: 子类静态构造函数 3: 子类非静态变量 4: 父静态变量 5: 父静态构造函数 6: 父非静态变量 7: 父构造函数 8: 子类构造函数 对于静态变量与静态构造函数而言, 无论对一个创建多少个实例...也就是说,静态变量与静态构造函数只初始化一次(在第一次实例化时) 以下代码:  1  class Class1  2     {  3         public static int Count ...public static string test1 = "";//4: 父静态变量 static TestBase() //5: 父静态构造函数...{ } public TestBase()//7: 父构造函数 { } }

    1.7K40

    AS3.0中初始化顺序

    我做了一个比较,java中有静态初始化块的概念(as3中是没有的),格式如下: static { //TODO…. } 关于java初始化顺序,我想只要随便搜索一下,将有超过十万的结果出来 这里侧重点在...,中的变量才被初始化 运行的结果显示如下: 父--静态变量 子类--静态变量 父--变量 父--构造器 子类--变量 子类--构造器 ?...as3中初始化顺序java基本上是相同(除了as3中没有静态块的概念外): (1)当被加载时,该类的静态属性和方法会被初始化 (2)初始化成员变量 (3)调用构造器 而java中: ?...运行的结果: 父--静态变量 父--静态初始化块 子类--静态变量 子类--静态初始化块 父--变量 父--初始化块 父--构造器 子类--变量 子类--初始化块 子类--构造器...如果去除”静态初始化块” 那么java与as3的加载顺序表现上是一致的

    67740

    构造方法、初始化块以及字段的初始化顺序

    多构造函数 初始化块 ​ 如果一个中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?...this.field = value; } public InitializeBlockClass() { } } 这是一个生造出来展示Java...语法特性的示例,在实际开发中不要这样写代码,应该尽量保证一个字段只初始化一次! ​...} 规律(字段的初始化顺序) 执行成员定义时指定的默认值或初始化块,到底执行哪一个要看哪一个“排在前面”。 执行的构造函数。...初始化块不接收任何的参数,而且只要一创建的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

    53420

    Java加载的顺序

    前言 那一年,呼延十又回想起被加载顺序支配的恐惧,笔试题上,好几个,几个方法,几个输出语句,让你按照顺序写出输出.我真的是有一句…. 但是呢,我们还是有了解一下的必要的,在编码过程中有许多的应用....正文 经常用来比较顺序的,无非就是静态代码块,普通代码块,静态方法和普通方法. 这里直接说一下结论: 先静态后普通最后构造方法,先父后子类....由于B有父,因此先加载A. 加载A的静态代码块,输出A-----static. 加载B的静态变量,调用了方法,输出B----- static func....加载A的构造方法,输出A----- constructor. 加载B的普通变量,调用了方法,输出B----- default. 加载B的构造方法,输出了B----- constructor....静态变量,静态代码块的加载顺序只和代码编写的顺序有关. 普通变量及构造方法,顺序一定是先普通变量,再构造方法的. 说好的应用呢 其实我目前对这个知识点应用最多的就是静态代码块.

    1.3K20

    Java中变量的初始化顺序

    Java中变量的初始化顺序 在写一个通用的报警模块时,遇到一个有意思的问题,在调用静态方法时,发现静态方法内部对静态变量引用时,居然抛出了npe,仿佛是因为这个静态变量的初始化在静态方法被调用时,还没有触发...初始化顺序 初始化顺序 静态变量, 静态代码快 -》 实例变量(属性,实例代码块,构造方法) 继承关系初始化顺序静态成员,静态代码块 -》 子类静态成员,静态代码块 -》 父实例变量(属性,...静态变量初始化顺序 初始化时,会优先初始化静态成员,那么一个中有多个静态成员时,如何处理的? 下面是一个使用静态成员,静态代码块,静态方法的测试,那么下面的输出应该是怎样的呢?...初始化顺序 初始化顺序 静态变量, 静态代码快 -》 实例变量(属性,实例代码块,构造方法) 继承关系初始化顺序静态成员,静态代码块 -》 子类静态成员,静态代码块 -》 父实例变量(属性,...实例代码块,构造方法)-》子类实例变量(属性,实例代码块,构造方法) 相同等级的初始化的先后顺序,是直接依赖代码中初始化的先后顺序 2.

    1.2K10

    彻底搞懂java程序的初始化顺序

    使用场景 在java程序中,当实例化对象时,对象的所在的所有成员变量首先要进行初始化,只有当所有成员完成初始化后,才会调用对象所在的构造函数创建对象。 原则 变量优先于块、静态优先于非静态。...父优先于派生初始化。 按照成员变量定义的顺序来进行初始化,即使变量定义散布于方法定义之中,它们仍然在任何方法(包括构造器)被调用前初始化。...初始化顺序静态变量 父静态代码块 子类静态变量 子类静态代码块 父非静态变量 父非静态代码块 父构造函数 子类非静态变量 子类非静态代码块 子类构造函数 初始化示例代码 class Base...Base.A() 父静态变量 父静态代码块 子类静态变量 子类静态块 父普通静态方法 Derived.A() 父静态变量 父静态代码块 子类静态变量 子类静态块 子类普通静态方法 new Derived...() 父静态变量 父静态代码块 子类静态变量 子类静态代码块 父非静态变量 父非静态代码块 父构造函数 子类非静态变量 子类非静态代码块 子类构造函数 更多内容,欢迎关注微信公众号:全菜工程师小辉

    2.4K31
    领券