Java学习之final关键词


  • final 数据
    • 常量:基本数据类型、final修饰、定义时必须对其赋值。
    • 编译期常量
    • 不能因为某数据是final的就认为在编译时可以知道它的值,如:public final int a = rand.nextInt(20);
    • Java允许生成“空白final域”,所谓空白的final是指被声明为final但未给定初值的域。
    • 初始化方式:必须在域的定义处或者每个构造器中用表达式对fianl进行赋值
    • final参数:Java允许在参数列表中以声明的方式将参数指明为final。表明:方法中无法修改参数引用所指向的对象。
  • final 方法
    • 使用final方法的原因
      1. 把方法锁定,禁止继承类修改它的含义、并且不会被覆盖。
      2. 效率(忽略,早起版本适用)
    • final和private关键字
      1. 类中所有的private方法都隐式地指定为是final的。无法取用、覆盖private方法。
      2. 一种特殊情况:以下f()方法并非覆盖而是创建了一个新方法。
class WithFinals {
    private final void f() {
        System.out.println("WithFinals.f()");
    }
    private void g() {
        System.out.println("WithFinals.g()");
    }
}

class OverridingPrivate extends WithFinals {
    private final void f() {
        System.out.println("OverringPrivate.f()");
    }
    private void g() {
        System.out.println("OverrringPrivate.g()");
    }
}

class OverridingPrivate2 extends OverridingPrivate {
    public final void f() {
        System.out.println("OverringPrivate2.f()");
    }

    public void g() {
        System.out.println("OverringPrivate2.g()");
    }
}
public class FinalOverridingIllusion {
    public static void main(String[] args) {
        OverridingPrivate2 op2 = new OverridingPrivate2();
        op2.f();
        op2.g();
        OverridingPrivate op = op2;
        WithFinals wf = op2;

    }
}
  • final 类
    • final类中所有的方法都隐式的指定为final的
    • 无法继承
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值