尚学堂学习笔记
变量本质上就是代表一个”可操作的存储空间”
不提倡这种"一行声明多个变量"风格,逐一声明每一个变量可以提高程序可读性。
局部变量 | 方法或语句块内部 | 方法/语句块 | 从声明位置开始,直到方法或语句块执行完毕,局部变量消失 |
成员变量 (实例变量) | 类内部,方法外部 | 对象 | 对象创建,成员变量也跟着创建。对象消失,成员变量也跟着消失; |
静态变量 (类变量) | 类内部,static修饰 | 类 | 类被加载,静态变量就有效;类被卸载,静态变量消失。 |
· 成员变量(也叫实例变量 member variable)
方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。
表2-3实例变量的默认初始值 | |
数据类型 | 实始值 |
int | 0 |
double | 0.0 |
char | ‘\u0000’ |
boolean | false |
· 静态变量(类变量 static variable)
使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。 如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值
final修饰叫符号常量,关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。
变量和常量命名规范(规范是程序员的基本准则,不规范会直接损害你的个人形象):
数据类型
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则: monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则: Man, GoodMan
- 方法名:首字母小写和驼峰原则: run(), runRun()
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如图2-6所示,黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
表2-4整型数据类型 | ||
类型 | 占用存储空间 | 表数范围 |
byte | 1字节 | -27 ~ 27-1(-128~127) |
short | 2字节 | -215 ~ 215-1(-32768~32767) |
int | 4字节 | -231 ~ 231-1 (-2147483648~2147483647)约21亿 |
long | 8字节 | -263 ~ 263-1
|
表2-4整型数据类型 | ||
类型 | 占用存储空间 | 表数范围 |
byte | 1字节 | -27 ~ 27-1(-128~127) |
short | 2字节 | -215 ~ 215-1(-32768~32767) |
int | 4字节 | -231 ~ 231-1 (-2147483648~2147483647)约21亿 |
long | 8字节 | -263 ~ 263-1
|
布尔类型不能进行数据转换
byte/short/char运算时会先提升为int类型eg:byte+byte结果会等于int
byte/short/char初始化时没有超过范围时,编译器会补上强转
float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或者d, 以明确其为double类型。
Java浮点类型常量有两种表示形式
由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。 浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。二进制浮点数不能精确的表示0.1、0.01、0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。 如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
- 十进制数形式,例如:3.14 314.0 0.314
- 科学记数法形式,如314e2 314E2 314E-2
- 浮点类型float,double的数据不适合在不容许舍入误差的金融计算领域。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal bd = BigDecimal.valueOf(1.0);
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd);//0.5
System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1);//0.5000000000000001
}
}
final关键字的作用:
1. 修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。
final int MAX_SPEED = 120;
2. 修饰方法:该方法不可被子类重写。但是可以被重载!
final void study(){}
3. 修饰类: 修饰的类不能被继承。比如:Math、String等。