首页 > 其他分享 >final

final

时间:2024-09-09 22:47:49浏览次数:10  
标签:Fu show final 修饰 public 常量

用 final 修饰就表示不可以再被改变,已经是最终的了。

final 可以修饰方法、类和变量。

用 final 修饰方法就表示这个方法是最终的方法, 不能被子类重写。

用 final 修饰一个类,就表示这个类是最终的类,不能被继承。

用 final 修饰变量,则该变量应该被叫做常量,只能被赋值一次且在被使用之前必须被赋值。常量名的定义规范:单个单词组成时,所有字母大写。多个单词组成时,每个单词之间用下划线连接。如:XXX_YYY_ZZZ。

final 修饰方法

下面的代码是未使用 final 时的情况:

class Fu {
    public void show() {
        System.out.println("父类的show方法。");
    }
}

class Zi extends Fu {
    public void show() {
        System.out.println("子类的show方法。");
    }
}

添加 final 修饰方法时:

class Fu {
    public final void show() {
        System.out.println("父类的show方法。");
    }
}

class Zi extends Fu {
    public void show() {  // 报错,显示 'show()' cannot override 'show()' in 'demo.Fu'; overridden method is final
        System.out.println("子类的show方法。");
    }
}

如果一个方法是一个规则,我不希望别人去改变,那此时这个方法就可以用 final 去修饰。

final 修饰类

未使用 final 时的继承情况,此时程序正确:

class Fu {

}

class Zi extends Fu {
    
}

使用了 final 之后:

final class Fu {

}

class Zi extends Fu {  // 报错,显示 can not inherit from final Fu

}

String 类就是用 final 修饰的:

final 修饰常量

使用 final 修饰基本数据类型的变量的情况:

public static void main(String[] args) {
    final int a = 20;
    a = 10;  // 报错:cannot assign a value to final variable 'a'
}
public static void main(String[] args) {
    final int a;                // 不使用 a 时不对 a 进行赋值是不会报错的
    System.out.println(a);      // 报错:Variable 'a' might not have been initialized
}

再例如,下面这两个被 final 修饰的变量(其实应该叫常量)在 Math 类中:

public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;

实际开发中,常量一般都是作为系统的配置信息,方便维护,提高代码的可读性。

用 final 修饰的常量,如果是基本数据类型,那么存储的数据值是不能发生改变的。

用 final 修饰的常量,如果是引用数据类型,那么存储的地址值不能发生改变,但是对象内部的值可以改变。

程序示例:

public static void main(String[] args) {
    final Student S = new Student("zhangsan", 23);  // 用 final 修饰一个引用数据类型
    S.setAge(24);                 // 对象内部的值可以改变
    S.setName("lisi");            // 对象内部的值可以改变
    System.out.println(S.getAge() + ", " + S.getName());  // 24, lisi

    S = new Student();  // 报错:cannot assign a value to final variable 'S'
}

程序示例:

public static void main(String[] args) {
    final int[] ARR = {1, 2, 3, 4};  // 用 final 修饰一个引用数据类型
    ARR[0] = 20;                     // 对象内部的值可以改变
    ARR[1] = 10;                     // 对象内部的值可以改变
    for (int i = 0; i < ARR.length; i++) {
        System.out.print(ARR[i] + "    ");    // 20    10    3    4
    }
    ARR = new int[3];    // 报错:cannot assign a value to final variable 'ARR'
}

const 是 Java 保留的关犍字,但目前并没有使用。在 Java 中,必须使用 final 声明常量。

final 修饰的常量可以放在 switch 语句的 case 后面。

在 Java 中,可能经常需要创建一个常量以便在一个类的多个方法中使用。通常将这些常量称为类常量(class constant)。可以使用关键字 static final 设置一个类常量。类常量可以是公有或私有都行,要看具体程序的要求。

程序示例:

public class test {
    public static final int a = 10;     // 声明了一个公有的类常量,
    // 类常量要定义在所在类的所有的方法外面,包括 main 方法(如果是定义在一个含有 main 方法的测试类的话)
    // 这里的类常量是公有的,所以其他类也可以用这个常量。
}

