final关键字

final关键字

引入

象一下,你有一张非常特别的纸。这张纸上画着一幅画,画得非常好,所以你决定给这张纸起一个名字叫做“我的最爱画”。因为这张画这么特别,你不希望任何人修改它,所以你在画的边框上写上了“不准修改”,这样别人就知道不能在这张画上加任何东西或者擦掉任何东西了。

在Java中,当你创建一个变量时,你其实就像是拿出了一张纸,然后给它一个名字。如果你想要这个变量始终保持不变,不被其他人(或者其他代码)修改,你可以在这个变量名字前面加上final关键字。这就像是在你的纸上写上了“不准修改”。

举个例子: 假如我们有一个变量叫做myNumber,我们不希望它被改变,我们就这样写:

final int myNumber = 10;

现在myNumber的值是10,并且永远都会是10,因为我们用final标记了它,就像在纸上写上了“不准修改”。

同样的道理适用于方法和类。如果你有一个方法,你不希望任何其他的方法覆盖它(就像别的画家来重新画你的画),你可以使用final关键字。如果你有一个类,你不希望其他的类继承它(就像别人不能拿你的画去当作他们自己的作品),你也可以使用final关键字。

所以记住,final就像是在Java的世界里给变量、方法或者类加上“不准修改”的标签。

基本介绍

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

当出现以下需求时,就会用到final

(1)当父类不再希望被继承时

(3)当父类的某个方法不希望被覆盖/重写时

(4)当我们不希望类的属性被修改时

(5)但我们不希望局部变量被修改时

package com.LJX.Static_;

public class final_ {
    public static void main(String[] args) {
        //Cannot assign a value to final variable 'TAXT_RATE'
//        new E().TAXT_RATE = 100;
    }
}

//(1)当父类不再希望被继承时
final class A{ }
//class B extends A{}报错继承不了

//(3)当父类的某个方法不希望被覆盖/重写时
class C{
   final public void hi(){

    }
}
class D extends C{
    @Override
    public void hi() {
        super.hi();
    }
}
//(4)当我们不希望类的属性被修改时
class E{
    //当类中的变量被final修饰,可看作为常量
    //类似于C语言中的const
   final public double TAXT_RATE = 0.03;
}


//(5)但我们不希望局部变量被修改时
class F{
    public void cry(){
      final double NUM = 100;
//        NUM = 0;
        System.out.println("MUN = " + NUM);
    }
}

注意事项与细节

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

  2. final修饰的属性必须赋初始值,并且不能再修改

    当赋值的属性时普通属性,赋值的位置可以有三个,

    (1)定义时

    (2)在构造器

    (3)在代码块

    当修饰的是静态变量时

    (1)定义时

    (2)静态代码块

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

  4. 如果类不是final类,当是有final方法,虽方法不能重写,但类可以继承

  5. 一般来说,final类中的方法没有必要去进行final

  6. final不能修饰构造器

  7. final和static往往搭配使用,效率更高,底层做了优化

  8. 包装类(Integer,Double, Boolean)也是final类

package com.LJX.Static_;

public class final_02 {
    public static void main(String[] args) {
        //当调用没有被final修饰的属性,静态代码块也执行了
//        System.out.println(fuck.RATE);
        //final 修饰,可以当做普通变量使用不会引起类的加载
        System.out.println(fuck.RATE);
    }
}
//final和static往往搭配使用,效率更高,底层做了优化
class fuck{
   final public static int RATE = 100;
    static {
        System.out.println("静态代码块执行");
    }
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值