Java(二十五)final关键字

简介: Java(二十五)final关键字

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值,如下图所示:

1702538764320.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方法:

1702538807515.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类,结果如下图所示:

1702538842633.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关键字的使用。

 

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


目录
相关文章
|
28天前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
25 3
|
26天前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?
|
1月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
21 5
|
1月前
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
28 0
Java中 final、finally、finalize 有什么区别?
|
1月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
174 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
1月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
了解final关键字在Java并发编程领域的作用吗?
|
1月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
26 0
|
1月前
|
安全 Java 编译器
了解final关键字在Java并发编程领域的作用吗?
【10月更文挑战第8天】在Java并发编程中,`final`关键字具有重要作用,包括保证变量的可见性和不可变性,防止对象引用被意外修改,并帮助编译器优化读取操作及消除不必要的同步。通过确保变量不可变,`final`增强了多线程环境下的安全性与性能。
|
3月前
|
前端开发 JavaScript Java
【前端学java】java中final修饰符(6)
【8月更文挑战第9天】java中final修饰符(6)
38 2
|
3月前
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
455 1