在Java中final被称为是“终结器”。为什么叫“终结器”呢?我们通过下文final的性质及用法就能了解它取这个外号的原因。
一、修饰类、方法,属性
1.final可以修饰类、方法、属性 。
(1)使用final定义的方法不能被子类所覆写
2.final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误
(1)使用final定义的变量就成为了常量,常量必须在声明时赋值,并且不能够被修改
(2)使用final修饰的变量不能再次赋值 定义常量(public static final ),常量全用大写字母,多个单词间以_分隔。
3.使用final定义的类不能有子类(String类便是使用final定义) final一旦修饰一个类之后,该类的所有方法默认都会加上final修饰。(不包含成员变量)
二、数据类型转换
当使用 +、-、*、/、%、运算操作时,遵循如下规则: 只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型,如果两个操作数中有一个是float类型的,另一个将会被转换为float类型,并且结果也是float类型,如果两个操作 数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型,否则(操作数为:byte、 short、int 、char),两个数都会被转换成int类型,并且结果也是int类型。但是final修饰的域类型不会发生变化.
public class Text
{
byte b1 = 1,b2 = 2;
byte b3,b6,b8;
final byte b4 = 4,b5 = 5, b7 = 9;
void text()
{
b3 = b1 + b2;
b6 = b4 +b5;
b8 = b1 + b4;
b7 = b2 + b5;
System.out.println(b3 + b6 + b7 + b8);
}
public static void main(String[] args)
{
Text per = new Text();
per.text();
}
}
运行结果如下
在代码b3 = b1 + b2;
b1,b2都是byte型相加会自动转换为int型,而b3为byte型此时结果就要从int转为byte,大转小,会存在精度丢失的问题,所以编译器报错,
b8,b7同理,只有b6它的俩个加数都是final修饰的byte型,类型不会发生变化。
当代码为只要求机算b6时的运行结果: