Java(二十五)final关键字

58 阅读3分钟

Java中的final关键字在编写程序中,比较常用。尤其是在上文中的匿名内部类中。

final 表示最终,也可以称为完结器,表示对象是最终形态的,不可改变的意思。

使用final修饰的的类,是“断子绝孙”的。

 

一:final修饰成员变量

Final修饰的类的成员变量是常量,不可被改变。

代码如下所示:

public class T01 {
    public static void main(String[] args) {
        person per = new person();
        System.out.println(per.index);
    }
}
 
class person
{
    public final int index = 1;
}

控制台输出:

1

 

我们尝试一下改变person类中的index值,如下图所示:

1.png

final修饰基本数据类型的变量,值不能改变

final修饰引用数据类型的变量,不能改变的是变量存放的地址值,地址值上(对象)的

内容可以改变

final修饰局部变量,该变量在定义的时候可以不被赋值,但是在使用之时,该变量必须

被初始化

final修饰成员变量,该变量要么在定义时直接被初始化,要么在构造代码块中被初始

化,要么在构造方法中被初始化。

换言之,在对象创建完毕之前,被final修饰的成员变量一定要被赋值且只能被赋值一次

二:final修饰成员方法

Final修饰的成员方法是不可以被重写的。

public class T01 {
    public static void main(String[] args) {
        person per = new person();
        // System.out.println(per.index);
        per.drink();
    }
}
 
class person
{
    public final int index = 1;
 
    public final void drink()
    {
        System.out.println("person类使用final修饰的方法!");
    }
}

控制台输出:

person类使用final修饰的方法!

 

我们定义一个类来继承person类,尝试重写一下drink方法:

2.png

 

三:final修饰类

final 修饰的类叫作 final 类,final类通常是功能完整的,不能被继承,Java 中有许多类是 final 的,比如 String, Interger 以及其他包装类。

public class T01 {
    public static void main(String[] args) {
        person per = new person();
        // System.out.println(per.index);
        per.drink();
    }
}
 
final class person
{
    public final int index = 1;
 
    public final void drink()
    {
        System.out.println("person类使用final修饰的方法!");
    }
}

控制台输出:

person类使用final修饰的方法!

 

下面我们尝试一下定义一个子类来继承person类,结果如下图所示:

3.png

 

四:final优点

1:final 关键字,提高了性能,JVM 和 Java 应用都会缓存 final 变量。

2:final 变量,可以安全的在多线程环境下进行共享,而不需要额外的同步开销。

 

5 、总结


1、final 关键字可以用于修饰成员变量、本地变量、方法以及类。

2、final 成员变量,必须在声明的时初始化或者在构造器中初始化,否则报编译错误。

3、final 变量不能再次赋值;final 方法不能被重写;final 类不能被继承。

4、在匿名类中,所有变量都必须是 final 变量。

5、接口中,声明的所有变量本身是 final 的。

6、final 和 abstract 这两个关键字是反相关的,final 类就不可能是 abstract 的。

7、声明时未初始化的 final 变量,称为空白 final 变量(blank final variable),必须在构造器中进行初始化,或者调用 this() 初始化,否则,编译器会报错final变量(变量名)需要进行初始化。

8、final修饰变量命名单词全大写,每个单词用下划线分割

9、对于集合对象声明为 final 指的是引用不能被更改。

10、final修饰类,该类不被继承(无子类,但是该类可以有父类)

 

以上大概是java中final关键字的使用。

 

有好的建议,请在下方输入你的评论。