标签:Fu,show,final,修饰,public,常量
From: https://www.cnblogs.com/Chengkai730/p/18405530

相关文章

  • java final关键字语法
    一、final类和方法英文文档原文:Java官方文档->WritingFinalClassesandMethodsYoucandeclaresomeorallofaclass'smethodsfinal.Youusethefinalkeywordinamethoddeclarationtoindicatethatthemethodcannotbeoverriddenbysubclasses.TheObje......
  • JOI23-24 Final
    A.RoomTemperature题目描述有\(N\)个人,每个人都有一个适宜温度\(A_i\)。现在有无限件外套,一个人每穿一件外套适宜温度就会减\(T\)。如果当前室温为\(x\),则一个人不适程度为\(|x-A_i|\)。求所有人的不适程度最大值的最小值。思路首先我们可以令\(A_i\leftarrowA_i......
  • 三、搭建网站服务器超详细步骤——FinalShell下载安装使用流程(免费国产的SSH工具)+宝塔
    前言本篇博客是搭建网站服务器模块下的第3部分  FinalShell下载安装使用流程  在分享这篇博客之前,首先讲一下,FinalShell软件是干什么用的,用大白话进行说明一下:这个软件是一款远程控制和管理服务器的软件,通过SSH协议与远程服务器进行连接,去操控一系列的命令信息。就像......
  • 章10——面向对象编程(高级部分)——final关键字
    基本介绍注意事项final修饰不同东西属性:相当于常量,需要赋初值(构造器(除static)、代码块、定义时)。构造器不可以是静态的,因为构造器中隐含了super和this。类:不可继承。方法:不可重写,但可继承。因为不可以重写的特质不可以修饰构造方法。final和static搭配效率高是因为:不会导......
  • fcpx视频剪辑:Final Cut Pro for Mac 中文版软件下载
     FinalCutPro是许多专业视频编辑和电影制作人的首选工具,它提供了一套完整的视频后期制作解决方案,从剪辑、调色、音频编辑到最终的输出和分享。随着不断的更新和改进,FinalCutPro始终保持在视频编辑软件领域的领先地位。软件特点高效的性能:FinalCutPro利用Mac的......
  • THE UNIVERSITY OF MANCHESTER-NUMERICAL ANALYSIS 2Final Exam2021
    2.(a)BrieydescribehoworthogonalpolynomialscanbeusedtofindthenodesofGaussianquadra-turerulesforaweightedintegral∫a......
  • fcpx视频剪辑:Final Cut Pro for Mac 中文版软件下载
    FinalCutPro是许多专业视频编辑和电影制作人的首选工具,它提供了一套完整的视频后期制作解决方案,从剪辑、调色、音频编辑到最终的输出和分享。随着不断的更新和改进,FinalCutPro始终保持在视频编辑软件领域的领先地位。软件特点高效的性能:FinalCutPro利用Mac的硬......
  • F. Final Boss(二分,周期)
    题目来源:https://codeforces.com/contest/1985/problem/F//题意:你有n种攻击,每种攻击有周期和攻击力,如果当前回合是x,以为着第i种攻击,下次攻击是x+ci回合。现在有Boss,生命值为h,当h<=0的时候,Boss死亡。一开始所有攻击都没有冷却时间,问最少第几回合Boss死亡。//思路:“最开始无脑模......
  • C#中的try catch finally(链接)
    下面这篇微软的官方文档,详细讲述了C#中如何使用trycatchfinally来处理异常:Exception-handlingstatements-throw,try-catch,try-finally,andtry-catch-finally其中这个地方有说到,不管是在try代码块中发生了异常,还是在catch代码块中发生了异常,finally代码块的代码都会执......
  • AT_ddcc2017_final_d なめらかな木 题解
    首先考虑暴力DP,设\(f(i,v_1,v_2,now)\)为已经将前\(i\)个数填入,\(i\)填在\(v_1\),\(j\)填在\(v_2\)点,已经填完点的状态是\(now\)(状压一下存在一个longlong里)的方案数。转移时直接枚举下一个点暴力转移,只需要保证新的点没有被访问过,并且填上新点后,\(v_1\)的所有邻接......