java中final关键字详解及用法详解

 更新时间:2025年06月13日 08:30:45   作者:EMO的月亮与六便士  
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字,这篇文章主要介绍了java中final关键字详解及用法的相关资料,需要的朋友可以参考下

前言

在Java中,final关键字用于限制类、方法和变量的可变性,确保代码的安全性和清晰度。以下是其详细作用及使用场景:

1. final修饰类

  • 作用:被final修饰的类不能被继承,即不能有子类。
  • 使用场景
    • 防止类被扩展或修改,例如StringInteger等不可变类。
    • 确保类的行为或安全性(如工具类)。
  • 示例
    final class ImmutableClass {
        // 类内容
    }
    // 编译错误:无法继承final类
    // class SubClass extends ImmutableClass {}
    

2. final修饰方法

  • 作用:被final修饰的方法不能被子类重写(Override)
  • 使用场景
    • 确保方法逻辑在继承体系中保持不变,避免子类修改关键行为。
    • 与性能优化相关(早期Java版本可能内联final方法)。
  • 示例
    class Parent {
        final void criticalMethod() {
            System.out.println("关键方法,不可重写");
        }
    }
    
    class Child extends Parent {
        // 编译错误:无法重写final方法
        // @Override void criticalMethod() {}
    }
    

3. final修饰变量

final变量的值只能被赋值一次,之后不可修改。

3.1 成员变量(实例变量)

  • 必须初始化:可在声明时、构造方法或初始化块中赋值。
  • 线程安全:正确初始化的final变量可安全发布到其他线程(JMM保证)。
  • 示例
    class MyClass {
        final int value;
        
        MyClass(int value) {
            this.value = value; // 必须在构造方法中初始化
        }
    }
    

3.2 局部变量

  • 必须初始化:在声明时或后续代码中赋值一次。
  • 匿名内部类访问:在Java 8之前,匿名内部类只能访问final局部变量;Java 8+支持effectively final(实际不可变的变量)。
  • 示例
    void method() {
        final int localVar = 10;
        // localVar = 20; // 编译错误
    }
    

3.3 静态变量(类变量)

  • 必须初始化:在声明时或静态初始化块中赋值。
  • 常量定义:通常结合static final定义全局常量。
  • 示例
    class Constants {
        static final double PI = 3.14159;
    }
    

3.4 引用类型变量

  • 引用不可变:变量指向的对象不能改变,但对象内部状态可能可变。
  • 示例
    final StringBuilder sb = new StringBuilder("Hello");
    sb.append(" World"); // 合法,修改对象内容
    // sb = new StringBuilder(); // 编译错误:引用不可变
    

4. final修饰参数

  • 作用:方法参数被final修饰后,方法内不能修改其值。
  • 使用场景:防止参数被意外修改,提升代码可读性。
  • 示例
    void process(final int param) {
        // param = 5; // 编译错误
    }
    

5. final与性能

  • 内联优化:早期Java版本可能对final方法或变量进行内联优化,但现代JVM通常自动处理。
  • 代码清晰性final更多用于明确设计意图,而非强制优化。

6. 注意事项

  • 不可变对象 ≠ final变量final确保引用不变,但对象内容可能可变(如final List仍可增删元素)。
  • final类中的方法:隐式为final,无需显式声明。
  • 权衡使用:过度使用final可能导致代码僵化,需根据设计需求合理选择。

总结

final关键字通过限制类、方法和变量的可变性,增强代码的健壮性和可维护性。合理使用可明确设计意图,防止意外修改,适用于常量定义、不可变类设计、线程安全等场景。理解其在不同上下文中的作用,能更高效地编写可靠代码。

到此这篇关于java中final关键字详解及用法的文章就介绍到这了,更多相关java final关键字用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java八大经典书籍 你看过几本?

    java八大经典书籍 你看过几本?

    java八大经典书籍,你看过几本?本文为大家分享了java学习书单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Java实现在线五子棋对战游戏(人机对战)

    Java实现在线五子棋对战游戏(人机对战)

    这篇文章主要为大家详细介绍了如何利用Java语言实现在线五子棋对战游戏(人机对战),文中的实现步骤讲解详细,感兴趣的可以尝试一下
    2022-09-09
  • 详解Spring中@Component和@Configuration的区别

    详解Spring中@Component和@Configuration的区别

    一直有同学搞不清Spring中@Component和@Configuration这两个注解有什么区别,所以这篇文章小编就给大家简单介绍一下@Component和@Configuration的区别,需要的朋友可以参考下
    2023-07-07
  • Spring IoC容器的初始化过程

    Spring IoC容器的初始化过程

    Spring IoC容器初始化分两阶段:加载配置生成BeanDefinition,处理PostProcessor修改定义,注册PostProcessor增强初始化,实例化单例Bean并注入依赖,核心类包含BeanDefinition、BeanFactory、ApplicationContext,refresh()方法主导整个流程,实现依赖注入和AOP
    2025-08-08
  • springboot项目如何防止XSS攻击

    springboot项目如何防止XSS攻击

    XSS攻击全称跨站脚本攻击,是一种在web应用中的计算机安全漏洞,允许恶意web用户将代码植入到提供给其它用户使用的页面中。本文介绍防止XSS攻击的方法
    2021-06-06
  • Java实现定时备份文件

    Java实现定时备份文件

    这篇文章主要为大家详细介绍了Java实现定时备份文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 使用springMVC通过Filter实现防止xss注入

    使用springMVC通过Filter实现防止xss注入

    这篇文章主要介绍了使用springMVC通过Filter实现防止xss注入的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java多线程之深入理解ReentrantLock

    Java多线程之深入理解ReentrantLock

    这篇文章主要介绍了Java多线程之深入理解ReentrantLock,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • MybatisPlus特殊查询的实现介绍

    MybatisPlus特殊查询的实现介绍

    这篇文章主要介绍了MybatisPlus查询投影、聚合查询、分组查询、等值查询、范围查询、模糊查询、排序查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • java数据结构与算法之插入排序详解

    java数据结构与算法之插入排序详解

    这篇文章主要介绍了java数据结构与算法之插入排序,结合实例形式分析了java插入排序的概念、分类、原理、实现方法与相关注意事项,需要的朋友可以参考下
    2017-05-05

最新评论