final关键字-Java

news2025/1/23 4:56:41

final关键字

  • 一、使用场景
    • 1、当不希望类被继承时,可以用final修饰。
    • 2、当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final修饰。
    • 3、当不希望类的的某个属性的值被修改,可以用final修饰。
    • 4、当不希望某个局部变量被修改,可以用final修饰。
  • 二、使用注意事项
  • 三、练习
    • 练习1 圆的面积
    • 练习2 判断正误

一、使用场景

final可以修饰类、属性、方法和局部变量。
在某些情况下,程序员可能有以下需求,就会使用到final:

1、当不希望类被继承时,可以用final修饰。

【案例演示】
在这里插入图片描述

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

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

访问修饰符  final  返回类型  方法名

【案例演示】
在这里插入图片描述

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

当不希望类的的某个属性的值被修改,可以用final修饰。
【案例演示:public final double TAX_RATE=0.08】
在这里插入图片描述

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

当不希望某个局部变量被修改,可以用final修饰。
此时该变量也被称作局部常量。
【案例演示】
在这里插入图片描述

二、使用注意事项

  1. final 修饰的属性又叫常量,一般用XX_XX_XX(大写)来命名。

  2. final 修饰的属性在定义时,必须赋初值,并且以后不能再修改,赋值可以在如下位置之一【选择一个位置赋初值即可)】:
    ① 定义时:如public final double TAX_RATE=0.08;
    ② 在构造器中。
    ③ 在代码块中。

  3. 如果final修饰的属性是静态的,则初始化的位置只能是:
    ①定义时
    ②在静态代码块
    不能在构造器中赋值。 因为静态成员(变量&方法),需要在类加载后就能使用,构造器生效是在new那一步了。

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

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

  6. 一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法。

  7. final不能修饰构造方法(即构造器)
    因为构造器不是通过继承得到的,没必要声明为final。

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

  9. 包装类(Integer,Double,Float,Boolean等都是final),String也是final类。都不可以被继承。

【案例】
2 - final 修饰属性,赋初值位置:

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

3 - final修饰静态属性:

class BB {
//    如果final修饰的属性是静态的,则初始化的位置只能是:
//    ①定义时
    final static public double TAX_RATE = 0.08;
//    ②在静态代码块
    final static public double TAX_RATE2;
    static {
        TAX_RATE2 = 0.09;
    }
}

7 - final和static搭配使用
使用一下BBB类中的num,但不要加载类

//【main】
System.out.println();

class BBB {
    public final static int num = 100;
    static {
        System.out.println("BBB的静态代码块执行");
    }
}

在这里插入图片描述
静态代码块中的 println 没有输出,证明没有类加载(因为类加载一定伴随着静态代码块 & 静态变量初始化)。

三、练习

练习1 圆的面积

Circle circle = new Circle(2);
System.out.println(circle.getArea());

class Circle {
    private double radius;
    private final double PI = 3.14;

    public Circle(double radius) {
        this.radius = radius;
    }

    public double getArea() {
        return PI*this.radius*this.radius;
    }
}

练习2 判断正误

public class Something { 
	public int addOne(final int x) {
		++x;
		return x + 1;
	}
}

有误,因为 final 修饰了变量x之后,就不可以再改变其值(++x)

① 形参可以这么写
② ++x错误:
③ x+1是正确的

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

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

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

相关文章

CSGO搬砖如何选品?选品软件和教程靠谱吗?

说到CSGO搬砖项目,目前平台最火的就是CSGO游戏搬砖。在CSGO搬砖项目中,选品是至关重要的环节,直接影响到利润。而选品软件可以帮助我们更快地了解市场变化、计算成本利润等关键信息,提高选品的效率和准确性。可靠的选品软件还能够…

技术人员都了解,动态代理IP和静态代理IP的区别及适用的场景

动态代理IP和静态代理IP是两种常见的代理IP技术,它们在网络通信中起到了重要的作用。虽然它们都可以用于隐蔽真实的IP地址,但在实际应用中有一些区别和适用的场景。本文将介绍这两种代理IP的区别以及它们适用于哪些场景。 一、静态代理IP 静态代理IP是指…

Java的threadd常用方法

