Java面向对象中 final关键字的详解

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
👉点击跳转到网站

  1. final:最终的
  2. final可以用来修饰的结构:类,方法,属性
  3. final用来修饰一个类:此类不可以被其他类所继承
    例如:String类,System类,StringBuffer类
  4. final用来修饰方法:此方法不可以被重写
    比如Object类中的,getClass()方法
  5. final用来修饰变量:此时"变量"就称为一个常量了。

5.1.final修饰属性:可以考虑赋值的位置有:显示初始化,代码块中初始化,使用构造器初始化。
5.2. final修饰局部变量:
尤其是使用final修饰形参时,表明此参数是一个常量,当我们调用此方法时,给这个常量形参赋一个实参,一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。

package demo9;

public class FinalTest {
    int num;

    private void SetText(final int num){
      //  num=20; //编译不通过,不能给final 变量赋值
        System.out.println(num);
    }

    public static void main(String[] args) {
        FinalTest f1=new FinalTest();
        f1.SetText(20);
    }
}

一、final使用细节一
在这里插入图片描述
对应的案例代码如下:

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

        EE ee = new EE();
        ee.cal();//输出结果:cal()方法
    }
}

class AA {
    /**
     * 1.定义时:如public final double TAX_RATE = 0.08;
     * 2.在构造器中
     * 3.在代码块中
     */
    public final double TAX_RATE = 0.08;//定义时赋值

    public final double TAX_RATE1;

    public final double TAX_RATE2;

    public AA() { //在构造器中赋值
        TAX_RATE1 = 1.1;
    }

    {//在代码块中 赋值
        TAX_RATE2 = 2.2;
    }
}

class BB {
    /**
     * 如果final修饰的属性是静态的,则初始化的位置只能是
     * 1、定义时
     * 2、在静态代码块,不能在构造器中赋值。
     */
    public static final double TAX_RATE = 99.9;
    public static final double TAX_RATE1;

    static {
        TAX_RATE1 = 1.1;
    }
}

//final类不能继承,但是可以实例化对象
final class CC {

}

//如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承
//即,仍然遵守继承的机制
class DD {
    public final void cal() {
        System.out.println("cal()方法");
    }
}

class EE extends DD{

}

二、final使用细节二

public class FinalDetail02 {
    public static void main(String[] args) {
        /*
        //输出结果:
                BB静态代码块执行
                10000
         */
        System.out.println(BBB.num);

        /*
            输出结果:
					10
         */
        System.out.println(CCC.num);
    }
}

//final和static 搭配使用,效果更高,不会导致类的加载,底层编译器做了优化处理
class CCC {
    public final static int num = 10;

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

class BBB {
    public static int num = 10000;

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

final class AAA {
    //一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法
//    public final void cry(){
//
//    }
}

以上是fina关键字的详解,如有任何不当之处,可在评论区指正!

共勉:人生没有重来的机会,不要做一个懒人!身懒毁了你的身材,心懒毁了你的梦想!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值