前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >final关键字修饰类、变量与方法【总结】

final关键字修饰类、变量与方法【总结】

原创
作者头像
潜意识Java
发布2025-01-17 20:18:16
发布2025-01-17 20:18:16
14300
代码可运行
举报
文章被收录于专栏:Java知识Java知识
运行总次数:0
代码可运行

目录

一、final 修饰类:封印的 “永恒之石”

二、final 修饰变量:锁定的 “不变之值”

三、final 修饰方法:不可撼动的 “坚固堡垒”

四、总结


在 Java 编程的世界里,final 关键字就像一把神奇的 “锁”,一旦使用,就能赋予类、变量和方法独特的性质。今天,就让我们一同深入探究 final 关键字修饰类、变量和方法时的各种表现和用途,通过丰富的代码示例,感受它为我们的编程带来的便利与保障。

一、final 修饰类:封印的 “永恒之石”

当 final 关键字修饰一个类时,这个类就如同被封印的 “永恒之石”,无法被其他类继承。这意味着该类的设计和功能已经固定,不希望被修改或扩展。在实际应用中,这样的类通常用于表示那些具有特定用途、不需要也不应该被改变的实体。

比如,Java 标准库中的String类就是一个被 final 修饰的类。String类用于处理字符串,它的内部实现已经非常完善,并且在各种场景下都被广泛使用。如果允许其他类继承String类,可能会破坏String类的一些特性和安全性。

下面我们通过自定义一个被 final 修饰的类来加深理解:

代码语言:javascript
代码运行次数:0
运行
复制
final class ImmutablePoint {
    private int x;
    private int y;

    public ImmutablePoint(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}

在这个例子中,ImmutablePoint类被 final 修饰,它表示一个不可变的点。由于不能被继承,我们可以确保这个类的行为和属性不会被意外修改。如果尝试创建一个继承自ImmutablePoint的类,将会导致编译错误:

代码语言:javascript
代码运行次数:0
运行
复制
// 以下代码会导致编译错误,因为ImmutablePoint类被final修饰,不能被继承
// class SubImmutablePoint extends ImmutablePoint {
//     // 类体
// }

final 修饰类在保证代码的稳定性和安全性方面具有重要意义,尤其在一些基础类库的设计中,能防止子类对核心功能的破坏。

1.修饰类:不能被继承

例子:工具类是不用被继承的,所以工具类需要加上final

二、final 修饰变量:锁定的 “不变之值”

  1. final 修饰基本数据类型变量 当 final 修饰基本数据类型变量时,该变量就成为一个常量,一旦被赋值,其值就不能再被改变。这在很多场景下非常有用,比如定义数学常量、配置参数等。
代码语言:javascript
代码运行次数:0
运行
复制
public class MathConstants {
    public static final double PI = 3.141592653589793;
    public static final int E = 2.71828;

    public static void main(String[] args) {
        // 以下代码会导致编译错误,因为PI是final修饰的常量,不能被重新赋值
        // PI = 3.14;
        System.out.println("圆周率PI的值为: " + PI);
        System.out.println("自然常数E的值为: " + E);
    }
}

在这个例子中,PIE都是被 final 修饰的常量,它们的值在程序运行过程中始终保持不变。使用 final 修饰常量,不仅可以提高代码的可读性,还能避免因意外赋值导致的错误。 2. final 修饰引用数据类型变量 当 final 修饰引用数据类型变量时,它表示该变量的引用不能再指向其他对象,但对象本身的内容是可以修改的。这一点需要特别注意,与基本数据类型变量有所不同。

代码语言:javascript
代码运行次数:0
运行
复制
class MutableObject {
    private int value;

    public MutableObject(int value) {
        this.value = value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

public class FinalReferenceExample {
    public static void main(String[] args) {
        final MutableObject obj = new MutableObject(10);
        // 以下代码会导致编译错误,因为obj是final修饰的变量,不能再指向其他对象
        // obj = new MutableObject(20);
        obj.setValue(30);
        System.out.println("对象的值为: " + obj.getValue());
    }
}

在这个例子中,obj是一个被 final 修饰的引用变量,它只能指向创建时的MutableObject对象,不能再指向其他对象。但是,我们可以通过调用对象的方法修改对象内部的状态,如obj.setValue(30)

三、final 修饰方法:不可撼动的 “坚固堡垒”

当 final 修饰一个方法时,该方法就不能被其子类重写。这在设计类的方法时非常有用,如果你希望某个方法的实现是固定的,不希望子类对其进行修改,可以将该方法声明为 final。

代码语言:javascript
代码运行次数:0
运行
复制
class Animal {
    public final void makeSound() {
        System.out.println("动物发出声音");
    }
}

class Dog extends Animal {
    // 以下代码会导致编译错误,因为makeSound方法在父类中被final修饰,不能被重写
    // @Override
    // public void makeSound() {
    //     System.out.println("汪汪汪");
    // }
}

在这个例子中,Animal类中的makeSound方法被 final 修饰,Dog类作为Animal类的子类,不能重写makeSound方法。这确保了在继承体系中,makeSound方法的行为始终保持一致。

final 修饰方法在很多情况下可以提高程序的安全性和稳定性。例如,在一些核心算法的实现中,将关键方法声明为 final,可以防止子类无意中修改算法逻辑,导致程序出现错误。

2.final修饰方法:方法不能被重写

2.final修饰变量:变量有且只能赋值

如果是常量就添加这两个单词

四、总结

通过以上对 final 关键字修饰类、变量和方法的深入探讨,我们可以看到 final 关键字在 Java 编程中扮演着重要的角色。它为我们提供了一种机制,能够确保类的设计、变量的值以及方法的实现保持稳定和不变。合理使用 final 关键字,可以使我们的代码更加健壮、安全和易于维护。在实际编程中,我们需要根据具体的业务需求和设计目标,灵活运用 final 关键字,发挥它的最大优势。希望大家在今后的 Java 编程中,能够熟练掌握和运用 final 关键字,创造出更加优秀的程序。如果在学习过程中遇到任何问题,欢迎随时与我交流,让我们一起在 Java 编程的道路上不断前行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、final 修饰类:封印的 “永恒之石”
  • 二、final 修饰变量:锁定的 “不变之值”
  • 三、final 修饰方法:不可撼动的 “坚固堡垒”
  • 四、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档