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

java初始化顺序

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

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

Java初始化顺序

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

59330

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 {

29600

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页。

58970

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 的定义里并没有规定“默认”的初始化方式,那么会产生什么后果 呢?

69820

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

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

95030

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

977160

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

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

41710

Java对象初始化顺序

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

69710

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的加载顺序表现上是一致的

64840

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

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

50520

Java加载的顺序

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

1.2K20

Java中变量的初始化顺序

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

1.1K10
领券