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

java什么时候执行类级字段赋值?

Java在执行类级字段赋值时,在类的加载过程中进行。具体来说,当Java虚拟机加载一个类时,会执行以下步骤:

  1. 加载:将类的字节码文件加载到内存中,创建一个对应的Class对象。
  2. 验证:验证字节码文件的正确性,包括语法检查、符号引用验证等。
  3. 准备:为类的静态变量分配内存空间,并设置默认初始值(0、null等)。
  4. 解析:将类、接口、方法等符号引用解析为直接引用。
  5. 初始化:执行类的初始化操作,包括执行类级字段赋值和静态代码块等。

所以,类级字段赋值是在类初始化阶段进行的。类初始化时,类级字段被赋予初始值或指定的值。可以通过静态代码块或直接赋值的方式进行类级字段赋值。

举个例子,假设有一个类如下:

代码语言:txt
复制
public class MyClass {
    public static int myField = 10;
    
    static {
        System.out.println("Static block");
    }
}

在类加载过程中,当虚拟机加载MyClass类时,会先为myField分配内存空间并设置默认初始值,然后执行类级字段赋值将myField赋值为10。同时,静态代码块会在类初始化阶段执行,输出"Static block"。

总结起来,Java在类加载过程中执行类级字段赋值,即在类初始化阶段进行。

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

