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

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

2、链接 将Java类的二进制代码合并到JVM的运行状态之中的过程。...验证:确保加载的类信息符合JVM规范,没有安全方面的问题; 准备:正式为类变量分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区内进行分配; 解析:虚拟机常量池内的符号引用(常量名)替换为直接引用...3、初始化 执行类构造器()方法的过程。类构造器()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。(类构造器是构造类信息的,不是构造该类对象的构造器)。...二、什么时候会发生类初始化 1、类的主动引用(一定会发生类的初始化) 当虚拟机启动,先初始化main方法所在的类; new一个类的对象; 调用类的静态成员(除了final常量)和静态方法; 使用java.lang.reflect...如:当通过子类引用父类的静态变量,不会导致子类初始化; 通过数组定义类引用,不会触发此类的初始化; 引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了); 三、类加载器的作用 将class

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

    Java基础入门知识之交换变量和String类初始化

    大家好,我是Java进阶者,今天小编带大家一起来学习Java技术基础! 一、交换变量 1.什么是交换变量 例如用户输入a、b的值分别3,9的整数,要求输出的值为a=9,b=3。如何交换这两个变量呢?...在Java中提供了String类和StringBuffer类封装字符串,也提供一些操作字符串的方法。...2.String类进行初始化有两种方式 第一种是用字符串常量直接初始化一个String对象 String s=”hello world”; 第二种用构造方法初始化字符串对象 String()构造方法:初始化一个新的...四、总结 本文主要介绍了变量交换、String类初始化、字符串的基本操作。 变量交换详解介绍了两个变量是如何交换的,通过例子理解这个用法。...String类初始化的方式有两种,一种是字符串常量直接初始化一个String对象,另一种是用构造方法初始化字符串对象。 字符串基本操作获取字符串的长度、指定的字符串中第一次出现的位置等。

    40950

    Java中类的初始化过程:(静态成员变量,静态代码块,普通成员变量,代码块初始化顺序)

    初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 3.其次,...初始化父类的普通成员变量和代码块,在执行父类的构造方法; 4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 类的加载顺序: 父类静态成员变量、静态块>子类静态成员变量、 静态块>...父类普通成员变量、非静态块>父类构造函数>子类 普通成员变量、非静态块>子类构造函数 静态代码块:随着类的加载而执行,而且只执行一次 非静态代码块:每创建一个对象,就执行一次非静态代码块 关于各个成员简介

    50430

    java类初始化顺序

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

    85710

    Java中变量的初始化顺序

    Java中变量的初始化顺序 在写一个通用的报警模块时,遇到一个有意思的问题,在调用静态方法时,发现静态方法内部对静态变量引用时,居然抛出了npe,仿佛是因为这个静态变量的初始化在静态方法被调用时,还没有触发...初始化顺序 类的初始化顺序 静态变量, 静态代码快 -》 实例变量(属性,实例代码块,构造方法) 继承关系初始化顺序 父类静态成员,静态代码块 -》 子类静态成员,静态代码块 -》 父类实例变量(属性,...静态变量初始化顺序 类初始化时,会优先初始化静态成员,那么一个类中有多个静态成员时,如何处理的? 下面是一个使用静态成员,静态代码块,静态方法的测试类,那么下面的输出应该是怎样的呢?...也就是说,初始化异常之后的代码将不会在继续执行 那么第二个问题来了,前面说到哪个问题是什么情况 最开始说到,在调用类的静态方法时,发现本该被初始化的静态成员,依然是null,从上面的分析来说,唯一的可能就是在成员变量初始化的过程中...初始化顺序 类的初始化顺序 静态变量, 静态代码快 -》 实例变量(属性,实例代码块,构造方法) 继承关系初始化顺序 父类静态成员,静态代码块 -》 子类静态成员,静态代码块 -》 父类实例变量(属性,

    1.2K10

    Java类初始化顺序 转

    初始化顺序 对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是: (静态变量、静态初始化块)>(变量、初始化块)>构造器。...-静态变量 父类--静态初始化块 子类--静态变量 子类--静态初始化块 子类main方法 父类--变量 父类--初始化块 父类--构造器 i=9, j=0 子类--变量 子类--初始化块 子类--构造器...i=9,j=20 子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了。...静态变量、静态初始化块,变量、初始化块初始化了顺序取决于它们在类中出现的先后顺序。...,并初始化父类静态成员变量 执行子类的静态代码块,并初始化子类静态成员变量 执行父类的构造代码块,执行父类的构造函数,并初始化父类普通成员变量 执行子类的构造代码块, 执行子类的构造函数,并初始化子类普通成员变量

    62230

    全面了解 Java 原子变量类

    一、原子变量类简介 为何需要原子变量类 保证线程安全是 Java 并发编程必须要解决的重要问题。Java 从原子性、可见性、有序性这三大特性入手,确保多线程的数据一致性。...为了兼顾原子性以及锁带来的性能问题,Java 引入了 CAS (主要体现在 Unsafe 类)来实现非阻塞同步(也叫乐观锁)。并基于 CAS ,提供了一套原子工具类。...原子变量类的作用 原子变量类 比锁的粒度更细,更轻量级,并且对于在多处理器系统上实现高性能的并发代码来说是非常关键的。原子变量将发生竞争的范围缩小到单个变量上。...原子变量类相当于一种泛化的 volatile 变量,能够支持原子的、有条件的读/改/写操作。 原子类在内部使用 CAS 指令(基于硬件的支持)来实现同步。这些指令通常比锁更快。...如果想了解更多细节,不妨参考:Java 并发核心机制 二、基本类型 这一类型的原子类是针对 Java 基本类型进行操作。

    83510

    Java类的初始化和清理

    在 Java 中,类的设计者通过构造器保证每个对象的初始化。如果一个类有构造器,那么 Java 会在用户使用对象之前(即对象刚创建完成)自动调用对象的构造器方法,从而保证初始化。...7 成员初始化 Java 尽量保证所有变量在使用前都能得到恰当的初始化。...所以这样至少不会出现"未初始化变量"的风险了。 在类里定义一个对象引用时,如果不将其初始化,那么引用就会被赋值为 null。 指定初始化 怎么给一个变量赋初值呢?..., 初始化的顺序 在类中变量定义的顺序决定了它们初始化的顺序。即使变量定义散布在方法定义之间,它们仍会在任何方法(包括构造器)被调用之前得到初始化。...非静态实例初始化 Java 提供了被称为实例初始化的类似语法,用来初始化每个对象的非静态变量,例如: // housekeeping/Mugs.java // Instance initialization

    92820

    Java 中类的初始化过程

    在Java 虚拟机原理这本书中介绍了类会被初始化的 5 种情况 。...2 对类进行反射调用时 。 3 当其父类没有被初始化时,要初始化父类 。 4 当虚拟机启动时,用户需要指定一个包含 main 方法的类,虚拟机会优先初始化这个类。...关于类中结构的加载顺序 ,首次创建对象时 ,类中的静态方法 / 静态字段首次被访问时 ,Java 解释器必须先查找类路径 ,以定位.class 文件;然后载入 .class (这将创建一个 Class...这里触发了另一个名为 “ [Lcom.sun.jojo.noinitclass.SuperClass ” 的类的初始化 ,他是虚拟机自动创建的直接继承于 java.lang.Object 的子类 ,创建动作由字节码指令...C 常量在编译期间就会调入类的常量池中 ,所以直接引用变量的类并没有被初始化 。( 左右拖动屏幕查看代码 ) ?

    67220
    领券