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

Enum类型中wrt到构造函数的静态块的执行顺序

在Java中,枚举类型(Enum)是一种特殊的类,用于定义一组固定的常量值。枚举类型中的构造函数和静态块的执行顺序如下:

  1. 静态块:在枚举类型定义的所有枚举常量之前,静态块会被依次执行。静态块是一个特殊的代码块,用于初始化静态变量和执行静态代码块。静态块只会执行一次,在枚举类型被加载时执行。
  2. 构造函数:对于每个枚举常量,其构造函数会被执行。构造函数用于初始化枚举常量的实例变量和执行实例代码块。构造函数会在静态块执行完毕后,按照枚举常量的定义顺序依次执行。
  3. 实例代码块:如果枚举类型中定义了实例代码块,则实例代码块会在构造函数执行完毕后执行。实例代码块是一个特殊的代码块,用于执行一些额外的初始化操作。

需要注意的是,枚举类型中的静态块和构造函数是由Java虚拟机自动调用的,开发人员不需要手动调用。同时,由于枚举类型的特殊性,枚举类型的构造函数不能被显式调用,只能在定义枚举常量时被调用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 静态构造构造函数执行顺序

Java代码行执行顺序: 1.静态:用static声明,JVM加载类时执行,仅执行一次 2.构造:类中直接用{}定义,每次创建对象时执行 3.执行顺序优先级:静态>main()>构造>构造方法...出现继承时: 1.初始化父类静态变量、静态代码,初始化顺序按照出现顺序。 2.初始化子类静态变量,静态代码。 3.初始化父类成员变量。 4.执行父类构造函数。...5.初始化子类成员变量。 6.构造代码创建对象时执行 7.执行子类构造函数。...$; n=100 m=210** 结果(三):【将Father类两个引用p、p1注释掉运行结果,结果二new Son();也注释掉】 父类%%静态%%调用; m=10 父类**构造...**调用;n=10 m=20 父类$$构造函数$$; n=100 m=30 结果(四):【将Father类两个引用p、p1注释掉运行结果,结果二new Son();不注释掉】 父类

1.6K30

java静态属性,静态构造函数执行顺序

今天为了搞清楚实例化一个对象时其属性等实例化顺序,写了下面的例子来探究: 实例化一个C对象,其中,A为其静态属性,B为其普通属性;D为C父类,E为D静态属性,F为D普通属性;C还包含了静态代码和普通代码.../** * 静态代码先于构造执行 普通先于构造执行一次 * 凡是静态与对象无关,先于对象存在; 凡是静态都是共享 */ B b = new B(); static...public C(){ System.out.println("构造函数C"); } } 运行结果: -------第1次实例化------- 父类静态属性E 构造静态属性A 静态代码...父类普通属性F 构造父类D 构造普通属性B 普通代码 构造函数C -------第2次实例化------- 父类普通属性F 构造父类D 构造普通属性B 普通代码 构造函数...C 结论(实例化顺序): 父类静态属性 父类静态代码 子类静态属性 子类静态代码 父类普通属性 父类普通代码 父类构造函数 子类普通属性 子类普通代码 子类构造函数 静态东西只在第一次实例化时候执行

1K60

Java 静态代码构造代码构造函数执行顺序

类调用时,先执行静态代码,然后才执行函数,总的来说,静态代码是和类一起,优先级最高,类加载同时,静态代码同时也执行,但只执行一次,所以作用一般是用来加载一些配置代码,或者加载某些文件配置。...构造函数 构造函数作用是用于给对象进行初始化,对象一建立,就会调用与之相应构造函数,也就是说,不建立对象,构造函数时不会运行构造代码 构造代码作用同样是给对象进行初始化。...对象一建立就运行构造代码了,而且优先于构造函数执行。这里要强调一下,有对象建立,才会运行构造代码,类不能调用构造代码,而且构造代码构造函数执行顺序是前者先于后者执行。...构造函数构造代码区别: 构造代码构造函数区别是:构造代码是给所有对象进行统一初始化,而构造函数是给对应对象初始化,因为构造函数是可以多个,运行哪个构造函数就会建立什么样对象,但无论建立哪个对象...也就是说,构造代码定义是不同对象共性初始化内容。 运行结果: 可以看出来,静态代码执行一次,而每次创建对象都会调用共同构造代码,而构造函数也只在创建对象时执行该对象构造函数

