【final 关键字的理解】


final关键字

final关键字主要作用为防止数据被修改,保证代码安全。

可以用于修饰:类中方法变量参数;

修饰类

相关代码
 代码解读final class Person {
}

// 错误,不可以继承被final修饰的类
class Student extends Person {
}

概念

当使用final关键字修饰类的时候,表示该类不可以被继承,类中所有方法默认均为final

final修饰类可以防止被继承,如jdk代码中的String类就是被final修饰的,从而防止被其他类继承,导致内部逻辑被破坏。

修饰类中方法

代码

 代码解读class Person {
    // 禁止子类重写该方法,修改其含义
    final String getIdentity() {
        return "I am a person!";
    }
}

class Student extends Person {
    // 错误,禁止重写父类的该方法
    @Override
    final String getIdentity() {
        return "I am a Student!";
    }
}

概念

当我们不希望子类重写父类的方法,修改父类该方法的定义时可以使用final修饰。

这样任何子类都不可以重写父类的该方法。

修饰变量

代码

 代码解读public static void main(String[] args) {
    final int num;
    final Object o;
    num = 10;
    o = new Object();

    // 下边两行是错误的
    num = 20;
    o = new Object();
}
 代码解读public class Test {
   // 类中的final成员变量必须在构造器中进行初始化
   private final Object object;
   
   public Test() {
       this.object = new Object();
   }
   
   // 错误,被final修饰的成员变量必须确保类中的构造器执行后,该变量完成初始化!!!
   public Test(Object object) {
   }
}

概念

当我们使用final关键字对变量进行修饰的时候。

  1. 当修饰的变量为内置类型时,一但完成初始化后,该变量的不可以进行修改。
  2. 当修饰的变量为引用类型时,一但完成初始化后,该变量中的对象引用不会指向其他对象,但可以修改对象内部的内容。
  3. 当我们用final修饰成员变量时,必须确保类中的构造器执行后,该变量完成初始化 用final修饰变量可以防止数据被修改,保证安全。

修饰参数

代码

 代码解读public void testInnerType(final int num) {
    num = 10; // error: Cannot assign a value to final variable 'num';
}

public void testObject(final Object o) {
    o = new Object(); // error: Cannot assign a value to final variable 'o';
}

概念

final修饰参数虽然可以做到参数不被修改,这么做并无任何意义。

java中的内置类型作为参数为值拷贝,用final修饰参数保证了形参不会被修改,并不能保证实参被修改。

java中的引用类型作为参数为引用拷贝,相当于增加一个引用指向实参所指向的对象,用final修饰参数保证了形参不会修改其指向的对象,并不能保证实参被修改。

因此,使用final修饰参数,并不能做到防止实参被修改,因此不需要在参数处加final。如需要形参不被该方法修改,才需要使用final修饰。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值