final 在 java 中有什么作用?

final 在 java 中有什么作用?

修饰变量

  1. 修饰基本数据类型变量
  • 当用final修饰基本数据类型变量时,该变量就变成了常量 ,其值在初始化后不能被改变
java 复制代码
final int num = 10; 
// num = 20; // 这行代码会导致编译错误,因为 num 是 final 修饰的常量不能被重新赋值。
  1. 修饰引用类型变量
  • final修饰引用类型变量时,该引用不能再指向其他对象 ,但对象本身的内容是可以改变的
java 复制代码
final StringBuilder strBuilder = new StringBuilder("Hello"); 
// strBuilder = new StringBuilder("World"); // 这行代码会导致编译错误,不能让 strBuilder 指向其他对象。 
strBuilder.append(" World"); // 但是可以修改对象本身的内容。

修饰方法

  • 当一个方法被final修饰时,这个方法不能在子类中被重写
  • 确保该方法的行为在继承体系中是固定的,不会被意外修改
java 复制代码
class Base {
    final void someMethod() {
        System.out.println("This method cannot be overridden.");
    }
}

class Derived extends Base {
    // 不能重写 someMethod 方法,否则会编译错误。
}

修饰类

  • 用final修饰的类不能被继承
  • 该类的功能是固定的,不能被扩展
    • java.lang.String类就是final类,以确保字符串的核心行为不会被意外改变
java 复制代码
final class FinalClass {
    // 类中的方法和变量等。
}

// class SubClass extends FinalClass { // 这行代码会导致编译错误,因为 FinalClass 是 final 类不能被继承。

总结

  • final关键字在Java中用于创建不可变的类不可重写的方法 以及不可变的变量(常量)。
  • 使用final可以提供额外的安全性,确保某些重要的值或行为不会被意外或恶意地更改。
相关推荐
正义的大古3 分钟前
OpenLayers数据源集成 -- 章节八:天地图集成详解
开发语言·javascript·ecmascript·openlayers
AD钙奶-lalala5 分钟前
RabbitMQ的核心使用示例
java·rabbitmq·java-rabbitmq
心之伊始18 分钟前
Spring Cloud Gateway:构建智能API网关的终极指南
java·spring
a5876920 分钟前
Spring Cloud Gateway:下一代API网关的深度解析与实战指南
java·分布式·网关
华仔啊25 分钟前
依赖注入用@Autowired、@Resource还是构造器?3分钟搞清Spring官方到底推荐谁
java·后端
zhangfeng113326 分钟前
R geo 然后读取数据的时候 make.names(vnames, unique = TRUE): invalid multibyte string 9
开发语言·chrome·r语言·生物信息
Sally璐璐30 分钟前
Go组合式继承:灵活替代方案
开发语言·后端·golang
zzzsde30 分钟前
【c++】类和对象(4)
开发语言·c++
码熔burning32 分钟前
从 new 到 GC:一个Java对象的内存分配之旅
java·开发语言·jvm
Jooou32 分钟前
并发:如何设计线程安全的类
java·并发