【JAVA学习笔记】39 - final关键字

项目代码

https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/final_

一、final关键字基本介绍

final可以修饰类、属性、方法和局部变量,
在某些情况下,程序员可能有以下需求,就会使用到final
1)当不希望类被继承时,可以用final修饰

【JAVA学习笔记】39 - final关键字_第1张图片
2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰

【JAVA学习笔记】39 - final关键字_第2张图片
3)当不希望类的的某个属性的值被修改,可以用final修饰.

【JAVA学习笔记】39 - final关键字_第3张图片
4)当不希望某个局部变量被修改,可以使用final修饰 

public class Final01 {
    public static void main(String[] args) {
        E e = new E();
        // e.TAX_RATE = 0.09;
    }
}
final class A{

}
// class B extends A{} 1)当不希望类被继承时,可以用final修饰.
class C{
    // public final void hi(){ //2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰
    //     System.out.println("C类的hi方法");
    // }
}
class D extends C{
    public void hi(){
        System.out.println("重写了子类的hi方法");
    }
}
class E{
    public final double TAX_RATE = 0.08;
}
class F{
    public void cry(){
        final double NUM = 0.01;
        // NUM = 0.9;
        System.out.println(NUM);
    }
}

 二、final关键字使用注意事项和细节讨论


1.final修饰的居性又叫常量,一般用XX_XX_XX_X来命名

2.final修饰的属性在定义时必须赋初值并且以后不能再修改,赋值可以在如下位置之一

        ①定义时:如public final double TAX RATE=0.08;

        ②在构造器中

        ③代码块中。

class AA{
    public final double TAX_RATE1 = 0.08;
    public final double TAX_RATE2;
    public final double TAX_RATE3;
    //①定义时:如public final double TAX RATE=0.08;
    // 
    //②在构造器中
    // 
    //③代码块中。
    public AA(){
        TAX_RATE2 = 1.1;
    }
    {
        TAX_RATE3 = 10.0;
    }
}


3.如果final修饰的属性是静态的,则初始化的位置只能是

①定义时        ②在静态代码块        不能在构造器中赋值。

【JAVA学习笔记】39 - final关键字_第4张图片

4.final类不能继承,但是可以实例化对象。

【JAVA学习笔记】39 - final关键字_第5张图片

5.如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承。

public class FinalDetail01 {
    public static void main(String[] args) {
        new AA();
        new EE().cal();
    }
}
class DD{
    public final void cal(){
        System.out.println("cal()方法");
    }
}
class EE extends DD{

}

5.一般来说,如果类已经是final类了,就不需要再将方法修饰成final

6.final不能修饰构造器方法(构造器)

7.final和static往往搭配使用,效率更高,不会导致类加载底层编译器做了优化处理。

public class FinalDetail02 {
    public static void main(String[] args) {
        System.out.println(BBB.num);
    }
}
class BBB{
    public final static int num = 10000;//去掉final会执行BBB代码块初始化
    //final和static往往搭配使用,效率更高,不会导致类加载底层编译器做了优化处理。
    static {
        System.out.println("BBB代码块被执行");
    }
}

8.包装类(Integer, Double,Float, Boolean等都是fina),String也是final类.

三、final关键字的练习

1.

请编写一个程序,能够计算圆形的面积。要求圆周率为3.14.赋值的位置3个方式都写一下.

public class FinalExercise01 {
    public static void main(String[] args) {
        Cirle cirle = new Cirle(6);
        System.out.println(cirle.cal());
    }
}
class Cirle{
    private double radius;
    private final double PI = 3.14;
    public Cirle(double radius) {
        this.radius = radius;
    }
    public double cal(){
        return radius * radius * PI;
    }
}

其实正常来说应该做成静态方法,不创建对象也能计算,但考虑到可能要保存实例的属性,用上面的也对

下面给个static的

public class FinalExercise01 {
    public static void main(String[] args) {
        System.out.println(Cirle.cal(6));
    }
}
class Cirle{
    private final static double PI = 3.14;
    public static double cal(double radius){
        return radius * radius * PI;
    }
}

【JAVA学习笔记】39 - final关键字_第6张图片

2.

【JAVA学习笔记】39 - final关键字_第7张图片

下面的那个对 return x + 1 是+符号 没有在改变x

你可能感兴趣的:(java,学习,笔记)