【JAVA学习笔记】39 - final关键字

news2024/10/2 14:25:47

项目代码

https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/final_

一、final关键字基本介绍

final可以修饰类、属性、方法和局部变量,
在某些情况下,程序员可能有以下需求,就会使用到final
1)当不希望类被继承时,可以用final修饰


2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰


3)当不希望类的的某个属性的值被修改,可以用final修饰.


4)当不希望某个局部变量被修改,可以使用final修饰 

public class Final01 {
    public static void main(String[] args) {
        E e = new E();
        // e.TAX_RATE = 0.09;
    }
}
final class A{

}
// class B extends A{} 1)当不希望类被继承时,可以用final修饰.
class C{
    // public final void hi(){ //2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰
    //     System.out.println("C类的hi方法");
    // }
}
class D extends C{
    public void hi(){
        System.out.println("重写了子类的hi方法");
    }
}
class E{
    public final double TAX_RATE = 0.08;
}
class F{
    public void cry(){
        final double NUM = 0.01;
        // NUM = 0.9;
        System.out.println(NUM);
    }
}

 二、final关键字使用注意事项和细节讨论


1.final修饰的居性又叫常量,一般用XX_XX_XX_X来命名

2.final修饰的属性在定义时必须赋初值并且以后不能再修改,赋值可以在如下位置之一

        ①定义时:如public final double TAX RATE=0.08;

        ②在构造器中

        ③代码块中。

class AA{
    public final double TAX_RATE1 = 0.08;
    public final double TAX_RATE2;
    public final double TAX_RATE3;
    //①定义时:如public final double TAX RATE=0.08;
    // 
    //②在构造器中
    // 
    //③代码块中。
    public AA(){
        TAX_RATE2 = 1.1;
    }
    {
        TAX_RATE3 = 10.0;
    }
}


3.如果final修饰的属性是静态的,则初始化的位置只能是

①定义时        ②在静态代码块        不能在构造器中赋值。

4.final类不能继承,但是可以实例化对象。

5.如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承。

public class FinalDetail01 {
    public static void main(String[] args) {
        new AA();
        new EE().cal();
    }
}
class DD{
    public final void cal(){
        System.out.println("cal()方法");
    }
}
class EE extends DD{

}

5.一般来说,如果类已经是final类了,就不需要再将方法修饰成final

6.final不能修饰构造器方法(构造器)

7.final和static往往搭配使用,效率更高,不会导致类加载底层编译器做了优化处理。

public class FinalDetail02 {
    public static void main(String[] args) {
        System.out.println(BBB.num);
    }
}
class BBB{
    public final static int num = 10000;//去掉final会执行BBB代码块初始化
    //final和static往往搭配使用,效率更高,不会导致类加载底层编译器做了优化处理。
    static {
        System.out.println("BBB代码块被执行");
    }
}

8.包装类(Integer, Double,Float, Boolean等都是fina),String也是final类.

三、final关键字的练习

1.

请编写一个程序,能够计算圆形的面积。要求圆周率为3.14.赋值的位置3个方式都写一下.

public class FinalExercise01 {
    public static void main(String[] args) {
        Cirle cirle = new Cirle(6);
        System.out.println(cirle.cal());
    }
}
class Cirle{
    private double radius;
    private final double PI = 3.14;
    public Cirle(double radius) {
        this.radius = radius;
    }
    public double cal(){
        return radius * radius * PI;
    }
}

其实正常来说应该做成静态方法,不创建对象也能计算,但考虑到可能要保存实例的属性,用上面的也对

下面给个static的

public class FinalExercise01 {
    public static void main(String[] args) {
        System.out.println(Cirle.cal(6));
    }
}
class Cirle{
    private final static double PI = 3.14;
    public static double cal(double radius){
        return radius * radius * PI;
    }
}

2.

下面的那个对 return x + 1 是+符号 没有在改变x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1128740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C算法:米m 转化 英尺foot和英寸inch

需求: 已知1英尺等于12英寸,如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(footinch/12)*0.3048,现在,用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢? 输入样例: 1…

ITSource 分享 第4期【简洁的问卷调查系统】

项目介绍 本期给大家介绍一个 简洁的问卷的调查系统。 一 业务介绍 本系统分为以下几个模块: 1.登录注册 2.新建问卷 注册登录完成后,即可进入首页 可以创建问卷 目前只有单选,多选,简答三种问题类型,并且可以选择手动结束和自动结束模式。…

【强化学习】07——规划与学习(Dyna-Q)

文章目录 前置知识回顾策略值函数估计(Policy Evaluation)策略提升(Policy Improvement) 模型(Model)规划(Planning)规划与学习(Planning and Learning)Dyna (集成规划、决策和学习)Dyna的框架D…

企业使用微信管理系统更安全更高效更智能

. 想快速处理纠纷,不知道员工和客户孰对孰错? 想提高客户满意度,不清楚客服沟通全过程? 想维护公司利益,不了解销售聊了哪些事? 想知道客户流失原因,不确定沟通话术是否专业? …

第56篇-某度旋转验证码v1分析-旋转验证码【2023-10-24】

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 一、网站分析 网址: aHR0cHM6Ly93YXBwYXNzLmJhaWR1Lm…

