JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

5分钟课堂:Java中final的用法 final cut pro官网下载

wys521 2024-10-30 05:55:43 精选教程 26 ℃ 0 评论

Java中final关键字可以修饰类、方法、属性、局部变量、方法参数。

在修饰类时,该类不允许被继承;

在修饰方法时,该方法继承后不允许被覆盖/重写;

在修饰属性时,创建对象是完成初始化,之后不允许修改。相当于是对象内的常量。

在修饰方法内的局部变量和方法参数时,局部只允许赋值一次,参数则是方法被调用时设置初始值,之后不能再修改值。相当于是方法内的常量

以下是Java中final关键字在不同应用场景下的具体实例,这些实例展示final关键字在Java中用于确保类不可继承、方法不可重写、变量(包括成员变量、局部变量和方法参数)不可重新赋值的不同应用场景。

1. 修饰类

在设计类时,如果考虑到未来不需要对类进行扩展或修改,将其声明为 final 。在这个例子中,final关键字用于修饰ImmutablePerson类,使得该类不可被其他类继承。

public final class ImmutablePerson {
    private final String name;
    private final int age;

    public ImmutablePerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

// 试图继承ImmutablePerson会编译错误
class MutablePerson extends ImmutablePerson { // 编译错误: 无法继承final类 'ImmutablePerson'
    // ...
}

在 JDK 中,有一些预定义的 final 类,这些类因为设计上的考虑或者出于安全原因,不允许被继承。以下是一些实际的 final 类:

  • java.lang.String:字符串在 Java 中是不可变的,因此 String 类是 final 的。
  • java.lang.Math:包含一系列静态数学方法的 final 类。
  • java.lang.System:提供了访问系统级操作的类,如环境变量和系统属性。
  • java.util.Arrays:包含各种操作数组的方法,如排序和搜索。

此外,所有的包装类(如 Integer、Boolean 等)也都是 final 的,这是为了保证它们的不可变性。

2. 修饰方法

public class Calculator {
    public final double calculateSquare(double num) {
        return Math.pow(num, 2);
    }
}

class AdvancedCalculator extends Calculator {
    // 下面的重写尝试会编译错误
    // @Override
    // public double calculateSquare(double num) {
    //     return num * num * num; // 实现立方计算
    // }
}

这里final修饰了Calculator类的calculateSquare方法,确保该方法在任何子类中都无法被重写。

3. 修饰属性(成员变量)

public class Constants {
    public static final String COMPANY_NAME = "北京交通大学";
    public final String employeeID;

    public Constants(String id) {
        this.employeeID = id;
    }
}
Constants c = new Constants("E001");
System.out.println(c.COMPANY_NAME); // 输出: 北京交通大学
System.out.println(c.employeeID); // 输出: E001

// 尝试修改final变量的值会引发编译错误
// c.COMPANY_NAME = "New Company"; // 编译错误: 对于最终变量 'COMPANY_NAME',不允许赋值
// c.employeeID = "E002";         // 编译错误: 对于最终变量 'employeeID',不允许赋值

final用于修饰类Constants中的静态成员变量COMPANY_NAME和实例变量employeeID,使得它们一旦初始化后就不能再被改变。

4. 修饰变量(局部变量)

public class Example {
    public void processData(int[] values) {
        final int size = values.length;
        for (int i = 0; i < size; i++) {
            // ... 处理数据
        }
    }
}

在方法processData中,final修饰局部变量size,表示在循环过程中其值始终保持不变,增强了代码的可读性和防止意外修改。

5. 修饰方法参数

public void printDetails(final Person person) {
    System.out.println(person.getName());
    // person = new Person("Different Name"); // 编译错误: 对于最终变量 'person',不允许赋值
}
printDetails(new Person("CHEN xd"));

在方法printDetails中,参数person被声明为final,这意味着在方法内部不能重新赋值给person新的Person对象。虽然不能改变引用本身,但可以通过方法调用来修改person对象的内部状态(如果对象的属性不是final的话)。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表