27-Java final 关键字

Java final 关键字

在本教程中,我们将通过示例学习Java final变量,final方法和final类。

在Java中,final关键字用于表示常量。它可以与变量,方法和类一起使用。

任何实体(变量,方法或类)一旦被声明final后,只能分配一次。也就是,

  • final变量不能用另一个值重新初始化

  • final方法不能被重写

  • final类不能被继承

1. Java final变量

在Java中,我们无法更改final变量的值。例如,

复制代码
class Main {
  public static void main(String[] args) {

    //创建一个final变量
    final int AGE = 32;

    //尝试更改final变量
    AGE = 45;
    System.out.println("Age: " + AGE);
  }
}

在上述程序中,我们创建了一个名为age的final变量。并且我们尝试更改final变量的值。

运行程序时,将出现以下错误消息,提示编译错误。

复制代码
cannot assign a value to final variable AGE
    AGE = 45;
    ^

注意:建议使用大写形式在Java中声明final变量。

2. Java final方法

在了解final方法和final类之前,请确保您了解Java继承。

在Java中,该final方法不能被子类覆盖。例如,

复制代码
class FinalDemo {
    //创建final方法
    public final void display() {
      System.out.println("这是Final方法。");
    }
}

class Main extends FinalDemo {
  //尝试重写final方法
  public final void display() {
    System.out.println("Final方法被覆盖。");
  }

  public static void main(String[] args) {
    Main obj = new Main();
    obj.display();
  }
}

在上面的示例中,我们创建了一个在FinalDemo类内部命名display()的final方法。在这里,Main类继承了FinalDemo类。

我们试图覆盖Main该类中的final方法。运行程序时,将出现以下错误消息,提示编译错误。

复制代码
 display() in Main cannot override display() in FinalDemo
  public final void display() {
                    ^
  overridden method is final

3. Java final类

在Java中,final类不能被另一个类继承。例如,

复制代码
final class FinalClass {
    //创建final方法
    public void display() {
      System.out.println("这是final方法。");
    }
}

class Main extends FinalClass {
  //尝试重写final方法
  public  void display() {
    System.out.println("重写final方法");
  }

  public static void main(String[] args) {
    Main obj = new Main();
    obj.display();
  }
}

在上面的示例中,我们创建了一个名为FinalClass的final类。在这里,我们试图通过Main类继承final类。

运行程序时,将出现以下错误消息,提示编译错误。

复制代码
cannot inherit from final FinalClass
class Main extends FinalClass {
                   ^

🎁 福利时间

如果你正在备战面试或者想要学习其他知识,给大家推荐一个宝藏知识库,作者整理了一些列 Java 程序员需要掌握的核心知识,有需要的自取不谢。

知识库地址:https://farerboy.com/


相关推荐
蹊黎3 小时前
C++中vector类的部分简单实现
开发语言·c++·visual studio
驭渊的小故事3 小时前
MyBatis XML 开发实战:从配置到 CRUD 全解析
xml·java·mybatis
哦虎!8 小时前
【JavaEE】网络初识
java
for_ever_love__8 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
程序猿追9 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓9 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播9 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
欣栀♡9 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室9 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项9 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs