final:最后的 最终的
final可以修饰 类 方法 属性 和局部变量
public class final1 {
}
final class A{}
class B extends A{}//会报错
class A{
public final void print1(){
System.out.println("嘀嘀嘀");
}
}
class B extends A{
public void print1(){}//报错
}
public class final1 {
final int NUM = 12;
NUM = 12;//报错
}
4.当final修饰局部变量时,此局部变量就成为了局部常量,也无法被修改
第二点非静态和静态属性常量初始化演示:
非静态常量初始化
public class final1 {
//非静态常量初始化
//1.直接定义初始化 final int NUM = 1;
final int NUM ;
//2.在普通代码块初始化
{
NUM = 1;
}
//3.在构造器初始化
public final1(int NUM) {
// this.NUM = NUM;
}
}
静态常量初始化
public class final1 {
//静态常量初始化
//1.直接定义初始化 final int NUM = 1;
final static int NUM ;
//2.在静态代码块初始化
static {
NUM = 1;
}
}
第八点代码演示:
当在main方法中使用静态属性 类名.静态属性名。这样会导致类加载,而在有些时候,我们不希望类加载,只是单纯的使用一下这个属性。此时就可以使用final和static搭配修饰这个属性
public class final1 {
public static void main(String[] args) {
System.out.println(AA.NUM);
}
}
class AA{
public final static int NUM = 12;
static {
System.out.println("静态代码块被调用");
}
}
运行结果:
12
可以看到并没有输出 静态代码块被调用 。这也说明AA类并没有被加载
public class final1 {
public static void main(String[] args) {
Circle circle = new Circle(6);
System.out.println(circle.carArea(6));
}
}
class Circle{
private double radius;
private final double PI = 3.14;//第一种
public Circle(double radius) {
this.radius = radius;
//PI = 3.14;第二种
}
{//PI = 3.14第三种
}
public double carArea(double radius){
return radius*radius*PI;
}
}
public class BB{
public int addOne(final int x){
++x;//错误,不可以修改常量的值
return x+1;//正确,返回的是一个新的值,没有修改常量
}
}