18、final关键字
发布日期:2021-05-14 14:25:36 浏览次数:15 分类:精选文章

本文共 1291 字,大约阅读时间需要 4 分钟。

final关键字的作用与应用

final 表示最终的,不可变的。它的作用与目的在程序设计中起着重要的作用,尤其在保证系统稳定性和安全性方面。接下来,我们将从多个维度探讨final修饰符的应用。

final修饰的实例变量必须手动赋值不能采用系统默认值。这意味着在类初始化过程中,我们需要为final变量提供初始值。一旦完成赋值,实例变量的值将不可更改。这与static修饰结合使用时的行为非常相似,通常会一起使用。

final修饰的类无法被继承。这样做的目的是为了保障继承出现歧义或潜在的不一致性。类如果被修饰为final,就是一个封闭的类,无法被任何子类继承,从而减少了继承相关的复杂性。

final修饰的方法无法被覆盖。这意味着在编写类时,不能在subclass中重新定义由super类修饰的final方法。这种限制有助于保持类的行为一致性和稳定性,避免因方法重写而产生的潜在问题。

final修饰的变量一旦赋值无法被修改只能赋值一次。这种特性在多线程环境下尤为重要。同时,注意与static修饰的结合使用,因为它们通常一起使用,且共同赋予变量或常量一些特定的行为。

final修饰的引用允许我们的对象指向具体的实现类,但一旦初始引用完成后,该引用将无法再次指向其他对象。这意味着,使用final引用需要特别注意对象生命周期。例如,以下代码段在使用非final引用时不会有问题,但当使用final修饰引用时,必须严格维护对象引用情况。

需要注意的是,final修饰的引用不会阻止对象内部数据的修改。在JVM内部机制下,对象的内部状态仍然可以通过反射等方式进行修改。

代码示例:

// 正常情况 User u = new User(100); u = new User(200); // 上一个对象变成垃圾,会被GC回收

// final修饰的情况会导致错误 final User u = new User(100); u = new User(200); // 编译错误

关于变量初始化,可以采用以下方法:

public class FinalTest { final int age = 10; // 或者 final int age;

public FinalTest() {
this.age = 10; // 这里可以看到两种方式是一样的,都通过构造方法进行赋值
}

}

static final和final的结合使用,这种情况下形成常量。定义语法是:

public static final 类型 常量名 = 值;

这样的常量具有以下特点:

  • 存储在方法区内存中,与静态变量一样在类加载时初始化
  • 性质一般是public,因为它们通常用于跨类访问
  • 常量可以采用任意可见级别,但通常显式声明为public以增强可访问性

需要特别注意的是,对于形式参数来说,只能使用final修饰符,其他任何修饰符都会引起编译错误。这也符合Java的神奇之处,因为它强制要求参数的不变性,这样才能在方法调用时保证参数的一致性。

假设上述内容不够完整或者有任何不妥之处,请告诉我我会调整。

上一篇:19、package
下一篇:17、方法重写/方法覆盖

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年05月05日 15时08分56秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章