常用API 给当前线程命名 主线程 package com.itheima.d2;public class ThreadTest1 {public static void main(String[] args) {Thread t1 new MyThread("子线程1");//t1.setName("子线程1");t1.start();System.out.println(t1.getName());//获得子线程…

eutil.dll文件缺失修复全指南,教你快速修复eutil.dll

eutil.dll缺失了要怎么办?eutil.dll是一种常见的动态链接库(DynamicLinkLibrary,DLL)文件,它在Windows操作系统中发挥着重要作用。DLL文件允许程序共享代码以执行诸如打印或连接网络之类的功能。这不仅节省了系统资源&…

浅谈API自动化测试

前言 本文主要针对API测试的概念及API测试在Choerodon中的实践展开。 API(应用程序编程接口)测试是一种软件测试,可以直接在API级别执行验证。它是集成测试的一部分,它确定API是否满足测试人员对功能,可靠性&#xf…

【第五节:微信小程序 小程序UI组件B】微信小程序入门,以思维导图的方式展开5

上图若是看不清,可私信给发大图哈 5、小程序UI组件B 表单form button 按钮 size String default 有效值 default, mini type String default 按钮的样式类型,有效值 primary, default, warn plain Bo…

[算法总结] - 蓄水池采样算法

问题描述 在长度为N的数组中,随机等概率选取K个元素,如何实现这个随机算法。 思路很简单,生成一个[0, N]的随机数index,然后返回index上的数值即可。 但是,如果输入是一个长度未知的数组比如stream,先遍历…

IDEA中Tomcat启动web项目

1.首先【Run】-->【Edit Configurations】,进入对应功能界面 2.点击左上角【】,选择Tomcat Server -->Local 3.Name输入自己中意的,下面两个port,保证没被占用就行 4.切到【Deployment】页签,点击【】&#xff…

elk日志分析系统:

elk日志分析系统: elk是一套完整的日志集中处理方案,由三个开源的软件简称组成; E:Easticsearch 简称ES是一个开源的,分布式的存储检索引擎,(索引型的非关系数据库)存储日志 由java代码开发的&#xff0…

【Java Spring】SpringBoot 五大类注解

文章目录 Spring Boot 注解简介1、五大类注解的作用2、五大类注解的关系3、通过注解获取对象4、获取Bean对象名规则解析 Spring Boot 注解简介 Spring Boot的核心就是注解。Spring Boot通过各种组合注解,极大地简化了Spring项目的搭建和开发。五大类注解是Spring B…

用泰勒展开线性化

在点附近做泰勒展开: 当和很接近的时候,很小,更小,所以可以忽略及后面的高阶项,得到 因为、都是常数,所以等式右边是 x的线性方程,在点附近进行了线性化。 举个例子: 假设 那么做一…

【Linux】安卓端JuiceSSH结合内网穿透实现远程连接服务器

目录 前言1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 前言 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? 本文介绍 cpolarJuiceSSH 实现手机端远程连接Linux虚拟…

linux 命令 sudo、su 命令

sudo命令详解 1、初识sudo sudo是linux下常用的允许普通用户使用超级用户权限的工具,sudo 用来执行需要提升权限(通常是作为 root 用户)的命令,允许系统管理员让普通用户执行一些或者全部的root命令,如halt&#xff…

C++中类的静态成员、存储、this、友元和运算符重载

静态成员 在类定义中,它的成员(包括成员变量和成员函数),这些成员可以用关键字static 声明为静态的,称为静态成员。 不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个…

搜索百度可以直接生成代码拉

先看效果图: 使用示例: 比如我要搜索“JS取一个数在两个数更近”的方法,直接搜“JS取一个数在两个数更近”,点击百度一下,就会出现想要的代码,如上图。

网站频频告警故障排查实录

故障描述 位于某Proxmox VE超融合集群上的一个网站频频报警,表现的形式是一会儿服务不可用,一会儿又恢复(如下图所示),但同一集群上的其他Web站点未发现异常。 可能的原因 1)出口带宽占满。 2)…

【技巧】Excel表格如何退出“只读方式”?

如果Excel表格被设置了“只读模式”,那每次打开Excel都会出现对话框提示是否以“只读方式”打开,并且以“只读方式”打开的Excel,如果进行更改是无法保存原文件的。那要如何退出“只读方式”呢? 首先,我们要看下Excel表…

【数据结构】顺序表---C语言版

【数据结构】顺序表 前言:一、线性表二、顺序表1.顺序表的概念及结构:2.顺序表的分类:3.顺序表缺陷: 三、顺序表的代码实现:1.头文件:2.函数文件:3.测试文件: 四、顺序表的相关OJ题&…

私域成交的方式---朋友圈成交

朋友圈不止是生活,也是工作营销的很好场所。朋友圈成交也就是私域成交中养客户成交。和之前的微商相似,微商就是在朋友圈发内容,引起客户的兴趣,再转到1对1私聊进行成交。 适合产品:所有的产品都适合,不管…

Python实现艺术设计?提取图片中颜色并绘制成可视化图表,从大师作品中提取配色方案

文章目录 导入模块并加载图片提取颜色并整合成表格绘制图表实战环节关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠…