final
final关键字在java中使用非常广泛,可以申明成员变量、方法、类、本地变量(包括形式参数)。
final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
final标记的成员变量必须在声明的同时显式赋值,然后才能使用。
final标记的类不能被继承。提高安全性,提高程序的可读性,final类中的方法默认也会是final类型的,java中的String类和Integer类都是final类型的。
final标记的方法不能被子类重写。增加安全性。
实际应用最多是用在定义常量,与static搭配进行使用。
final方法的好处:
提高了性能,JVM在常量池中会缓存final变量
final变量在多线程中并发安全,无需额外的同步开销
final方法是静态编译的,提高了调用速度
final类创建的对象是只可读的,在多线程可以安全共享
详见下列代码:
package cn.com.Classwork190122;
/*
final 标记的类,表示该类不可被继承
*/
public class FinalTest {
//一般常量的名称,所有字母都使用大写
/*
声明一个常量时,必须直接赋值。
原因 常量即永远都不会改变的量,不赋值的话就会永远是默认值 如double类型的就永远是0.0
*/
final double PI= 3.14;
public static void main(String[] args) {
/*
JAVA中只有声明变量的方式,没有声明常量的方法
变量的两种声明方式:
1.类型 变量名 = 变量值或对象 int i = 10 String s = "abc"
2.jdk11 var 变量名 = 变量值或对象 jvm能根据=右侧的数据值推算出左侧的类型
想要使用常量必须使用关键字
*/
//局部变量
final int FINALTEST = 20;
//使用final修饰的变量就是常量,其值无法修改
System.out.println(new FinalTest().add(10,20));
}
/*
形式参数也是局部变量的一种
final修饰的方法不允许子类进行重写
*/
public final int add(int x,final int y){
//y = 30;
//y = y;//不能有赋值的操作,虽然值没有发生变化
return x+y;
}
}