75510

Java静态代码、代码以及构造函数执行顺序详解

静态代码,代码构造方法执行顺序 前段时间面试,做到一个笔试题主要考察静态代码,代码构造方法执行顺序,由于自己没复习所以这个题肯定没做出来,回家后在Idea中进行代码测试运行。...可以看出到实际上执行顺序应该是父类静态代码——>子类静态代码——>父类代码——>父类构造方法——>子类代码——>子类构造方法。 为什么先执行父类静态代码呢? 但是为什么会这样呢?...为什么第二个执行代码? 讲完了静态代码是最优先执行,但是为什么代码执行顺序会比构造方法先呢?我们通过反编译工具来看一下 ?...通过反编译工具发现,代码实际上是被放到了构造方法,且是放在了构造方法第一行,那么就不难解释为什么代码会比构造方法执行顺序靠前。...,所以此时就会执行父类代码以及构造方法,当super执行完毕回到子类时,由于子类代码也被放到了构造方法,且在super之后所以执行子类代码执行子类构造方法。

1.3K30

静态代码、非静态代码构造函数三者执行顺序

主要探讨一下关于静态代码,非静态代码构造函数执行顺序。 如有错误,欢迎指出。 首先: 静态成员变量和静态代码优先级是一样,先定义执行。...在创建一个对象时候会执行静态代码构造函数 再者是执行顺序: /* * *(1)父类静态成员和静态初始化,按在代码中出现顺序依次执行。...* *(2)子类静态成员和静态初始化,按在代码中出现顺序依次执行。 * *(3)父类实例成员和实例初始化,按在代码中出现顺序依次执行。 * *(4)执行父类构造方法。...* *(5)子类实例成员和实例初始化,按在代码中出现顺序依次执行。 * *(6)执行子类构造方法。...2.在创建一个对象时候会执行静态代码构造函数

45520

静态代码构造代码以及构造函数加载顺序

构造代码,和构造函数都存在于一个类,只不过,他们执行先后顺序执行次数不同。...构造函数构造函数命名必须和类名完全相同,它没有返回值,也不能用void来修饰。 执行顺序优先级:静态>main()>构造>构造方法。...接着开始在堆内存对实例变量进行默认初始化, 然后执行构造代码,对object进行对应构造代码初始化, 最后进行构造函数初始化,对object进行对应构造函数初始化。...作用分析 静态代码用于给类初始化,类加载时候就会被执行构造代码用于给对应对象初始化,只要创建对象就会被执行,而且执行顺序优先于构造函数构造函数用于给对应对象初始化,只要创建对象,就会选择相应构造函数进行初始化...总结:静态代码是最先执行,然后执行父类构造代码以及父类构造方法,接着去执行子类静态代码以及子类构造方法。

69020

一文整懂 Java 静态代码 初始 构造方法执行顺序

一文整懂 Java 静态代码 / 初始 / 构造方法执行顺序 “ 相信,刷过面试题应该都碰到过很多题,关于类继承后 Java 静态代码 / 初始 / 构造方法执行顺序问题,每每记一下又忘了...,那么,今天来用不多时间复习一下” 01.静态代码 / 初始 / 构造方法执行顺序 package erdan.demo; public class Demo { static {...wx_fmt=png] 笔记:初始(非静态代码)总是和构造方法是一家子,会一出现 02.测试继承之后执行顺序 package erdan.demo; public class ChildrenDemo...类比子类先执行 态代码只会输出一次,初始构造方法是一家子,输出在一,初始会在构造前初始化 03.总结 父类比子类先行执行 静态代码,在类第一次加载时候,会初始化一次,适合项目中初始化全局参数...,常量等 初始构造方法是一家子,但是初始会在构造函数执行,初始适合重载构造函数存在相同代码,可以抽出来使用

83211

静态代码静态变量,构造代码、实例变量执行顺序和继承逻辑

变种面试题 原因: 冷知识 case4:子类和父类有`同名同类型``静态`变量时候 case5:静态代码属于类,并且优先于main方法执行(有难度) 注解对执行顺序影响 继续补充:子类默认调用...从结果,这里先给你扔个结论: 先初始化静态变量,也就是执行new StaticTest(),从而打印:2 再执行构造函数,打印:3和a=110,b=0 为何a=110,而b却为0呢? 1....执行构造函数之前,必须初始化实例属性,所以a=110 2. 静态变量从上到下初始化,而st变量还没初始化完呢,所以b此时值为0 执行紧跟着静态代码。...类构造器:编译器收集所有静态语句和类变量赋值语句,按语句在源码**顺序(请注意这三者是有序)**合并生成类构造器 因此现在执行:st = new StaticTest().此时我们发现,就会进行对象初始化了...(看到没,这个时候b变量赋值语句还没有执行哦~~~) 而对象初始化顺序为:成员变量 -> 普通代码 -> 构造函数,因此这一波过后:a=110了。

87850

实例化顺序静态数据、构造函数和字段执行顺序详解

引言 在面向对象编程,类实例化是一个重要概念。当我们创建一个类实例时,其中涉及多个步骤,包括父类和子类静态数据初始化、构造函数执行以及字段初始化。...类实例化顺序概述 在理解类实例化顺序之前,让我们先概括一下这个过程步骤: 父类静态数据初始化:首先,父类静态数据(静态字段和静态)会被初始化。...这些静态数据在整个类层次结构只会初始化一次。 父类构造函数:接着,父类构造函数会被调用。父类构造函数可能会执行一些初始化操作,例如设置实例字段默认值。...子类构造函数,包括子类字段初始化。 在实际应用,了解这些顺序对于正确地构建和初始化类实例非常重要。在多层次类继承结构,确保每个步骤都按照正确顺序执行,可以避免潜在错误和不一致性。...结语 类实例化顺序涉及静态数据初始化、构造函数和字段初始化等多个步骤,了解这些步骤执行顺序对于编写正确面向对象程序至关重要。本文通过示例和详细解释,希望能够帮助读者更好地理解类实例化过程。

34220

【小家java】类静态代码构造代码静态变量、成员变量执行顺序和继承逻辑

(t1.i); //第3步,按顺序执行,9 speak(); //第4步,按顺序执行,调用静态函数...4、子类构造函数若多余父类(或者类型和父类不匹配),需要显示调用父类构造函数 ?...我觉得脑子里应该浮现出一个这样知识点: Java赋值顺序: 1、父类静态变量赋值 2、自身静态变量赋值 3、父类成员变量赋值和父类赋值 4、父类构造函数赋值 5、自身成员变量赋值和自身赋值...类构造器:编译器收集所有静态语句和类变量赋值语句,按语句在源码顺序合并生成类构造器 因此现在执行:st = new StaticTest().此时我们发现,就会进行对象初始化了(看到没,这个时候...b变量赋值语句还没有执行哦~~~) 而对象初始化顺序为:成员变量 -> 普通代码 -> 构造函数 因此这一波过后:a=110了。

1.4K20

子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码、父类B非静态代码、子类A构造函数、子类A静态代码、子类A非静态代码 执行先后顺序是?

(1)子类A继承父类B, A a = new A(); 则: 父类B静态代码->子类A静态代码->父类B非静态代码->父类B构造函数->子类A非静态代码->子类A构造函数 (2)若子类构造函数显式调用了父类构造函数...,但是该类继承自A,所以要先调用父类构造方法,这里通过super(“B”)显示调用了父类带参构造。...执行父类带参构造前要先对父类对象进行初始化,对父类c成员进行初始化,调用了C类无参构造,所以调用顺序为: 先调用C类无参构造 再调用A类带参构造 最后调用调用子类构造 (3...)在JVM调用mian方法之前先用进行静态内容初始化。...顺序为:父类静态变量, 父类静态代码 ,子类静态变量,子类静态代码

2.1K30

Java静态代码构造代码构造方法、普通代码

前言 Java静态代码构造代码构造方法、普通代码执行顺序是一个比较常见笔试题,合理利用其执行顺序也能方便实现项目中某些功能需求 。...System.out.println("静态代码"); } } b.执行时机 静态代码在类加载时候执行,并且仅执行一次,如果一个类中有多个静态代码,将按照书写顺序执行。...尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全;   2.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般方法是在程序执行时候被调用...普通代码 普通代码构造代码区别是,构造代码是在类定义,而普通代码是在方法体定义。且普通代码执行顺序和书写顺序一致。...图1-1 代码清单1-1运行结果 父类和子类执行顺序   首先执行父类静态内容,父类静态内容执行完毕后,接着去执行子类静态内容,当子类静态内容执行完毕之后,再去看父类有没有构造代码,如果有就执行父类构造代码

3.4K10

【面试题】Java中子类和父类静态代码、非静态代码构造函数执行顺序总结一览表

在面试时候,有时候我们会被问到这样问题:子类A继承父类B,A a = new A();则父类B构造函数、父类B静态代码、父类B非静态代码、子类A构造函数、子类A静态代码、子类A非静态代码执行先后顺序是什么...非静态代码也可以叫作:非静态初始化代码运行时机:会在构造函数执行时候,在构造函数代码执行之前被运行三:构造函数构造函数或者构造方法不用多说了吧,就是用来创建对象。...我们来看下父类B编译成class文件时候,非静态代码构造函数相关代码如下:从代码,我们可以看出非静态代码执行顺序优先于构造函数。...总结:好了,通过上面分析,我们可以得到以下总结:1:如果在同一个类静态代码、非静态代码构造函数执行顺序如下:静态代码→非静态代码构造函数这个过程,我们反编译class文件也可以看到。...如下图:2:父类和子类静态代码、非静态代码构造函数执行顺序:父类静态代码→子类静态代码→父类非静态代码→父类构造函数→子类非静态代码→子类构造函数具体加载如下图:所以,根据上面的分析

53050

多个类多线程环境下静态构造函数执行顺序

网上很多资料说到静态构造函数,但是很少提到与线程相关,这个例子实际上是想测试一下静态构造函数多线程冲突。 其实,这个问题源自于XCode v7.3一个隐秘BUG。...实体类A静态构造函数可能会开一个线程去执行方法B,然后静态构造函数接着执行后续方法C,问题就在于B和C都会争夺同一个锁,如果B拿到这个锁,它会创建一个A实例,但是因为A静态构造函数正常执行C,C...// 2,CreateOperate将会实例化一个TEntity对象,从而引发TEntity静态构造函数, // 避免实际应用,直接调用Entity静态方法时,没有引发...答案: 上面微软答复邮件说得很清楚,静态构造函数只会被调用一次,并且在它执行完成之前,任何其它线程都不能创建这个类实例或使用这个类静态成员!...4,也是最隐秘地方。测试代码,在A静态构造函数里面使用了匿名函数,而编译器会把它编译成为A一个静态方法,因此,它就成了A静态成员了,所以…… 实际上,我们没注意地方是第四点,太粗心了!

84170

Javatry-finally执行顺序

本文主要介绍关于异常处理时候try-catch-finally执行顺序,一般情况下,finally是会执行,在Java,try-finally执行顺序通常遵循以下规则: try代码首先被执行...如果try代码执行完毕,控制流将转到finally。无论try代码是否抛出异常,finally代码都将被执行。...finally代码执行完毕后,整个try-finally结束,控制流将继续下一个语句或代码。...finally,tryreturn结果会放在类似一个队列,之后如果finally中有return语句,则会把finallyreturn语句中结果放入队列,最终是队列第一个数据,即finally...总结: finally语句在try和catch语句中return执行后、返回前执行; 若finally语句中没有return,则其执行结果不影响try和catch已确定返回值; 若finally语句中有

22150
领券