Java final关键字

2018-01-19  本文已影响18人  PuHJ

三种情况: 数据、方法和类

1、数据

当final关键字修饰基本数据时,表达的含义是,永不改变的编译时常量;

如:final int  data = 1;

修饰对象引用时,它代表的意思是,其对象的引用不变,对象中的内容可以改变;但该引用不可以指向另一个对象

如:final int[] array = new int[4];
    array[0] = 1;

    //下面为错误示例
    int[] array1 = new int[4];
    array = array1;

特殊一点:Java允许生成被声明为final但又未给定初始值的域,但必须在构造器中初始化,如下:

public class Demo{
        //未赋值
    final int  data;
    Demo(){
        data = 1;
    }
}
用final修饰方法中参数
void add(final int  data){}

你可以读参数,但无法修改参数。它主要向匿名内部类传递数据。java是值传递,基本类型改变了值,也只会在局部中生效。引用类型则会对外也产生影响。

内部类形参必须使用final修饰
public class OuterClass {
    public void display(final String name){
        class InnerClass{
            void display(){
                System.out.println(name);
            }
        }
    }
}

这是因为内部类和外部类需要保持一致,内部类使用name这个变量,是需要copy一份。加入final防止外部改变了其地址,导致数据出现不一致。

2、方法

使用final方法的主要原因:锁定方法,防止被继承中的类覆盖修改方法含义。
private修饰的方法,隐式的指定为final修饰。

3、类

即不允许别人继承你的类时,则使用final修饰类。而且final类中的方法也间接地隐式指定为final,无法覆盖。
比如Java中的String类Integer类等都被指定为final

上一篇下一篇

猜你喜欢

热点阅读