1.final的含义:
代表最后的、最终的,用final表示的变量我们称之为常量
2.final的应用情况:
(1)对于final修饰的类不能被继承
(2)对于final修饰的方法不能被覆盖、重写
(3)final修饰的变量在初始化之后就不能再修改【Java中的常量一般用大写字母表示,多个单词之间用下换线隔开】
3.final的使用规范:
(1)final 不能用来修饰构造器
(2)对于非静态的常量初始化有三种方法:
在定义的时候直接初始化
利用普通代码块来初始化
利用构造方法来完成初始化
☀️ 利用代码来说明:
public class Final_ {
public static void main(String[] args) {
Circle1 c1 = new Circle1();
System.out.println(c1.calculate(2));
Circle2 c2 = new Circle2();
System.out.println(c2.calculate(2));
Circle3 c3 = new Circle3();
System.out.println(c3.calculate(2));
}
}
class Circle1{
private final double PI = 3.14;
public double calculate(int r){
return PI * r * r;
}
}
class Circle2{
private final double PI;
{
PI = 3.14;
}
public double calculate(int r){
return PI * r * r;
}
}
class Circle3{
private final double PI;
public Circle3(){
PI = 3.14;
}
public double calculate(int r){
return PI * r * r;
}
}
(3)对于静态常量初始化有两种方法:
可以在定义静态常量的时候直接赋值
也可以通过静态代码块来对静态常量初始化
⭐️ 利用代码来说明:
class Circle4(){
private static final double PI = 3.14;
public static double calculate(int r){
return PI * r * r;
}
}
class Circle5{
private static final double PI;
static{
PI = 3.14;
}
public static double calculate(int r){
return PI * r * r;
}
}
因为是静态的方法,所以不需要创建对象,可以直接通过类名来调用
//在主方法中使用下列语句就可以完成圆面积的计算
System.out.println(Circle4.calculate(2));
System.out.println(Circle5.calculate(2));
4.将static与final配合使用有时候可以提高效率
private static int num = 100;
static {
System.out.println("静态代码块被调用!");
}
如果通过类名调用该静态变量时,会加载类信息,进而就导致静态代码块自动执行,那么有什么优化这种情况的办法呢?
private static final int num = 100;
static {
System.out.println("静态代码块被调用!");
}
添加上final之后就变为了常量,此时通过类名调用该常量就不会导致类信息被加载了。
5.对于所有的包装类(Integer、Double、Float、Boolean等)和 String类都是由final修饰的。