变量与常量
变量
变量是指值不变的值
变量名必须是一个以字母开头并由字母或者数字构成的序列(但在这个字母和数字的范围是比一般的广,不仅仅是一般字母,还有在某种语言中表示字母的任何Unicode字符),由以下几条规则
- 必须以字母、下划线、或者美元符号开头
- 中文也可以作为命令开头且可以通过编译
- 除开头外,后面的部分可以有字母、下划线、美元符号以及数字组成
- 也可以是中文,但前提是前面的也是中文
- 变量名不可以与关键字冲突
- 变量名大小写敏感
- 在Java9中,单下划线不能作为变量名
常量
关键字final修饰一个常量,表示这个值只会被赋值一次,一旦被赋值了,就不能被更改了,常量名建议使用全大写
类常量
因为常量是必须要赋值的,所以在类中不可以只是单纯定义
第一种方式,使用构造方法进行赋值(使用Setter方法不能给常量赋值,因为可能仍然会产生常量没有赋值的情况)
第二种方式,就是直接给常量赋值
第二种方式,还可以通过加上static关键字,让它可以在静态方法里面使用(因为class文件加载的时候,优先载入静态代码块,然后到构造方法,然后到其他方法)
这里要注意的一点是,const是java的保留字,但Java是没有使用的,定义常量依然使用的是final,如果在idea中使用const,会变成下面这样子
敲下回车后,会生成一个int类型的私有静态常量,而且值是随机值
枚举类型
枚举类型针对有限个命名的常量,通常用来储存常量的,但要记住,它也是一个对象,它存储的常量都是自己类型的
举个栗子
/**
* @Author: Ember
* @Date: 2021/5/13 14:06
* @Description:
*/
public enum Size {
SMALL(1),
MEDIUM(2),
BIG(3)
;
private int size;
Size(int size) {
this.size = size;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
Size的构造方法一定是private,但可以省略,但不可以为protected或者public或者缺省(虽然上面看起来是缺省,但其实是private),所以枚举类型不可以被继承(不提供对外的构造方法怎么继承?),枚举类型里面的构造方法单纯是给自己去创建枚举常量的,也不可以主动去调用new一个枚举类型,这样就限制了,该枚举类型的所有枚举对象都在枚举类里面提前定义好(所有的枚举类型都是Enum类的子类,继承了这个类的很多方法)。
可以看到无论是继承还是去new一个对象,都会报错
算术运算符
这里要注意的点不多,只不过要知道,整形除以0会报错,但浮点型可以除以0,会得到无穷大或者NAN结果(看前面的基本数据类型
数学函数与常量(Math)
在Math类中,包含了各种各样的数学函数
- Math.sqrt():求平方
- Math.pow():求幂
- 还有一些三角函数
- 指数函数和反函数(log)
- 提供了两个常量PI和E
数值类型之间的转换
数值类型之间的转换,一般来说,小字节的转换为大字节的,不需要强转(不过可能发生精度丢失)
发生精度丢失,其实就是转化成float或者double的时候会发生
//基本数据类型的优先级
byte,short,char—> int —> long—> float —> double
- 不能对boolean类型的数据进行类型转化
- 不能把对象类型转化成不相关类的对象
- 优先级大转换成小的时候(大字节转化为小字节)的时候,必须使用强制类型转化
- 转化过程可能导致溢出(强制转化导致),或者精度损失(转化成float或者double导致)
- 浮点数转化成小数是向下取整,而不是四舍五入(想要进行四舍五入使用Math.round方法)
下面是一副转化图,黑线代表合法转化,红线代表可以转化,但可能会发生精度丢失