java变量
1.参考
2.什么是变量
变量就是指代在内存中开辟的存储空间,用于存放运算过程中需要用到的数据。
变量的声明:用特定的语法声明一个变量,让运行环境为其分配空间。
变量的命名:变量需要有个见名知意的名字。而且符合java语言规范。
变量的初始化:变量声明后,要为其赋一个确定的初值后再使用。
变量的访问:可以对变量中的数据进行存取、操作,但必须和其类型匹配。3.变量的简单定义:
通俗来说,变量就是可以被改变的数据。
在程序中声明变量的语法格式如下: 数据类型 变量名称= 值
例如:int x= 1,数据类型定义这个变量是什么类型的(有整型,浮点型等),变量名称只是个别名,值就是对应的数据。
4.变量的深入定义:
由上面可知,变量就是一个可改变的数据,既然是数据,在计算机中肯定有对应的存储空间来存储这个数据。也就是说,变量其实就是内存中的一个存储空间,用来存储数据。那这么说,声明一个变量,也就是相当于变量空间的开辟,那么,变量的深入定义还对应上面简单定义哪些呢?
(1).声明一个变量=变量空间的开辟
(2).变量的数据类型=这个空间要存储什么数据?
(3).变量名称=这个空间叫什么名字?
(4).变量的值=这个空间的第一次数据是什么?那么, 这些变量空间究竟在哪里呢?其实这些变量空间对应计算机内存的堆栈,下面会详细讲解。
5.变量的分类
(1).按声明的位置来分类:
a.成员变量:声明在方法之外的变量,不过没有 static 修饰。可以不设值,因为有默认值(下面数据类型会有默认值)。
b.局部变量:声明在类的方法中的变量。必须对其初始化,否则编译不过。
c.类变量:声明在方法之外的变量,用 static 修饰。
(2).按数据类型划分(也就是定义数据是什么类型)
a.基本数据类型:
byte:在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0
short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0
int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0
long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L
float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0
double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0
char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空
boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false
注意:整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级:byte,short,char—> int —> long—> float —> double
(1).强制类型转换: 转换过程中可能导致溢出或损失精度
(2).自动类型转换:必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float 数据类型的位数为32,可以自动转换为64位的double类型。
(3).float和double区别:默认的浮点数都是double 只有在数组后边加上f才是 float的,float f=12.2f;这是定义一个float类型的数据
b.引用数据类型:
除了8中基本类型以外剩下的都是引用类型(类,接口,数组等,后面详细介绍,new的是引用类型)
String:一定要注意,string是引用类型,不是基本类型。
c. 基本类型和引用类型有啥区别,引用类型就存在变量内存结构。(3).基本类型和引用类型的区别以及两者在内存的存储位置
A.java内存结构:JVM分了5片内存:
1.程序计数器:记录程序执行到哪一个指令
2.本地方法栈:与虚拟机栈功能相似,不过虚拟机栈为java方法服务,本地方法栈为Native方法服务
3.方法区:存放字节码,常量 ,静态变量,是一个共享的区域
4.虚拟机栈:执行方法其实就是栈帧入栈,出栈的过程,因为是跟方法有关的,而且局部变量常常在方法中,所以栈存储的是局部变量
5.堆:存放引用类型,成员变量
注意:(1).我们接触最多的是堆和栈(虚拟机栈),这里一定要注意这两个的区别。
(2).栈主要是存储方法帧的,每执行一个方法的时候,就会为该方法创建一个栈帧,使其入栈。然而局部变量一般随着方法生成而存在,所以局部变量存储在栈中。
(3).堆一般用来存放引用型对象,以及对应的成员变量,当对象创建时,会在堆中开辟一块地址,并给这个对象的成员变量使用。B.基本类型
基本类型也分成员变量和局部变量,局部变量随着方法入栈就存在栈中,而成员变量会随着对象在堆中空间的开辟而存储在堆中。
例如: int[] a=new int[]{1,2}; 由于new了一个对象,所以new int[]{1,2}这个对象时存储在堆中的,也就是说1,2这两个基本数据类型是存储在堆中。
C.引用类型
引用类型占用两块内存,一个栈,一个堆, 栈中存放的是堆中的地址。
举个简单例子,一间房子,我可以在里面 放置家具,放完后用钥匙锁着,把钥匙放在抽屉里面,那我想找某个家具是不是通过钥匙来找到房间再进去找家具。我们可以对应一下,房间就是内存堆开辟的空间,家具就是数 据,钥匙就相当于引用类型(堆中的地址),抽屉相当于栈,具体的数据放在堆上,引用类型放在栈上。
例如:String s=new String(“hello world”),new出来的hello world是存放在堆中,并且将这个堆地址给栈中s来保存。
D.变量的作用域:
a.从定义上说,变量作用域到大括号结束,出了大括号就不存在了
b.从内存上解释,一个类中什么时候有大括号的存在?
一个是类两端有大括号,
例如:public class Person{},类两端里面是全局变量,执行到大括号也就是类被释放了,对应的全局变量也没了。
另一个是类里面的方法有大括号,
例如:public void a(){},类里面的方法,执行完这个函数就相当于出栈,那么局部变量也随着函数的结束而销毁,大括号等同于这个类或方法已经执行完了,也就是说作用域只在大括号内,出了大括号就意味着函数结束,也就是出栈了,变量作用域就无效了。
6.总结
1.引用型基本上都是new出来的,string特别点,引用型new出来的内容放在堆上,地址存放在栈上。
2.基本类型也分成员变量和局部变量,局部变量随着方法入栈就存在栈中,而成员变量会随着对象在堆中空间的开辟而存储在堆中。
3.局部变量是存储在栈中,成员变量是存放在堆中(因为随着类的创建生成,类创建是在堆上)。
文章标题:java变量
发布时间:2019-12-24, 15:12:36
最后更新:2019-12-24, 15:12:36