首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >final 关键字的使用方法及应用场景解析

final 关键字的使用方法及应用场景解析

原创
作者头像
程序员老彭
发布2025-06-25 08:00:03
发布2025-06-25 08:00:03
1140
举报
文章被收录于专栏:Java开发Java开发

相关使用方法

1. final变量使用方法

基本数据类型常量使用:

代码语言:java
复制
final double PI = 3.14159;
// PI = 3.14;  // 编译错误,不能修改final变量

引用类型常量使用:

代码语言:java
复制
final List<String> NAMES = new ArrayList<>();
NAMES.add("Alice");  // 合法,修改对象内容
// NAMES = new ArrayList<>();  // 非法,不能修改引用
2. final方法使用方法

父类中定义final方法:

代码语言:java
复制
public class BaseClass {
    public final void printInfo() {
        System.out.println("This is a final method.");
    }
}

子类不能重写final方法:

代码语言:java
复制
public class SubClass extends BaseClass {
    // 以下代码会导致编译错误
    // @Override
    // public void printInfo() { ... }
}
3. final类使用方法

定义final类:

代码语言:java
复制
public final class UtilityClass {
    public static int add(int a, int b) {
        return a + b;
    }
}

不能继承final类:

代码语言:java
复制
// 编译错误:无法继承final类
// public class ExtendedUtility extends UtilityClass { ... }

组件封装方法

1. 常量类封装

将相关常量封装在一个final类中:

代码语言:java
复制
public final class AppConstants {
    private AppConstants() {
        // 私有构造函数,防止实例化
    }
    
    public static final int MAX_UPLOAD_SIZE = 1024 * 1024;
    public static final String DEFAULT_ENCODING = "UTF-8";
}

使用方式:

代码语言:java
复制
int size = AppConstants.MAX_UPLOAD_SIZE;
2. 工具类封装

将工具方法封装在final类中:

代码语言:java
复制
public final class StringUtils {
    private StringUtils() {
        // 私有构造函数
    }
    
    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }
    
    public static String capitalize(String str) {
        if (isEmpty(str)) return str;
        return Character.toUpperCase(str.charAt(0)) + str.substring(1);
    }
}

使用方式:

代码语言:java
复制
boolean empty = StringUtils.isEmpty("test");
String capitalized = StringUtils.capitalize("hello");
3. 不可变数据对象封装

创建不可变的数据传输对象:

代码语言:java
复制
public final class UserDTO {
    private final String username;
    private final int age;
    private final List<String> roles;

    public UserDTO(String username, int age, List<String> roles) {
        this.username = username;
        this.age = age;
        // 防御性复制,确保不可变性
        this.roles = new ArrayList<>(roles);
    }

    public String getUsername() {
        return username;
    }

    public int getAge() {
        return age;
    }

    public List<String> getRoles() {
        // 返回副本,防止外部修改
        return new ArrayList<>(roles);
    }
}

使用方式:

代码语言:java
复制
List<String> roles = Arrays.asList("admin", "user");
UserDTO user = new UserDTO("john", 30, roles);
// user.getRoles().add("guest");  // 不会影响内部列表
4. 防止子类修改核心逻辑

封装核心业务逻辑的final类:

代码语言:java
复制
public final class PaymentProcessor {
    private final TaxCalculator calculator;

    public PaymentProcessor(TaxCalculator calculator) {
        this.calculator = calculator;
    }

    public final double processPayment(double amount) {
        // 核心业务逻辑,不允许子类修改
        double tax = calculator.calculateTax(amount);
        return amount + tax;
    }
}

使用方式:

代码语言:java
复制
PaymentProcessor processor = new PaymentProcessor(new DefaultTaxCalculator());
double total = processor.processPayment(100.0);

Java,final 关键字,面向对象编程,关键字用法,变量修饰符,方法修饰符,类修饰符,不可变性,常量定义,继承限制,性能优化,编程规范,面试考点,Java 开发,代码安全性

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相关使用方法
    • 1. final变量使用方法
    • 2. final方法使用方法
    • 3. final类使用方法
  • 组件封装方法
    • 1. 常量类封装
    • 2. 工具类封装
    • 3. 不可变数据对象封装
    • 4. 防止子类修改核心逻辑
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档