Bootstrap

Java的final用法

1.final基本使用方法

final中文最终的

final可以修饰类,属性,方法,局部变量

在哪些情况可以使用到fianl,有下面几种情况

1.希望这个类不被继承,可以用final修饰

2.当你不希望父类的方法不被子类重写,可以用fianl修饰

3.当不希望每个类的属性被修改,可以用final修饰

4.当你不希望某个局部变量被修改,也可以用final修饰

package com.baoshun.singer.final_;

public class Final01 {
    public static void main(String[] args) {
        E e = new E();
        e.TAX_rate=0.09;
        System.out.println(e.TAX_rate);
        F f = new F();
        f.cry();

    }
}
//希望这个类不被继承,可以用final修饰
final class A{}

//class B extends A{}
//{
//不希望父类方法被重写
class C{
    public void hi(){}
}
//class D extends C{
//    public void hi(){
//        System.out.println("重写了C类的hi方法..");
//    }
//}
//不希望类的属性被修改
class E{
    public  double TAX_rate=0.08;
}
//不希望某个局部变量被修改,可以final修饰
class F{
    public void cry(){
       double num=0.01;//final修饰,num局部常量
        num=0.9;
        System.out.println("num="+num);
    }
}

2.final的细节1

1.final修饰的属性又叫常量,一般用XX_XX_XX命名

2.final修饰的属性被定义是,必须赋初值,并且以后不能被修改

定义时

在构造器中

在代码块中

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

定义时

在静态代码块,不能在构造器中赋值

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

package com.baoshun.singer.final_;

public class FinalDetail01 {
    public static void main(String[] args) {
        CC cc = new CC();
        DD dd = new DD();
         dd.cal();

    }
}
class AA{
    /*
    1.定义是:如public final double tax_rate=0.08;
    2.在构造器
    3.在代码块
     */
    public final double Tax_rate=0.08;
    public final double Tax_RATE;//必须大写
    public final  double Tax_RATE2;

    public AA() {
        Tax_RATE = 20.0;
    }
    {Tax_RATE2=0.2;
    }
}
class BB{

    public static final double TAX_RATE=0.08;
    //public static final double TAX_RATE1;//不可以
    public static final double TAX_RATE2;


//    public BB() {
//        TAX_RATE1=0.6;
//    }
    static {
        TAX_RATE2=0.3;
    }
}
final class  CC{

}
class DD{
    public final void cal(){
        System.out.println("cal()方法");
    }
}
class EE extends DD{
    
}

3.fianl细节2

1.如果一个类是fianl类就没必要将方法修饰成fianl方法;

2.fianl不可以修饰构造器

3.包装类不能被继承

package com.baoshun.singer.final_;

public class FinalDetail02 {
    public static void main(String[] args) {
        System.out.println(BBBB.num);
        
    }
}
final class AAA{
    public void cry(){

    }
}
class BBBB{
    public final static int num=10000;
    static {
        System.out.println("BBBB静态代码块被调用");
    }
}

;