栈和队列相关的OJ题

1.栈的压入、弹出序列 题目链接 栈的压入、弹出序列_牛客题霸_牛客网 (nowcoder.com) 题目描述 题目给出两个序列,一个是入序列pushV,一个是出序列popV,要求判断是否匹配入栈出栈的规则顺序。 解题思路 可以用数据模拟入栈出栈&#xf…

基于樽海鞘群算法的无人机航迹规划-附代码

基于樽海鞘群算法的无人机航迹规划 文章目录 基于樽海鞘群算法的无人机航迹规划1.樽海鞘群搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用樽海鞘群算法来优化无人机航迹规划。 …

一文讲清楚检索增强生成(RAG)

文章目录 什么是检索增强生成?逆向工作:为大语言模型提供额外的知识来回答问题通过系统提示给出LLM自定义指令为LLM提供特定的知识来源将所有内容放在一起并提出问题检索步骤:从您的知识库中获取正确的信息什么是嵌入?它们与知识检…

【第四天]C++高级类和对象:运算符重载、string类和智能指针的深度解析

一、运算符重载 运算符重载 是对已有的运算符 指定新功能,不能创建新运算符。 运算符重载关键字operator 语法:operator (表示被重载的运算符) 思路: 1、弄懂 函数的参数中参数个数取决于运算符是一元还是二元…

如何高效地给视频批量添加logo水印?

如果你想给大量的视频添加图片水印,那么固乔剪辑助手软件是一个非常不错的选择。通过这个软件,你可以轻松地批量添加图片水印,提高视频的质量和识别度。以下是如何使用固乔剪辑助手软件给视频批量添加图片水印的步骤: 步骤1&#…

Qt+树莓派4B 窗口半透明效果实现

文章目录 前言一、窗口半透明,窗口部件不透明1、构造函数中的设置2、paintEvent3、效果4、树莓派4B配置5、最终效果 前言 在树莓派4B下,使用Qt开发窗口半透明而窗口部件不透明效果时,发现窗口没能正常实现半透明效果,而是显示纯黑色背景。同样的代码在wi…

PLC 学习day03 PLC软件安装 PLC软件的介绍和对应的知识

1.资料来源 链接:7.PLC编程学习入门视频教程全集-三菱GX-Works2编程软件安装_哔哩哔哩_bilibili 链接:8.三菱plc视频教程全集之编程语言及软元件介绍_哔哩哔哩_bilibili 2. PLC软件的安装 三菱的PLC软件安装视屏的链接: 7.PLC编程学习入门视频…

Gymnasium的基本用法

目录 1.初始化环境 2.与环境交互 3.动作和观测空间 4.修改环境 Gymnasium是一个为所有单智能体强化学习环境提供API的项目,包括常见环境的实现:cartpole、pendulum、mountain-car、mujoco、atari等。 该API包含四个关键功能:make、reset、step和render&#xf…

对称加密操作

#常用密码技术 ##1 密码 1.1 发送者、接收者和窃听者 请想象一个Alice向Bob发送电子邮件的场景。在这个场景中,发出邮件的Alice称为 发送者(sender),而收到邮件的Bob则称为 接收者(receiver)。 在讲解发送…

公司只有功能测试,如何进一步提升自己?

一定要帮助想上进却又迷茫的人。 最近也听到一些做功能测试的同学的交流,天天做手工测试,想提升一下自己又不知道如何提升?其实还是在于这些同学对自己没有一个清晰的定位,没有明确的目标。做为功能测试人员来讲,从发…

【OpenVINO】基于 OpenVINO Python API 部署 RT-DETR 模型

基于 OpenVINO Python API 部署 RT-DETR 模型 1. RT-DETR2. OpenVINO3. 环境配置3.1 模型下载环境3.2 模型部署环境 4. 模型下载与转换4.1 PaddlePaddle模型下载4.2 IR模型转换 5. Python代码实现5.1 模型推理流程实现 6. 预测结果展示7. 总结 RT-DETR是在DETR模型基础上进行改…

JS中面向对象的程序设计

面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。但在ECMAScript 中没有类的概念,因此它的对象也与基于类的语言中的对象有所不…

异常数据检测 | Python基于奇异谱分析时间序列插补预测

文章概述 在时间序列分析中,「奇异谱分析」(「SSA」)是一种非参数谱估计方法。它结合了经典时间序列分析、多元统计、多元几何、动力系统和信号处理的元素。 “奇异谱分析”这个名称涉及协方差矩阵的奇异值分解中的特征值谱,而不是直接涉及频域分解。 SSA 可以帮助分解时…

基于多元宇宙算法的无人机航迹规划-附代码

基于多元宇宙算法的无人机航迹规划 文章目录 基于多元宇宙算法的无人机航迹规划1.多元宇宙搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用多元宇宙算法来优化无人机航迹规划。 …

宝诗单证使用手册,并使用抽象和反射做通用抽象类,节省开发成本

单证示例 1024最适合写blog了,别说了,别说了,建议变成法定节假日。 宝诗单证的官网:宝诗官网 (宝诗团队记得给我打广告费) 宝诗单证的使用步骤 使用 抽象类 将获取字段的步骤抽象出来,极大的省略了代码量。节省开发…