java 数据类型和变量在jvm中的存储

java中最常见的就是数据类型和变量了,所有的一切都是基于这两个产生的,所以这两个东西是十分基础页是十分重要的,今天就具体的消化一下数据类型和变量的存储

数据类型

基础数据类型

1.Java基本类型共有八种:char、boolean、byte、short、int、long、float、double

而基本类型可以分为三类:

字符类型:char

布尔类型:boolean

数值类型:

  • 整数类型:byte、short、int、long
  • 浮点数类型:float、double

JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。

2.基本数据类型的区别与使用范围

基本类型 含义 最小值 最大值 默认值 使用范围
byte 8位、有符号的、以二进制补码表示的整数 -128(-2^7) 127(2^7-1) 0 在大型数组中节约空间,为int的四分之一
short 16 位、有符号的、以二进制补码表示的整数 -2^15 2^15-1 0 可以像 byte 那样节省空间,为int的二分之一
int 32位、有符号的、以二进制补码表示的整数 -2^31 2^31 - 1 0 一般地整型变量默认为 int 类型
long  64 位、有符号的、以二进制补码表示的整数 -2^63 2^63 -1 0L 使用在需要比较大整数的系统上
float 单精度、32位、符合IEEE 754标准的浮点数 2的-149次方 2的128次方-1 0.0f 在储存大型浮点数组的时候可节省内存空间
double 双精度、64 位、符合IEEE 754标准的浮点数 2的-1074次方 2的1024次方-1 0.0d 浮点数的默认类型为double类型
boolean 只有两个取值:true 和 false false 只作为一种标志来记录 true/false 情况
char 一个单一的 16 位 Unicode 字符

\u0000

(即为0)

\uffff

(即为2^16-1)

可以储存任何字符

上表中的float和double的最大值和最小值没有符号位,即可以当做正数的时候的最大最小值,而负数的时候最大最小值在最前面添加符号后相反即是。

变量在jvm中的存储

变量和常量

说起变量,不得不提到常量,说直白一点

变量是可以改变的量,如int size=0;

常量是不可以改变的量,如 final int SIZE=0;

看出来区别了吗?常量即是在最前方加了一个final。

标识符

这里再提一下上述例子的“size”是什么东西——标识符

标识符最常见的就是一个字母,一个单词,或者一个拼音

比如 int i=0 中的i就是标识符,int a 中的a也是标识符

百度的标识符的定义:标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。

标识符的使用合法标准:

1.类和接口名

每个字的首字母大写,含有大小写。例如,MyClass,HelloWorld,Time等。

2.方法名

首字符小写,其余的首字母大写,含大小写。尽量少用下划线。例如,myName,setTime等。这种命名方法叫做驼峰式命名。

3.常量名

基本数据类型的常量名使用全部大写字母,单词与单词之间用下划线分隔。对象常量可大小混写。例如,SIZE_NAME。

4.变量名 首字符小写,单词间分隔符用字母的首字母大写。不用下划线,少用美元符号。给变量命名是尽量做到见名知义。列如:int moneySize;(表示钱的大小范围)

这里主要看常量和变量的命名方式~

按照上面的标识符命名方式是绝对正确的,在公司也是可以直接上手的,

而标识符的误区就是一定不能写系统关键字

abstract default if private this
boolean do implements protected throw
break double import public throws
byte else instanceof return transient
case extends int short try
catch final interface static void
char finally long stricftp volatile
class float native super while
const for new switch  
continue goto package synchronized  

萌新一看~哇~这么多不能写的关键字啊,不小心把标识符写成这个了怎么办?

不要紧,这些东西刚开始看起来就是一堆难懂的单词,但逐渐学习的过程中就会慢慢记住这些关键字,根本不用担心会错写成关键字噢,这里列出来不是让你记住,而是看一哈而已。

往对了写就不会错嘛!

变量在jvm中的存储

讲了这么多别的,主要是为了萌新,这篇文章的意愿是想让小白也能看的懂,能讲到的分支我都会一一去讲,缺点是没有突出重点

1.什么是jvm?为什么变量在jvm中存储?是如何存储的?

什么是jvm?

JVM是Java Virtual Machine(Java虚拟机)的缩写,它是由软件技术模拟出计算机运行的一个虚拟的计算机。

java代码(通过javac.exe编译)→.class文件(通过java.exe运行)→jvm开始执行操作

我们知道,java程序写好后通过javac.exe编译成.class文件,.class文件才是jvm能够识别的语言。

而jvm通过识别你的操作系统匹配出适合你操作系统的虚拟机,执行.class文件,这就是java能够跨平台运行的原因。

说白了,java之所以可以无视平台运行,就是因为jvm这个利器!

为什么变量在jvm中存储?

下图为jvm的执行图

我们可以看到,class文件通过类加载子系统(类加载器),把你的程序分为五个区域存在内存中。

java栈:这里存放的是“对象的引用”、“基本数据类型的数据”

  • 对象的引用:也就是程序中new出来的那个对象的名字,比如我有个Student类,Student stu=new Student();,这个stu是我创建的对象名,将它放在java栈中,而stu所拥有的属性和方法放在java堆内,而对象的引用的意思就是把这个stu所对应的java堆中的属性和方法对应到java栈的stu对象名,如下图:
  • 基本数据类型的数据:char、boolean、byte、short、int、long、float、double这八大基本数据类型都直接存放在java栈内,因为他们不是类的对象,如下图:

java堆:这里存放的是“对象的属性和方法”,仍然是对象的引用那张图,堆跟栈的关系密不可分。

发布了13 篇原创文章 · 获赞 14 · 访问量 993

猜你喜欢

转载自blog.csdn.net/qq_42495847/article/details/101077831