相关·内容

  • 你知道Java中final和static修饰的变量是在什么时候赋值的吗?

    对于非静态字段,ConstantValue属性是不会生效的。 至于为什么要这样设计,功力不够的我暂时无法理解设计者的想法。 那单独用final修饰的实例变量到底是在什么时候赋值的呢?...我们看看JVM规范上的解释: 我们温习一下这个英语四短语:appear as 然后,我们一起翻译一下: 在JVM层面上,每一个用Java写的构造方法都表现为实例初始方法,这个方法就是方法...static修饰的变量 ---- 上面讲到ConstantValue属性的作用是通知虚拟机为静态变量赋值。 什么是静态变量?static修饰的变量! 那static修饰的变量是什么时候加载的呢?...准备:创建或者接口的静态字段,并为静态变量设置初始值。 解析:将常量池内的符号引用替换为直接引用。 初始化:执行构造器方法。...这个方法在加载的初始化阶段执行。 需要注意点的是,用生成ConstantValue属性来进行初始化,这个变量必须是基本类型或者java.lang.String类型。

    1.8K20

    一个工具搞定CRUD的创建人,修改人,时间等字段赋值

    背景 数据库设计过程中,我们往往会给数据库表添加一些通用字段,比如创建人、创建时间、修改人、修改时间,在一些公司的设计过程中有时会强制要求每个表都要包含这些基础信息,以便记录数据操作时的一些基本日志记录...代码介绍 核心代码声明了一个 CommonDaoAspect 切面,实体中声明了 4 个核心方法和一个获取用户名信息的方法,UserUtils 是项目中声明的工具,包含获取用户id、姓名等一些基础信息...4 个核心方法中,daoUpdate 和 daoCreate 上添加了 @Pointcut 注解,该注解通过声明正则表达式来确定项目包中 dao 目录下哪些方法执行该切面方法。...本文中是在目标方法(即项目中 dao 目录下实体中包含 insert 或 update 字符串的方法)执行时加入切入信息,即执行新增或更新时加入创建人和更新人等信息。...@Around:环绕通知,在目标方法完成前后做增强处理,本案例中表示在 doCreate 和 doUpdate 方法执行时添加参数信息 注:execution(* com.xx.xxxx.*.dao.*

    63410

    java加载和初始化_java静态变量什么时候初始化

    目录 一、的加载与ClassLoader的理解 1、加载 2、链接 3、初始化 二、什么时候会发生初始化 1、的主动引用(一定会发生的初始化) 2、的被动调用(不会发生的初始化) 三、加载器的作用...四、动态创建对象执行方法 一、的加载与ClassLoader的理解 1、加载 将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个java.lang.class...3、初始化 执行构造器()方法的过程。构造器()方法是由编译期自动收集中所有变量的赋值动作和静态代码块中的语句合并产生的。(构造器是构造信息的,不是构造该类对象的构造器)。...二、什么时候会发生初始化 1、的主动引用(一定会发生的初始化) 当虚拟机启动,先初始化main方法所在的; new一个的对象; 调用的静态成员(除了final常量)和静态方法; 使用java.lang.reflect...四、动态创建对象执行方法 package com.reflection; import java.lang.reflect.Constructor; import java.lang.reflect.Field

    48920

    Java 编程问题:七、Java 反射、接口、构造器、方法和字段

    150 检查 通过使用 Java 反射 API,我们可以检查的详细信息,对象的名、修饰符、构造器、方法、字段、实现接口等。...获取Pair字段 的所有字段都可以通过Class.getDeclaredFields()方法访问。...在编译代码时,编译器将通过添加一个用于引用顶级的合成字段来更改此类。这个合成字段提供了从嵌套访问封闭成员的便利。...()方法访问封闭字段Car.type,Java 修改了代码并添加了一个桥接package-private方法,称为access$000()。...希望我们已经完成了对 Java 反射 API 的全面遍历。我们已经详细讨论了有关、接口、构造器、方法、字段、注解等的问题

    1.1K00

    Java的加载方式、的初始化、执行方式

    3由用户指定加载器。如果需要在当前路径以外寻找,则只能采用第3种方式。即第3种方式加载的与当前分属不同的命名空间。...1是静态加载、2、3是动态加载 异常(exception) 静态加载的时候如果在运行环境中找不到要初始化的,抛出的是NoClassDefFoundError,它在JAVA的异常体系中是一个Error;...动态态加载的时候如果在运行环境中找不到要初始化的,抛出的是ClassNotFoundException,它在JAVA的异常体系中是一个checked异常。...1 初始化,也就是new时候会初始化 2 访问或者接口中的静态变量或者对其赋值 3 调用的静态方法 4 反射(Class.forName("com.geminno");) 5 初始化它的子类...,父也会初始化 6 虚拟机启动时被标明是启动java Test),直接用java.exe运行某个; 程序执行结束的几种方式: 1 system.exit(); 2 正常执行完毕; 3

    1.2K00

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

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

    74620

    这款Java工具库简直棒

    这几天在微信公众号看到有号主推荐一个Java工具库,当时没有在意,觉得已经有Java的common包了,还有Guava库,已经够用了。但是今天又来看了一遍,觉得这个库别有一番风味。...Github上关于Hutool介绍: “Hutool是一个小而全的Java工具库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的...,单位毫秒 Console.log(tester.getInterval()); 缓存工具 还有一些缓存工具。...com.company.aaa.job] TestJob.run = */10 * * * * TestJob2.run = */10 * * * *Copy to clipboardErrorCopied 中括号表示分组,也表示需要执行或对象方法所在包的名字...TestJob.run表示需要执行名和方法名(通过反射调用,不支持Spring和任何框架的依赖注入),*/10 * * * *表示定时任务表达式,此处表示每10分钟执行一次,以上配置等同于: com.company.aaa.job.TestJob.run

    64730

    Java 机制(4)---- 字节码和方法执行

    在开始之前我们先回顾一下在之前讲过的内容,在 Java 机制(3)---- 文件结构 中我们解析了已经编译好的 .class 文件的内容结构。...因此在 attribute_info 表中,info 字段的具体值需要确定了具体的表类型之后才能确定。故上文说 attribute_info 是描述一表指的就是这个意思。...方法的执行 从上面的内容中我们已经知道 Java 中方法中的代码经过编译器编译后会作为字节码储存在 method_info 中的额外属性 Code 表中,也就是说我们写的 Java 代码在虚拟机执行的时候是执行一行行的字节码...好了,到这里我们就将 Java 机制介绍完了,这个系列从反射开始、到的加载过程、再到文件结构、最后是虚拟机的字节码和指令执行模型,希望这一系列对你理解虚拟机中的机制会有所帮助。...好了,到这里我们就将 Java 机制介绍完了,这个系列从反射开始、到的加载过程、再到文件结构、最后是虚拟机的字节码和指令执行模型,希望这一系列对你理解虚拟机中的机制会有所帮助。

    52920

    加载机制

    加载机制 的加载过程总的来说分为7个过程:加载,验证,准备,解析,初始化,使用,卸载,其中的验证,准备,解析又称为连接阶段 java虚拟机规范并没有规定什么时候要进行加载阶段,但是规定了什么时候必须进行初始化阶段...例子1 /** * 被动使用字段演示一: 通过子类引用父的静态字段,不会导致子类初始化 **/ class SuperClass { static { System.out.println...初始化阶段是执行构造器<clinit>()方法的过程 <clinit>()方法是由编译器自动收集中的所有变量的赋值动作和静态语句块(static{}块)中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序所决定的...System.out.print(i);//这句编译器会提示"非法向前引用" } static int i=1; } 由于父的<clinit>()方法先执行,也就意味着父中定义的静态语句块要优先于子类的变量赋值操作...使用双亲委派模型来组织加载器之间的关系,有一个显而易见的好处就是Java随着它的加载器一起具备了一种带有优先的层次关系。

    41320

    JAVA 虚拟机加载机制和字节码执行引擎

    索引,父索引,和接口索引集合:索引用来确定这个的全限定名,父为父的全限定名,接口索引集合为接口的全限定名。 字段表集合:用于描述接口或者中声明的变量,但不包含方法中的变量。...方法表集合:用于表述接口或者中的方法。 属性表集合:class文件,字段表,方法表中的属性都源自这里。...初始化的5种情况: 使用new关键字实例化对象时,读取或设置一个的静态字段,除被final修饰经编译结果放在常量池的静态字段,调用的静态方法时。...初始化 初始化是加载的最后一个阶段,将执行构造器()方法,注意这里的方法不是构造方法。该方法将会显式调用父构造器,接下来按照java语句顺序为变量和静态语句块赋值。...C语言等编译型语言会由单独的执行引擎做这些工作,而Java语言等解释型语言语法抽象树由jvm完成。jvm可以选择通过解释器来解释字节码执行还是通过优化器生成机器代码来执行

    90310
    领券