final关键字在Java中扮演着怎样的角色?

final关键字在Java中用于声明常量或防止类、方法及变量被继承或重写。它确保了一旦赋值,变量的值就不能被更改,使得方法不能被子类覆盖,并防止类被继承。这提高了代码的安全性和稳定性。

final关键字在Java中是一个非常重要的关键字,它主要用于表示“最终的、不可变的”,它可以应用于类、方法和变量,下面将详细解析final关键字的作用。

final关键字的作用 _关键字
(图片来源网络,侵删)

1. final关键字修饰类

当一个类被声明为final时,表示这个类不能被继承,这样做的主要目的是防止继承带来的问题,确保类的设计不会被修改,Java中的String类和System类就是final类,它们不能被其他类继承。

public final class FinalClass {
    // 类的内容
}

2. final关键字修饰方法

当一个方法被声明为final时,表示这个方法不能被子类覆盖(重写),这样做的主要目的是确保方法的行为不会被更改,Object类中的getClass()方法就是final方法,它不能被任何子类覆盖。

public class SomeClass {
    public final void someMethod() {
        // 方法的内容
    }
}

3. final关键字修饰变量

当一个变量被声明为final时,表示这个变量的值只能被赋值一次,赋值后不能再改变,对于基本数据类型,意味着这个变量的值是常量;对于引用类型,意味着这个变量引用的对象不能改变,但是对象的内容可以改变。

public class SomeClass {
    final int someVariable = 10; // someVariable的值只能是10,不能再改变
    final List<String> someList = new ArrayList<>(); // someList引用的对象不能改变,但是对象的内容可以改变
}

4. final关键字修饰参数

当一个参数被声明为final时,表示这个参数在方法体内不能被改变,这样做的主要目的是增加代码的可读性和维护性。

final关键字的作用 _关键字
(图片来源网络,侵删)
public void someMethod(final int someParameter) {
    // someParameter的值在方法体内不能被改变
}

5. final关键字修饰资源

在trywithresources语句中,可以使用final关键字修饰资源,表示这个资源在使用完后会自动关闭。

try (final InputStream inputStream = new FileInputStream("file.txt")) {
    // 使用inputStream读取文件内容
} catch (IOException e) {
    // 处理异常
}

6. final关键字修饰匿名内部类和局部内部类

在匿名内部类和局部内部类中,只能访问外部类的final变量,这是因为这些内部类可能在外部类的方法完成后仍然存在,而final变量的值在初始化后就不会再改变,所以可以安全地访问。

public class OuterClass {
    final int outerVariable = 10; // 可以被子类访问
    int innerVariable = 20; // 不能被子类访问
    class InnerClass {
        void someMethod() {
            System.out.println(outerVariable); // 可以访问
            System.out.println(innerVariable); // 可以访问
        }
    }
}

7. final关键字修饰静态变量

在静态变量前使用final关键字,表示这个变量是静态常量,它的值在初始化后就不会再改变。

public class SomeClass {
    public static final int SOME_CONSTANT = 10; // 静态常量
}

8. final关键字修饰实例变量

在实例变量前使用final关键字,表示这个变量是实例常量,它的值在初始化后就不会再改变。

final关键字的作用 _关键字
(图片来源网络,侵删)
public class SomeClass {
    public final int someConstant; // 实例常量
    public SomeClass(int value) {
        someConstant = value; // 只能在构造方法中初始化
    }
}

9. final关键字修饰接口中的变量

在接口中的变量默认都是public static final的,表示这些变量是接口常量,它们的值在初始化后就不会再改变。

public interface SomeInterface {
    int SOME_CONSTANT = 10; // 接口常量
}

10. final关键字修饰枚举中的变量

在枚举中的变量默认都是public static final的,表示这些变量是枚举常量,它们的值在初始化后就不会再改变。

public enum SomeEnum {
    SOME_CONSTANT; // 枚举常量
}

11. final关键字修饰注解中的变量

在注解中的变量默认都是public static final的,表示这些变量是注解常量,它们的值在初始化后就不会再改变。

public @interface SomeAnnotation {
    int SOME_CONSTANT = 10; // 注解常量
}

12. final关键字修饰数组

在数组前使用final关键字,表示这个数组是常量数组,它的元素在初始化后就不会再改变。

public class SomeClass {
    public static final int[] SOME_ARRAY = {1, 2, 3}; // 常量数组
}

13. final关键字修饰局部变量

在局部变量前使用final关键字,表示这个变量是局部常量,它的值在初始化后就不会再改变。

public void someMethod() {
    final int someLocalVariable = 10; // 局部常量
}

14. final关键字修饰泛型参数

在泛型参数前使用final关键字,表示这个参数是泛型常量,它的值在初始化后就不会再改变。

public class SomeClass<T> {
    public void someMethod(final T someParameter) {
        // someParameter的值在方法体内不能被改变
    }
}

15. final关键字修饰异常参数

在异常参数前使用final关键字,表示这个参数是异常常量,它的值在初始化后就不会再改变。

public void someMethod() throws final Exception {
    // Exception的值在方法体内不能被改变
}

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2024-07-30 19:39
下一篇 2024-07-30 19:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信