【JVM】Java变量的种类(提高版)
· Java变量按数据类型分,有:①基本数据类型;②引用数据类型;
· Java变量按声明位置分,有:①成员变量;②局部变量;
见下图:
一、按数据类型分
1.1、基本数据类型
8种基本数据类型是Java语言内嵌的,这个最熟悉不过了,必须张口就来。主要区分一下各个数据类型的表示范围:
类型 | 长度 | 表示范围 |
byte | 1字节 | [-27 , 27-1] |
short | 2字节 | [-215 , 215-1] |
int | 4字节 | [-231 , 231-1] |
long | 8字节 | [-263 , 263-1] |
float | 4字节 | [1.4E-45~3.4E+38 , -3.4E+38~-1.4E-45] |
double | 8字节 | [4.9E-324~1.7E+308 , -1.7E+308~-4.9E-324] |
char | 2 字节 | ISO 单一字符集 |
boolean | 1 字节 | true 或 false |
之所以叫基本数据类型,是因为以上8个类型在JVM中都是以数值直接存储在内存中的。其中,char
类型以‘uxxxx’存储,Boolean
以‘0’或‘非0’存储。
1.2、引用数据类型
引用数据类型,在内存中保存的时内存地址而不是具体的值。一般地,引用存放在JVM栈(Java Virtual Machine Stack)中,而引用所指的对象是保存在JVM堆(Java Virtual Machine Heap)中的。当引用类型变量不被使用时,Java内部的垃圾回收器GC会自动回收。
二、按在类中声明位置分
【注】Java中没有全局变量。全局变量是C++中概念。
2.1、成员变量
成员变量,在使用前,会经过默认初始化赋值。
· 静态变量/类变量:
静态变量也就是被关键字static
修饰的变量,被static
修饰之后,该变量自然提升为类所属的变量,也叫做类变量。
对于此变量,在class文件被类加载器加载之后,首先在链接阶段会为静态变量赋默认值,如果静态变量的类型是8个基本数据类型,默认值为0(Boolean中0即false),如果是引用数据类型,会赋值默认值为null。
而在初始化阶段,如果静态变量有显式赋值的话,才会为静态变量显式赋值。
· 实例变量:
实例变量是依附与实例化对象的成员变量,随着对象的创建,会在JVM堆空间分配实例变量的空间,并且默认赋值。
2.2、局部变量
局部变量,是类中方法里面定义的变量。在JVM栈中,一个栈帧(Stack Frame)
对应一个类的方法,而栈帧中通过局部变量表来保存局部变量,要求局部变量必须初始化。所以,如果需要使用此局部变量,必须显式赋值后,才可使用。
2.3、详见代码示例
/** * @program: zcJava * @author: cqHuang * @create: 2021-07-21 22:50 **/ public class TestVar { private static int num;//成员变量 -- 基本数据型 静态变量 private static int num_1;//成员变量 -- 基本数据型 静态变量 private static String type;//成员变量 -- 引用型 静态变量 private String name;//成员变量 -- 实例变量 static { num = 2; // 这里 显式赋值了。 } public void method(){ int age = 1 ;//局部变量 System.out.println(age);//age不显示赋值,编译会报错 } public static void main(String[] args) { //静态变量,在链接阶段默认赋值 0或null //在默认赋值之后,如果变量还被显式赋值,那么在初始化阶段进行显示赋值 System.out.println(TestVar.num);// 2 System.out.println(TestVar.num_1);// 0 System.out.println(TestVar.type);// null //实例变量,在对象创建时分配空间、默认赋值 TestVar t = new TestVar(); System.out.println(t.name);// null } }
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的