final关键词

final是java中的一个关键词,是域、方法和类的修饰符,通常的作用是来表述被修饰的内容是无法改变的。

 

  • final数据

作用:一个恒定不变的编译时常量可以减轻运行时的负担,或者我们还可以定义一个运行时被初始化再也无法被改变的值。

(1)修饰成员变量,只能在变量定义时或构造函数中初始化,否则编译不通过。

    //基本类型的成员变量必须只能在定义时初始化,但并不意味着编译时可以确定值
    private final int num = new Random().nextInt(9);
    //final类中的属性,可以定义为非final属性
    private final String name;
    //变量定义时做初始化的方式
    private final Date date = new Date();

    //final修饰的成员变量可以在构造函数中进行初始化
    public Tools() {
        this.name = "tools";
    }

    //在构造函数种使用表达式初始化,同样满足final域在使用前被初始化的要求
    public Tools(String name) {
        this.name = name;
    }

(2)修饰方法参数,基本数据类型值不可变

(3)修饰方法参数,引用类型可以更改对象值,但引用不可变

(4)修饰匿名内部类调用的局部变量

在jdk8中,也可以不用显示的使用final修饰该局部变量,如果局部变量被匿名内部类访问,那么该局部变量相当于自动使用了final修饰(effectively final)。但如果涉及对该局部变量的修改,则会不隐式使用final修饰,匿名内部类中报错。

    interface Task {
        void run();
    }

    public void exeute() {
        int num = 1;
        Task task = new Task() {
            @Override
            public void run() {
                System.out.println("执行个数:" + num);// num被隐式修饰为final,如果59行代码放开会报错: Variable 'num' is accessed from within inner class, needs to be final or effectively final
            }
        };
       // num = 2; //如果这里放开会报错,匿名内部类中使用num和方法中修改局部变量不能同时存在
        System.out.println("执行个数:" + num);
    }
  • final修饰方法

用户方法锁定,防止任何继承类的修改,不会被覆盖

private 方式隐藏式指定为final,因为方法不会在任何情况下被覆盖。

 

  • final修饰类

对该类的设计不做任何变动,不能继承

 由于final类不能继承,所以final类种的所有方法都隐式指定为final方法,因为无法被重写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值