zoukankan      html  css  js  c++  java
  • JAVA final关键字

    概念:final本意为"最终的、不可改变的",可以修饰类、成员方法以及成员变量。

    使用方式
    • final关键字修饰类体现在该类不能被继承。
      - 主要用于防止滥用继承,如:java.lang.String类等。
      如:

      public final class FinalClass {

      public final void show() {
      System.out.println("FinalClass类中的show方法!");
      }

      }
      public class SubFinalClass extends FinalClass {} 运行提示:java: 无法从最终src.FinalClass进行继承
    • final关键字修饰成员方法体现在该方法不能被重写但可以被继承。
      - 主要用于防止不经意间造成重写,如:java.text.Dateformat类中format方法等。
      如:
      public class FinalClass {

      public final void show() {
      System.out.println("FinalClass类中的show方法!");
      }
      }
      public class SubFinalClass extends FinalClass {

      @Override
      public void show() {
      super.show();
      }} //SubFinalClass 继承了FinalClass,重写了show方法,运行提示:SubFinalClass中的show()无法覆盖src.FinalClass中的show() 被覆盖的方法为final    
    public class SubFinalClass extends FinalClass {

    public static void main(String[] args) {
    SubFinalClass sfc = new SubFinalClass();
    sfc.show();
    }
    } //SubFinalClass 继承了FinalClass的show方法,运行正常
    • final关键字修饰成员变量体现在该变量必须初始化且不能改变。
      - 主要用于防止不经意间造成改变,如:java.lang.Thread类中MAX_PRIORITY等。

    code:

    public class FinalMemberTest {
    private final int cnt; // 显式初始化
    public static void main(String[] args) {

    // 声明FinalMemberTest类型的引用指向该类的对象
    FinalMemberTest fmt = new FinalMemberTest();
    // 打印成员变量的数值
    System.out.println("fmt.cnt = " + fmt.cnt);
    }
    } //运行提示:java: 变量 cnt 未在默认构造器中初始化,被final修饰的变量必须初始化,改成private final int cnt==1即可正常运行,或者在构造块或构造方法中赋值,如:
    public class FinalMemberTest {

    private final int cnt;

    {
    cnt = 2; // 构造块中进行初始化
    }

    public static void main(String[] args) {

    // 声明FinalMemberTest类型的引用指向该类的对象
    FinalMemberTest fmt = new FinalMemberTest();
    // 打印成员变量的数值
    System.out.println("fmt.cnt = " + fmt.cnt);
    }
    }
    --------------------------构造方法中初始化-------------------------
    public class FinalMemberTest {
    private final int cnt;

    public FinalMemberTest() {
    cnt = 3; // 构造方法体中进行初始化
    }

    public static void main(String[] args) {

    // 声明FinalMemberTest类型的引用指向该类的对象
    FinalMemberTest fmt = new FinalMemberTest();
    // 打印成员变量的数值
    System.out.println("fmt.cnt = " + fmt.cnt);
    }
    } 

    ---------------------------------初始化后不能进行修改,修改报错,如下code------------------------ 

    public class FinalMemberTest {
    private final int cnt=1;

    public FinalMemberTest() {
    cnt = 3; // 构造方法体中进行初始化
    }

    public static void main(String[] args) {

    // 声明FinalMemberTest类型的引用指向该类的对象
    FinalMemberTest fmt = new FinalMemberTest();
    // 打印成员变量的数值
    System.out.println("fmt.cnt = " + fmt.cnt);
    }
    } //报错信息:java: 无法为最终变量cnt分配值,原因:因为初始化赋值1,构造方法为3
    常量的概念

    • 在以后的开发中很少单独使用final关键字来修饰成员变量,通常使用 public static final关键字共同修饰成员变量来表达常量的含义,常量的命 名规范要求是所有字母都要大写,不同的单词之间采用下划线连。

    • public static final double PI = 3.14;

  • 相关阅读:
    安装最新版Mysql(APT方式安装)
    Tengine环境安装
    Docker 教程
    Docker Redis
    Ubuntu
    spring boot actuator 如何显示详细信息
    spring boot 加载日志框架后经常出现 LOG_PATH_IS_UNDEFINED 目录怎么办?【未解决】
    Tomcat 目录结构以及基本配置
    Java Hash集合的equals()与hashCode() 方法
    Java Map 集合实现类
  • 原文地址:https://www.cnblogs.com/goldenwangyi/p/15072032.html
Copyright © 2011-2022 走看看