`
qilixiang012
  • 浏览: 204212 次
文章分类
社区版块
存档分类
最新评论

java 类加载与常量池

 
阅读更多
常量池也可以理解为编译常量。而编译常量只加载类就可以使用了,但是不执行类的初始化。

在使用成员变量的时候,要区分一下当前的类是已经加载状态还是已经初始化状态。如下面的例子:

import java.util.Random;

class FinalClassA
{
	public static final int x =6/3;
	static
	{
		System.out.println("FinalClassA static block");
	}
}
class FinalClassB
{
	public static final int x =new Random().nextInt(100);
	static
	{
		System.out.println("FinalClassB static block");
	}
}
public class Test {

	public static void main(String[] args) 
	{
		System.out.println(FinalClassA.x);
		System.out.println(FinalClassB.x);
	}
}
输出结果为:
2
FinalClassB static block
0

感谢金丝燕大学校长
分享到:
评论

相关推荐

    JVM常量池教程吐血整理干货.md

    运行时常量池是在类加载阶段,将class二进制数据加载到内存, 并将数据保存到方法区,其中class文件中的常量池将保存到 运行时常量池(数据都在方法区,常量池肯定也在方法区)。 也就是说一个Class文件常量池对应一个...

    Java常量池解析与字符串intern简介

    在Java应用程序运行时,Java虚拟机会保存一份内部的运行时常量池,它区别于class文件的常量池,是class文件常量池映射到虚拟机中的数据结构。 关于class文件常量池的部分可以参考之前的博文实例探索Class文件。  1...

    详解JAVA类加载机制(推荐)

    字节码文件格式主要分为两部分:常量池和方法字节码。 二、类加载 类的生命周期是从被加载到虚拟机内存中开始,到卸载出内存结束。过程共有七个阶段,其中到初始化之前的都是属于类加载的部分 加载—-验证—-准备—-...

    Java虚拟机规范(Java SE 7)中文版

    第4章深入分析了用来表示编译后的类和接口的class文件格式,主要包括ClassFile结构、描述符与签名、常量池、字段、方法、属性、代码约束与class文件校验等。第5章定义了Java虚拟机启动以及类和接口的加载、链接和...

    【带书签】Java虚拟机规范(Java SE 7).pdf

    第4章深入分析了用来表示编译后的类和接口的class文件格式,主要包括ClassFile结构、描述符与签名、常量池、字段、方法、属性、代码约束与class文件校验等。第5章定义了Java虚拟机启动以及类和接口的加载、链接和...

    java相关的2024面试题集锦

    生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或者设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)的时候,以及调用一个类静态方法的时候 ...

    jdk-12_osx-x64_bin.tar.gz

    符号引用以纯 nominal 形式描述可加载常量,与类加载或可访问性上下文区分开。有些类可以作为自己的符号引用(例如 String),而对于可链接常量,定义了一系列符号引用类型(ClassDesc、MethodTypeDesc、...

    java虚拟机规范 jdk8.

     深入分析用来表示编译后的类和接口的class文件格式,主要包括ClassFile文件结构、描述符、常量池、字段、方法、属性、格式检查、代码约束与class文件校验等。  定义Java虚拟机启动以及类和接口的加载、链接和初始...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 189 7.4.1 类与类加载器 / 189 7.4.2 双亲委派模型 / 191 7.4.3 破坏双亲委派模型 / 194 7.5 本章小结 / 197 第8章 虚拟机字节码执行引擎 / 198 8.1 概述 / 198 8.2 运行时栈帧结构 / 199 8.2.1 局部变量...

    java虚拟机规范(java SE7)

    第二章:java虚拟结构(运行时区域内存:寄存器,java虚拟机栈,java堆,方法去,运行时常量池,本地方法栈); 第三章:为java虚拟机编译; 第四章:Class文件格式; 第五章:加载、链接与初始化

    图解JVM的内存结构及字符串常量池方法详解.docx

    JVM包含了非常多的知识,比较核心的有 内存结构 、 类加载 、 类文件结构 、 垃圾回收 、 执行 引擎 、 性能调优 、 监控 等等这些知识,但所有的功能都是围绕着 内存结构 展开的,因为我们编译后的...

    Java进阶教程解密JVM视频教程

    学习字节码指令的的运行流程,字节码指令与常量池、方法区的关系。掌握条件分支、循环控制、异常处理、构造方法在字节码级别的实现原理,利用HSDB工具理解多态原理。还会涉及从编译期的语法糖处理,到类加载的各个...

    JVM内存模型架构图-新生代-老年代-永久代

    永久区:存储的是java的运行环境或类信息,这个区域不存在垃圾回收,关闭jvm就会释放内存 一个启动类加载大量的jar包。tomcat部署太多应用。内存满了就oom jdk1.6之前:永久代,常量池是在方法区 jdk1.7去...

    JVM性能优化相关问题-面试-进阶

    Java 类加载需要经历一下 7 个过程: 1. 加载 加载是类加载的第一个过程,在这个阶段,将完成一下三件事情: • 通过一个类的全限定名获取该类的二进制流。 • 将该二进制流中的静态存储结构转化为方法去运行时数据...

    Java类文件的基本结构

    为旅行而生  Java类文件(.class文件)是一个为已编译Java程序仔细定义的格式。...按照它们的出现次序,主要的部分有:魔法数(magic),版本号(version),常量池(constant pool),访问标示符区(ac

    Java虚拟机

    7.4.1 类与类加载器 7.4.2 双亲委派模型 7.4.3 破坏双亲委派模型 7.5 本章小结 第8章 虚拟机字节码执行引擎 8.1 概述 8.2 运行时栈帧结构 8.2.1 局部变量表 8.2.2 操作数栈 8.2.3 动态连接 8.2.4 方法...

    Java思维导图

    Java代码在进行Javac编译的时候,并不像C和C++那样有“连接”这一步骤,而是在虚拟机加载Class文件的时候...当虚拟机运行时,需要从常量池获得对应的符号引用,再在类创建时或运行时解析、翻译到具体的内存地址之中。

    Java常见面试问题整理.docx

    运行时常量池是方法区的一部分,class文件除了有类的字段、接口、方法等描述信息之外,还有常量池用于存放编译期间生成的各种字面量和符号引用。在老版jdk,方法区也被称为永久代。在1.8之后,由于永久代内存经常...

    java深入解析

    107 话题19 钩深索隐——String字符最大长度的探索 111 话题20 追本溯源——追寻String字面常量的“极限” 116 话题21 旧调重弹——再论equals方法与“==”的 区别 122 话题22 顺藤摸瓜——从字面常量到String常量池 ...

Global site tag (gtag.js) - Google Analytics