Java中`final`关键字的使用场景与区别详解

在这里插入图片描述

博主 默语带您 Go to New World.
个人主页—— 默语 的博客👦🏻 优秀内容
《java 面试题大全》
《java 专栏》
《idea技术专区》
《spring boot 技术专区》
《MyBatis从入门到精通》
《23种设计模式》
《经典算法学习》
《spring 学习》
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨


默语是谁?

大家好,我是 默语,别名默语博主,擅长的技术领域包括Java、运维和人工智能。我的技术背景扎实,涵盖了从后端开发到前端框架的各个方面,特别是在Java 性能优化、多线程编程、算法优化等领域有深厚造诣。

目前,我活跃在CSDN、掘金、阿里云和 51CTO等平台,全网拥有超过10万的粉丝,总阅读量超过1400 万。统一 IP 名称为 默语 或者 默语博主。我是 CSDN 博客专家、阿里云专家博主和掘金博客专家,曾获博客专家、优秀社区主理人等多项荣誉,并在 2023 年度博客之星评选中名列前 50。我还是 Java 高级工程师、自媒体博主,北京城市开发者社区的主理人,拥有丰富的项目开发经验和产品设计能力。希望通过我的分享,帮助大家更好地了解和使用各类技术产品,在不断的学习过程中,可以帮助到更多的人,结交更多的朋友.


我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。


Java中final关键字的使用场景与区别详解

摘要

在Java中,final关键字是一个非常重要的修饰符,具有多种使用场景。它不仅用于变量的声明,还可以修饰方法、类以及方法参数。理解final的作用和区别对初学者来说至关重要,本文将通过详细的讲解和代码示例,帮助大家全面了解final关键字的使用场景,并详细解释其背后的原理和实际应用。为了让你更好地掌握这些知识,最后别忘了加我的微信,我们一起交流学习!🤝


引言

Java是一门面向对象的编程语言,在日常开发中,我们会使用各种修饰符来控制程序的行为。final就是其中一个非常重要的关键字,它用于指定不可修改的内容。这个关键字在许多情况下都有用武之地,比如确保常量不变、阻止方法被重写或防止类被继承等。对初学者来说,final的含义可能有点抽象,本文将通过多种场景来为大家逐一解释。


1. final修饰变量

在Java中,final可以用来修饰 变量,使得该变量成为常量。一旦被赋值之后,final变量就不允许再改变其值。这是final最常见的使用场景之一,通常用于定义常量。

1.1 final变量的作用

  • 基本数据类型:当final修饰一个基本数据类型时,它的值在赋值后就不能再修改。
  • 引用类型:当final修饰一个引用类型时,引用本身不能被修改,但引用的对象的内容是可以修改的。
代码示例:
public class FinalVariableExample {
    public static void main(String[] args) {
        final int number = 10;  // 基本数据类型
        // number = 20;  // 错误,final变量不可修改

        final StringBuilder builder = new StringBuilder("Hello");
        builder.append(", World!");  // 可以修改对象内容
        System.out.println(builder.toString());  // 输出: Hello, World!
        
        // builder = new StringBuilder("New String");  // 错误,不能重新赋值对象
    }
}

1.2 常量命名规范

在Java中,通常会将final变量命名为全大写字母,并用下划线分隔,以便于区分常量。

public class FinalConstantExample {
    public static void main(String[] args) {
        final int MAX_SIZE = 100;  // 常量
        System.out.println(MAX_SIZE);  // 输出: 100
    }
}

2. final修饰方法

final关键字还可以用来修饰 方法,表示该方法不能被子类重写。这对于需要保证方法行为不变的情况非常有用。

2.1 final方法的作用

当一个方法被声明为final时,子类不能重写该方法。这样可以防止子类修改或改变父类的方法行为。

代码示例:
class Parent {
    public final void show() {
        System.out.println("This is a final method.");
    }
}

class Child extends Parent {
    // public void show() {  // 错误,不能重写final方法
    //     System.out.println("Child method.");
    // }
}

2.2 final方法的应用场景

final方法通常用于提供一个稳定且不希望被修改的行为,例如一些核心功能方法、工具类方法等。


3. final修饰类

final还可以修饰 ,表示该类不能被继承。这样可以防止类被子类化,确保类的实现不被修改。

3.1 final类的作用

当一个类被声明为final时,其他类不能继承这个类。final类通常用于防止继承,例如:String类就是一个final类。

代码示例:
final class FinalClass {
    public void display() {
        System.out.println("This is a final class.");
    }
}

// class SubClass extends FinalClass {  // 错误,无法继承final类
// }

3.2 为什么使用final类?

final类通常用来表示不可修改的设计,防止它被子类化和重写。例如,String类不可变,保证了它的稳定性和线程安全性。


4. final修饰方法参数

final还可以修饰方法的 参数,这表示在方法体内该参数不能被修改。虽然这种情况在实际应用中较少,但有时它可以防止方法中意外改变参数值。

4.1 final方法参数的作用

当参数被声明为final时,在方法体内无法修改该参数的值。这有助于提高代码的可读性和可维护性,尤其在大型项目中。

代码示例:
public class FinalParameterExample {
    public static void main(String[] args) {
        int result = add(10, 20);
        System.out.println(result);  // 输出: 30
    }

    // 方法参数被final修饰,防止在方法内部修改
    public static int add(final int a, final int b) {
        // a = 20;  // 错误,不能修改final参数
        return a + b;
    }
}

5. final的综合应用

通过将final与其他修饰符结合使用,我们可以得到更加灵活和安全的设计。例如,可以结合finalstatic使用来创建常量,结合finalabstract使用来防止方法重写。

5.1 finalstatic结合使用

public class FinalStaticExample {
    public static void main(String[] args) {
        System.out.println(MyClass.CONSTANT);  // 输出: 100
    }
}

class MyClass {
    public static final int CONSTANT = 100;  // 常量
}

总结

通过本文的详细讲解,我们已经覆盖了final关键字的主要使用场景和区别。总结如下:

  • final修饰变量:使得变量成为常量,不能修改值。
  • final修饰方法:阻止方法被子类重写,确保方法行为不变。
  • final修饰类:防止类被继承,确保类的实现不被修改。
  • final修饰参数:保证方法参数在方法体内不能被修改。

理解并掌握final关键字的使用对于编写高质量、可维护的Java代码至关重要。在实际开发中,合理使用final可以提升代码的稳定性和性能。


参考资料

  1. 《Java核心技术卷I》
  2. 《Effective Java(第3版)》
  3. Oracle官方Java文档

快来加我的微信一起交流学习吧!🤗

添加微信 Solitudemind,学习Java,解答你的问题,大家一起进步!

在这里插入图片描述


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默 语

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值