变量与常量
1. 变量的本质
变量就是可操作的的存储空间,通过变量名操纵该空间。
2. 变量的分类
类型 | 声明位置 | 从属于 | 生命周期 |
---|---|---|---|
局部变量 | 方法语句块内 | 方法语句块 | 声明—>方法语句块结束 |
成员变量(实例变量) | 类内,方法外 | 对象 | 对象创建—>对象回收 |
静态变量(类变量) | 类内,static修饰 | 类 | 类被加载—>类被卸载 |
局部变量不允许不初始化。静态变量或者成员变量具有消极默认值(0,null,false)。
3.常量
final int A=5; 通常,变量名全为大写,也为常量。
4. 命名规范
类成员变量局部变量方法名包名:首字母小写-驼峰分割 常量:全大写-下划线分割 类名:首字母大写-驼峰分割
5. 数据类型
数据类型
基本数据类型
引用数据类型
数值型
字符型
char-2byte
布尔型-boolean-1bit或1/4bit
整数类型
byte-1byte
short-2byte
int-4byte
long-8byte
浮点类型
double-8byte-精确后14位
float-4byte-精确后7位
类
接口
大小统一为4byte-记录引用对象的地址
重点知识
- 1byte=8bit
- 对于整型,表数范围为 -2(位数 -1)~2(位数-1) -1 (拿出一个符号位所以位数-1,最后-1因为还有个0)。
- 八进制数以0开头,十六进制以0x或0X开头,二进制以0b或0B开头。
- 浮点型float、double一定不能用于比较,绝对不能作为控制条件。(试想,两个数之间的小数是无限多的,所以不可能精确的表示一个小数,一定存在误差),若需要进行不产生舍入误差的精确数字比较或计算,使用BigDecimal类。
- char c1=‘中’ 是合法的,因为Java使用的是Unicode,一个Unicode占用2byte。
- Java的String类型跟c语言中的实现一样,实际是char sequence。
6. 奇怪的报错
1)为什么long a=55555555555编译错误?
两个前提: Java整型常数默认为int型 变量的本质是通过变量名操纵存储空间
long a 表示声明一个变量a,55555555555表示开辟了一个存储空间存放该整型,而Java 默认整型为int,这个数对于int来说溢出了,此时就会报错。
改为long a=55555555555L即可
2)为什么float a=3.14编译错误?
两个前提: Java浮点常数默认为double型 变量的本质是通过变量名操纵存储空间
实际3.14是double,占用8个字节,而float a只有4个字节,将8个长度空间给4个长度空间自然塞不下。
应该改为float a=3.14L
7.运算转换规则
- short、byte、int之间的 混合运算均为int
- long shortbyteint结果为long
- 有double,结果为double
- float float=float
- 并非字节少的自动转化为字节大的,如long 8byte,float 4byte,但long->float