Java基础-final关键字

package com.hspedu.final_;

public class Course393 {
    public static void main(String[] args) {
        // final关键字

        /*
         * 1、final修饰类,这个类就不能被其他类继承
         * 2、final修饰方法,这个方法不能被继承的子类重写(override)
         * 3、final修饰属性,这个属性的值就无法修改
         * 4、final修饰局部变量,这个局部变量不能被修改(称为局部常量)
         * */

        E e = new E();
//        e.TAX_RATE = 0.09;

    }
}


final class A {

}

//class B extends A {
//
//}


class C {

    public final void hi() {

    }
}

class D extends C {
//    @Override
//    public void hi() {
//        System.out.println("重写C类的hi方法");
//    }
}


class E {

    public final double TAX_RATE = 0.08;
}


class F {

    public void cry() {
        final double NUM = 0.01;
//        NUM = 1;
        System.out.println("NUM = " + NUM);
    }
}
package com.hspedu.final_;

public class Course394 {
    public static void main(String[] args) {
        // final细节

        /*
         * 1、final一般命名:XX_XXX;
         * 2、final定义时,必须初始化赋值:
         *   (1)定义赋值,(2)构造器赋值,(3)代码块赋值
         * 3、如果final修饰的属性是静态static的,
         *  (1)定义赋值,(2)静态代码块,不能在构造器中赋值
         *  原因:静态成员是在类加载的时候初始化的,对象创建才会调用构造器
         * 4、final不能继承,可以实例化
         * 5、final的方法是不能重写override,但是可以继承提供给子类使用
         * */

        CC cc = new CC();
        new EE().cal();

    }
}

class AA {

    public final double TAX_RETE = 0.08;

    public final double TAX_RATE2;

    public final double TAX_RATE3;


    public AA() {
        TAX_RATE2 = 1.1;
    }

    {
        TAX_RATE3 = 8.8;
    }
}


class BB {

    public static final double TAX_RATE = 99.9;

    public static final double TAX_RATE2;

//    public static final double TAX_RATE3;


    static {
        TAX_RATE2 = 3.3;
    }

//    public BB() {
//        TAX_RATE3 = 8.8;
//    }
}


final class CC {

}


class DD {

    public final void cal() {
        System.out.println("cal");
    }
}

class EE extends DD {
//    public final void cal() {}
}
package com.hspedu.final_;

public class Course394 {
    public static void main(String[] args) {
        // final细节2

        /*
         * 1、一般对于一个final的类,没必要将内部的方法再用final修饰
         *   该类已经不能被继承了,就没有重写
         * 2、final不能修饰构造器
         * 3、final和static一般是搭配使用,不会导致类的加载,底层编译器做了优化
         * 4、包装类(Integer、String、Double...)这些都是final修饰的类,不能被继承
         * */

        // 没有调用静态代码块
        System.out.println(BBB.NUM);
    }
}

final class AAA {

    public final void cry() {
    }
}

class BBB {
    public final static int NUM = 10000;

    static {
        System.out.println("BBB静态代码块");
    }
}

 

posted @ 2022-03-03 16:36  柯南同学  阅读(20)  评论(0编辑  收藏  举报