目录
1、常量
2、Final关键字与static关键字同时使用
3、变量
4、Java 变量之变量数据类型
(1)基本数据类型(又名内置类型)
1)整形(全为有符号类型)
2)浮点型
3)字符型
4)布尔型
(2)引用数据类型
5、数据类型转换
(1)自动类型转换
(2)强制类型转换
6、变量作用域
(1)类变量
(2)局部变量
(3)方法参数变量
(4)异常处理参数变量
1、常量
定义:在程序运行期间,固定不变的量;
常见分类:
(1)字符串常量:用双引号引起来的部分
例子:“Abc”、“HelloWorld”、“12345”
(2)整数常量:没有小数点的数字
例子:0、12、345、-678
(3)浮点数常量:带小数点的数字
例子:1.2、3.45
(4)字符常量:用单引号引起来的单个字符
例子:‘a’、‘B’、‘1’、‘单’
(5)布尔常量:只有两个取值
例子:true、false
(6)空常量:没有任何数据
例子:null
基本注意事项:
(1)主要使用final关键字来定义常量;
(2)常量被设定后,一般情况下就不允许再进行更改;
(3)必须要在常量声明时对其进行初始化;
(4)当在常量定义的时候初始化过后,在应用程序中就无法再次对这个常量进行赋值;
(5)final关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰对象的引用或者方法;
(6)一个数组对象被final关键字设置为常量数组之后,它只能够恒定的指向一个数组对象,无法将其改变指向另外一个对象,也无法更改数组内容;
(7)常量有一定的命名规则,具体规则参照开发手册或公司规范;
(8)两个单引号中间必须有且仅有一个字符,没有不行,有两个也不行;
(9)空常量不能直接用来打印输出;
2、Final关键字与static关键字同时使用
(1)Java中一段程序代码从编辑到最后执行,需要经过两个过程:代码的装载->对象的建立;
(2)一个被定义为final的对象引用或者常量只能够指向唯一的一个对象,不可以将他再指向其他对象;
(3)为了做到一个常量在一个应用程序内真的不被更改,就需要将常量声明为staitc final的常量;
(4)为了确保在所有情况下(即创建多个对象情况下)应用程序还能够得到一个相同值的常量,在代码装载的时候就初始化常量的值。然后在后续创建对象的时候,只引用这个常量对象的地址,而不对其再进行再次初始化;
(5)不同的关键字会改变变量的作用范围,为此程序开发人员需要了解自己的需求,然后选择贴合需求的关键字;
3、变量
定义:在程序运行期间内容可以发生改变的量;
创建格式:数据类型 变量名称 = 数据值;
注意事项:
(1)用long 和 float创建变量时要加后缀L和F;
4、Java 变量之变量数据类型
(1)基本数据类型(又名内置类型)
特点:可以直接在栈分配内存;
Java保留基本数据类型的原因:提升性能;
巧记:四大类八小种;
1)整形(全为有符号类型)
a)byte
大小:1字节(8bit);
高位:符号位(其余7位为数据位);
范围:1111,1111~0111,1111(-128~127);
注意事项:byte类型虽然在语义(逻辑)上是占用1字节,但实际上,JVM中是将其当做int看待的,实际上占用了32位,4字节的,运算效率等同于int;
初始化默认值:0
b)short
大小:2字节(16bit);
高位:符号位(其余15位为数据位);
范围:-2的15次方~2的15次方-1(-32768~32767);
注意事项:byte类型虽然在语义(逻辑)上是占用1字节,但实际上,JVM中是将其当做int看待的,实际上占用了32位,4字节的,运算效率等同于int;
初始化默认值:0
c)int
大小:4字节(32bit);
高位:符号位
范围:-2的31次方~2的31次方-1(-4294967296~4294967295);
注意事项:Java默认的整型类型;
初始化默认值:0
d)long
大小:8字节(64bit);
高位:符号位
范围:-2的63次方~2的63次方-1(-4294967296~4294967295);
注意事项:参考:Java 数据类型转化;
初始化默认值:0L
2)浮点型
a)float
大小:4字节(32bit);
精度:单精度;
范围:(-2^128)~(-2^(-23-126))-(0)-(2^-149)~2^128(1.4013E-45~3.4028E+38);
注意事项:通俗来说就是小数,但是,这是有精度要求的,即在这区间float可不是能表达任意小数的,而是在一定精度下才行;参考:Java中float/double取值范围与精度;
初始化默认值:0.0f
b)double
大小:8字节(64bit);
精度:双精度;
范围:-2^1024~(-2^(-1022-52))-0-(2^-1074)~2^1024(4.9E-324~1.7977E+308);
注意事项:Java默认的浮点类型,即若后面不加f/F,默认是double类型;
初始化默认值:0.0d
3)字符型
a)char
大小:2字节(16bit);
表示:一个字符(可以是汉字),字符集(charset)采用UCS-2,编码(encoding)采用UTF-16;
范围:(-2^128)~(-2^(-23-126))-(0)-(2^-149)~2^128(0-65535);
注意事项:一个16位的无符号整型;随着发展,char所能代表的字符个数(UCS-2字符集)被限定死了,所以并不推荐使用;
初始化默认值: '/uoooo'(null)
4)布尔型
a)boolean
大小:逻辑上:1bit;(实际上,boolean并没有具体规定,完全是看各个JVM实现)
取值:true或者false;
初始化默认值:false;
注意事项:
(1)字符串隶属于引用类型,而非基本数据类型;
(2)浮点型可能只是一个近似值,并非精确;
(3)数据范围与字节数不一定相关。例如:float数据范围比long更加广泛,但是float是4字节,long是8字节;
(4)浮点数当中默认类型是double。如果一定要使用float类型,需要加上一个后缀F;如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L;
(2)引用数据类型
也称对象变量类型,复合数据类型,包含类、接口、数组(除了基本类型外,就是引用类型)。
Java的引用不支持对内存直接操作,而指针则可以,所以,Java用起来更安全,但不够灵活,而指针,自由度大;(可以理解为受限制的指针)
在Java中,任何对象都需要通过引用才能访问到,没有引用指向的对象被视为垃圾对象,将会被回收。参考:Java中的引用;
5、数据类型转换
定义:当左右数据类型不一样时,将会发生数据类型转换;
分类:自动类型转换(隐式)+ 强制类型转换(显式);
(1)自动类型转换
特点:代码自动完成;
规则:数据范围从小到大;
(2)强制类型转换
特点:需要对代码进行特殊处理;
规则:范围小的数据范围+变量名 = 原本大范围内的数据;
风险:可能会发生精度损失和数据溢出;
精度损失:数据转换后一部分数据被舍去;
数据溢出:大范围数据类型转换为小范围数据类型,装不下;
注意事项:
(1)byte/short/char这三种类型都可以发生数学运算;
(2)byte/short/char这三种类型在运算的时候,都会被首先提升为int类型,然后在计算;
(3)boolean类型不能发生数据类型转换;
6、变量作用域
定义:规定了变量能够使用的范围;
决定条件:变量的声明地点;
分类:类变量、局部变量、方法参数变量、异常处理参数变量;
(1)类变量
声明地点:类中;
作用域:整个类;
注意事项:若初始化时没有赋值,则为系统默认初始化的值;
(2)局部变量
声明地点:方法或者方法代码块中;
作用域:其所在的代码块;
(3)方法参数变量
声明地点:具体方法中;
作用域:对应的方法;
(4)异常处理参数变量
声明地点:具体异常处理块中;
作用域:对应的异常处理块;