final关键字-Java

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.mzph.cn/news/179716.shtml

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

相关文章

智能优化算法应用:基于花授粉算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于花授粉算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于花授粉算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.花授粉算法4.实验参数设定5.算法结果6.参考文献7.…

好用的json处理工具He3 JSON

官网地址:https://he3app.com/zh/ json格式化 https://portal.he3app.com/home/extension/json-to-pretty 其他 https://portal.he3app.com/home/category

芯能科技-603105 三季报分析(20231123)

芯能科技-603105 基本情况 公司名称:浙江芯能光伏科技股份有限公司 A股简称:芯能科技 成立日期:2008-07-09 上市日期:2018-07-09 所属行业:电气机械和器材制造业 周期性:1 主营业务:分布式光伏解…

每日一练:简易计算器

1. 题目 设计实现一个简易的计算器,可以进行加减乘除的计算。可以考虑通过GUI和命令行输入等方式实现。 2. 设计思路 创建一个简单的用户界面,可以使用 Python 的 Tkinter模块。在界面上放置按钮,每个按钮代表一个数字、运算符或其他功能。…

家政预约服务管理系统,轻松搭建专属家政小程序

家政预约服务管理系统,轻松搭建专属家政小程序app; 家政服务app开发架构包括: 1. 后台管理端:全面管理家政服务、门店、员工、阿姨信息、订单及优惠促销等数据,并进行统计分析。 2. 门店端:助力各门店及员工…

Linux命令中的符号

目录 1 管道符 | 1.1 | grep [要检索的东西] 1.2 echo | tee 2 重定向 2.1 输出重定向覆盖 > 2.2 输出重定向添加 >> 2.3 文件输入重定向 < 2.4 多行文本输入重定向 << 2.5 常用搭配 2.5.1 终端不显示 > /dev/null 1 管道符 | 我们…

使用.NET8中的.http文件和终结点资源管理器

本文将以.NET8的模板增加的.http文件为引&#xff0c;介绍 Visual Studio 2022 中的 .http 文件编辑器&#xff0c;这是一个用于测试 ASP.NET Core 项目的强大工具。 文章目录 1. 背景2. HTTP 文件介绍2.1 简介2.2 .http 文件语法3. 在 Visual Studio 中使用3.1 终结点资源管理…

基于Spring原生框架构建原生Spring的第一个程序!

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

04_Flutter自定义Slider滑块

04_Flutter自定义Slider滑块 一.Slider控件基本用法 Column(mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[Text("sliderValue: ${_sliderValue.toInt()}"),Slider(value: _sliderValue,min: 0,max: 100,divisions: 10,thumbColor: Colors.…

Nacos2.x配置中心源码分析

概述 源码注释参考 git 仓库&#xff0c;对应流程图后续补充&#xff1b; 启动 nacos nacos 启动类&#xff1a; // com.alibaba.nacos.NacosSpringBootApplication(scanBasePackages "com.alibaba.nacos") ServletComponentScan EnableScheduling public class…

MySQL事务(简单明了)

目录 1. 事务的特性&#xff08;ACID&#xff09;&#xff1a; 2. 事务的语法&#xff1a; 3. 隔离级别&#xff1a; 4. 保存点&#xff08;Savepoints&#xff09;&#xff1a; 5. 示例&#xff1a; 1. 事务的特性&#xff08;ACID&#xff09;&#xff1a; 原子性&#…

WebUI自动化学习(Selenium+Python+Pytest框架)003

1.元素操作 在成功定位到元素之后&#xff0c;我们需要对元素进行一些操作动作。常用的元素操作动作有&#xff1a; &#xff08;1&#xff09;send_keys() 键盘动作&#xff1a;向浏览器发送一个内容&#xff0c;通常用于输入框输入内容或向浏览器发送快捷键 &#xff08;2…

【数据结构】排序效率最优解之一:二叉树-堆

Hello everybody!今天打算给大家介绍一个功能比较强大的数据结构的基础&#xff0c;它不仅具有很高的应用价值而且排序效率很高。冒泡排序都知道叭&#xff0c;它的时间复杂度为O(n^2)&#xff0c;而堆排序的时间复杂度为O(n*logn)。堆排序直接碾压冒泡排序。在c语言阶段&#…

ELK高级搜索,深度详解ElasticStack技术栈-上篇

前言 1、黑马视频地址&#xff1a;java中级教程-ELK高级搜索&#xff0c;深度详解ElasticStack技术栈 2、本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 1. 课程简介 1.1 课程内容 ELK是包含但不限于Elasticsearch&#xff08;简称es&#xff09;、Lo…

小狐狸ChatGPT付费创作系统V2.3.4独立版 +WEB端+ H5端最新去弹窗授权

ChatGPT付费创作系统V2.3.4版本优化了很多细节&#xff0c;如果使用着2.2.9版本建议没升级的必要。该版本为编译版无开源&#xff0c;2.3.X版本开始官方植入了更多的后门和更隐性的弹窗代码&#xff0c;后门及弹窗处理起来更麻烦。特别针对后台弹窗网址、暗链后门网址全部进行了…

git rebase冲突说明(base\remote\local概念说明)

主线日志及修改 $ git log master -p commit 31213fad6150b9899c7e6b27b245aaa69d2fdcff (master) Author: Date: Tue Nov 28 10:19:53 2023 08004diff --git a/123.txt b/123.txt index 294d779..a712711 100644 --- a/123.txtb/123.txt-1,3 1,4 123 4^Mcommit a77b518156…

网络和Linux网络_6(应用层)HTTPS协议(加密解密+中间人攻击+证书)

目录 1. HTTPS协议介绍 1.1 加密解密和秘钥的概念 1. 2 为什么要加密 2. 对称加密和非对称加密 2.1 只使用对称加密 2.2 只使用非对称加密 2.3 双方都使用非对称加密 2.4 使用非对称加密对称加密 2.5 中间人攻击MITM 3. 证书的概念和HTTPS的通信方式 3.1 CA认证机构…

Redis 事件轮询

1 Redis 为什么快 数据存在内存中, 直接操作内存中的数据单线程处理业务请求避免了多线的上下文切换, 锁竞争等弊端使用 IO 多路复用支撑更高的网络请求使用事件驱动模型, 通过事件通知模式, 减少不必要的等待… 这些都是 Redis 快的原因。 但是这些到了代码层面是如何实现的呢…

基于SSM的论文管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

集合框架(二)LinkedList的常见使用

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍LinkedList的常见使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题可以在评论区留言 目…