final详解

一、使用目的

final根据上下文环境,通常被指为“这是无法改变的”。

  • 需要一个永不改变的编译时常量
  • 一个在运行时期被初始化的值,但是不希望被改变

二、使用场景

final可以用来修饰变量、方法、类。

1.final变量

  • 用final修饰的变量,值一旦给定就无法改变
  • 用final修饰的对象引用,使其对象引用 恒定不变,但是对象自身的内容可以被改变
  • “空白final”,指声明为final但未赋初值的域。但是在使用空白final之前必须被初始化,一般使用构造方法 进行初始化,这样就可以使一个类中的final域根据对象不同而有所不同。

    public class FinalTest {
        private final int i=0;
        final int j;//空白final
        final Inner inner=new Inner();//修饰对象引用
        public FinalTest(){
            j=1;//在使用前进行初始化
        };
        public FinalTest(int x){
            j=x;//在使用前进行初始化
        }
        public static void main(String args[]){
            FinalTest finalTest=new FinalTest(2);//空白final的赋值
    //        finalTest.i=1; 不可改变final的值
    //        finalTest.inner=new Inner();不能改变对象的引用
            finalTest.inner.a=2;//可以改变对象内部的值
    //        finalTest.j=3;不可改变
        }
    }
    class Inner{
        int a=1;
    }
    

2.final方法

  • 把方法锁定,以防任何继承类修改,不会被覆盖

    private方法都隐式的被指定为final的。由于private无法被取用,也就无法覆盖。对应private方法,基类和继承类中可以同时出现相同名称的方法,但不能称之为覆盖,而是又创建了一个新类。对应final方法,则不可能出现这种同名情况

3.final参数

  • 只能被使用,不能被修改

4.final类

  • final类不能被继承,其成员方法都默认是final的

三、static和final一起使用

对于static和final修饰的域,只是占据了一段不能改变的存储空间

  • 对于常量,表示一旦赋值就不可修改,并且通过类名可以访问,可理解为“全局常量”
  • 对于方法,表示不可覆盖,并且可以通过类名可以访问

static final修饰的对象引用类和容器类(ArrayList、Map等),可以改变内容中存放的内容


参考:http://lavasoft.blog.51cto.com/62575/18771/ 和《Java编程思想》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值