博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jvm(54),虚拟机类加载机制----类加载的过程----准备
阅读量:7201 次
发布时间:2019-06-29

本文共 1586 字,大约阅读时间需要 5 分钟。

准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。这个阶段中有两个容易产生混淆的概念需要强调一下,首先,这时候进行内存分配的仅包括类变量(被static修饰的变量)而不包括实例变量实例变量将会在对象实例化时随着对象一起分配在Java堆中。其次,这里所说的初始值"通常情况"下是数据类型的零值,假设一个类变量的定义为:

public static int value=123;

那变量value在准备阶段过后的初始值为0而不是123,因为这时候尚未开始执行任何Java方法,而把value赋值为123的putstatic指令是程序被编译后,存放于类构造器<clinit>()方法之中,所以把value赋值为123的动作将在初始化阶段才会执行。表7-1列出了Java中所有基本数据类型的零值。

上面提到,在"通常情况"下初始值是零值,那相对的会有一些"特殊情况":如果类字段的字段属性表中存在ConstantValue属性,那在准备阶段变量value就会被初始化为

ConstantValue属性所指定的值,假设上面类变量value的定义变为: public static final int value=123;编译时Javac将会为value生成ConstantValue属性,在准备阶段虚拟机就会根据

ConstantValue的设置将value赋值为123。

也就是被final修饰的类。

补充:类变量和实例变量的区别

实例变量实例变量声明在一个类中,但在方法、构造方法和语句块之外;

当一个对象被实例化之后,每个实例变量的值就跟着确定;

实例变量在对象创建的时候创建,在对象被销毁的时候销毁;

实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;

实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;

实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;

实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:

ObejectReference.VariableName。

类变量(静态变量)类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。

无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。

静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。

静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。静态变量在程序开始时创建,在程序结束时销毁。

与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。

默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。

静态变量可以通过:ClassName.VariableName的方式访问。

类变量被声明为public static final类型时,类变量名称必须使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击

转载地址:http://pfzum.baihongyu.com/

你可能感兴趣的文章
hdu4790 Just Random (数学?)
查看>>
LeftoverDataException,依赖包,apache license 2.0
查看>>
Unity-Animator深入系列---Foot IK
查看>>
Thymleaf 从某处(不包含某处)开始截取字符串到末尾
查看>>
Mongodb字段自增长
查看>>
工欲善其事,必先利其器 之 VS2013全攻略(安装,技巧,快捷键,插件)!
查看>>
(转) vue-router 2.0 常用基础知识点之router.push()
查看>>
leetcode------Min Stack
查看>>
VC获得本机网络连接状态
查看>>
linux并发控制之总章
查看>>
JSP学习-09-自定义标签
查看>>
【054】◀▶ JavaScript 语法参考
查看>>
程序员面试心得总结
查看>>
HDFS追本溯源:体系架构详解
查看>>
linux 下同步异步,堵塞非堵塞的一些想法
查看>>
as3 mask
查看>>
PHP汉字验证码
查看>>
织梦整站迁移换空间该如何操作?
查看>>
提示“本地连接没有有效的ip配置-未修复“窗口
查看>>
TTS备份实验
查看>>