4.2 final关键字

news2024/11/26 15:24:50

思维导图:

 4.2.1 final关键字修饰类


定义和基本概念: 在 Java 中,final关键字有“最终”或“不可改”的含义。使用final关键字修饰的元素(类、方法或变量)都有其特定的特性。


主要应用和注意事项:
  1. 修饰类:使用final修饰的类不能被继承。
  2. 修饰方法:使用final修饰的方法不能被子类重写。
  3. 修饰变量:使用final修饰的变量变成常量,且不可修改。

4.2.1 final关键字修饰类

在Java中,当一个类被final关键字修饰时,其他类不能继承此类,即不允许有子类。

示例

文件名:Example07.java

// 使用final关键字修饰Animal类
final class Animal {
    // 类的其他成员...
}

// Dog类尝试继承Animal类
class Dog extends Animal {
    // 这会导致编译错误
}

// 定义测试类
public class Example07 {
    public static void main(String[] args) {
        Dog dog = new Dog(); // 创建Dog类的对象
    }
}

在上面的代码中,Animal类被final关键字修饰,但Dog类试图继承它。这导致了编译错误:“无法从最终com.itheima.Animal进行继承”。

结论final关键字确保某个类不会被继承。这是对类的一个重要的保护机制,当你不希望某个类被其他类继承时可以使用它。


通过上述内容,我们可以清晰地了解到final关键字在Java编程中的作用和重要性。当你希望某个元素(类、方法或变量)不被修改或继承时,应当使用final关键字进行修饰。

 

4.2.2 final关键字修饰方法


定义和基本概念
在Java中,当方法被final关键字修饰,该方法将不可被子类重写。


示例说明:

文件名:Example08.java

// 定义Animal类
class Animal {
    // 使用final关键字修饰shout()方法
    public final void shout() {
        // 方法实现...
    }
}

// 定义Dog类,尝试继承Animal类
class Dog extends Animal {
    // 试图重写Animal类的shout()方法
    public void shout() {
        // 这会导致编译错误
    }
}

// 定义测试类
public class Example08 {
    public static void main(String[] args) {
        Dog dog = new Dog(); // 创建Dog类的对象
    }
}

在上述代码中,Animal类的shout()方法被final关键字修饰,但Dog类尝试重写这个方法。这导致了编译错误:“com.itheima.Dog中的shout()无法覆盖com.itheima.Animal中的shout(),被覆盖的方法为final”。


主要结论:
  • 使用final修饰的方法不可以被子类重写
  • 如果尝试这样做,编译器将报错。
  • 这是一种保护机制,确保方法的实现不会被更改,特别是当你认为方法的当前实现是最优或出于安全考虑不希望它被重写时。

总结:final关键字为Java开发者提供了一种方式,确保方法不会在子类中被更改或重写。当你想固定某个方法的行为并防止任何潜在的修改时,可以使用这个关键字。

 

4.2.3 final关键字修饰变量


定义和基本概念: 在Java中,当变量被final关键字修饰,该变量成为常量。常量只能被赋值一次,且赋值只能在声明时进行。在后续的程序中,常量的值不能被改变。


示例说明:

文件名:Example09.java

public class Example09 {
    public static void main(String[] args) {
        final int AGE = 18;  // 使用final关键字修饰的变量AGE被赋初值18
        AGE = 20;  // 尝试对常量AGE重新赋值,这会导致编译错误
    }
}

编译此代码,编译器会报错:“无法为最终变量AGE分配值”。这意味着尝试对final修饰的常量进行重新赋值是不允许的。


主要结论:
  1. 使用final修饰的变量为常量,仅可赋值一次
  2. 尝试重新为final修饰的变量赋值会导致编译时错误
  3. 常规约定:使用final声明的变量名称应全部使用大写字母
    • 例如:public static final String NAME = "哈士奇";
  4. 如果变量使用public static final进行声明,这个变量将被视为全局常量

总结:final关键字为Java开发者提供了一种方式,确保变量的值在其生命周期内不被修改。这在许多情况下都非常有用,例如你想定义一个不应该被改变的配置值或全局常量。

 总结:

4.2 final关键字总结


重点:

  1. 定义final是Java中的一个关键字,意为“最终的”,“不可更改的”。
  2. 应用场景
    • 修饰类:使类不可被继承。
    • 修饰方法:使方法不可被重写。
    • 修饰变量:使变量变成常量,只能被赋值一次。

难点:

  1. 理解和区分:对于新手,可能会混淆final修饰类、方法和变量的不同含义和效果。尤其是与其他修饰符如staticabstract等的结合使用时。
  2. 实际应用:确定何时使用final修饰类、方法或变量,需要对Java的继承和多态有深入理解。

易错点:

  1. 重复赋值:对final修饰的变量尝试赋值超过一次会导致编译错误。
  2. 误用继承:尝试继承被final修饰的类会导致编译错误。
  3. 重写错误:尝试重写被final修饰的方法也会导致编译错误。
  4. 命名规范final修饰的常量按照Java的命名习惯应该全部使用大写,可能会遗忘。
  5. 误解作用域:可能会误认为final关键字可以影响变量的作用域,而实际上它只影响变量的修改权限。

总之,final关键字在Java中提供了一种机制,确保某些内容(类、方法或变量)不会被修改。为了充分利用这个特性并避免相关错误,开发者需要对其有深入的理解。

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

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

相关文章

Spring - 手写模拟Spring底层原理

手写Spring 定义配置类AppConfig ComponentScan("com.spring.zsj") public class AppConfig {Beanpublic ApplicationListener applicationListener() {return new ApplicationListener() {Overridepublic void onApplicationEvent(ApplicationEvent event) {System…

yolov7模型轻量化改进之MobileOne骨干替换

本文在之前文章yolov7分割训练的基础上进行改进: https://blog.csdn.net/qq_41920323/article/details/129464115?spm=1001.2014.3001.5502 具体GitHub工程下载,环境安装配置,数据准备等,请借鉴之前的文章,此处只介绍如何进行改进。 MobileOne地址:https://github.com…

【算法|滑动窗口No.3】leetcode3. 无重复字符的最长子串

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

Nignx安装负载均衡动静分离以及Linux前端项目部署将域名映射到特定IP地址

目录 一、nginx简介 1.1 定义 1.2 背景 1.3 作用 二、nginx搭载负载均衡提供前后分离后台接口数据 2.1 nginx安装 2.1.1 下载依赖 2.1.2 下载并解压安装包 2.1.3 安装nginx 2.1.4 启动nginx服务 2.2 tomcat负载均衡 2.2.1 负载均衡所需服务器准备 2.2.2 配置修改 …

内网穿透入门

内网穿透 内网穿透(英文:Port Forwarding)是一种网络技术,用于将公共互联网(外网)的请求转发到私有局域网(内网)中的特定设备或服务。在许多情况下,设备或服务位于一个局…

负载均衡深度解析:算法、策略与Nginx实践

引言 如今,网站和应用服务面临着巨大的访问流量,如何高效、稳定地处理这些流量成为了一个亟待解决的问题。负载均衡技术因此应运而生,它通过将流量合理分配到多个服务器上,不仅优化了资源的利用率,还大大提升了系统的…

下载树莓派对应的64位Ubuntu系统步骤

说点废话:因为ros2需要安装在64位Ubuntu上面,所以安装64位最合适; 第一步打开https://cn.ubuntu.com/ 网站;选择下载--->iot----> 选择这个镜像文件下载。我觉得镜像文件是img格式的,跟iso文件区别是&#xff…

牛客网刷题-(9)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

VisualSVN initialization failed, For more details see Output window.

VisualSVN initialization failed, For more details see Output window. 通过输出窗口查看详细日志地址: 打开日志,发现报错信息为:Cannot get image ‘742477e2-c767-429f-b906-6c553b7cd1d1:12, 9x16’ from the image service. 原因&a…

Java17-20新特性

目录 一、Java17新特性 1、switch语法的变化(预览) 2、Sealed Classes 3、伪随机数的变化 4、去除了AOT和JIT 二、Java18新特性 1、默认使用UTF-8字符编码 2、简单的web服务器 3、将被移除的方法 4、snippet注解 三、Java19新特性 1、Virtual Threads(Preview)虚拟…

vue图书馆书目推荐数据分析与可视化-计算机毕业设计python-django-php

建立本图书馆书目推荐数据分析是为了通过系统对图书数据根据算法进行的分析好推荐,以方便用户对自己所需图书信息的查询,根据不同的算法机制推荐给不同用户不同的图书,用户便可以从系统中获得图书信息信息。 对用户相关数据进行分析&#xff…

Flutter 05 组件状态、生命周期、数据传递(共享)、Key

一、Android界面渲染流程UI树与FlutterUI树的设计思路对比 二、Widget组件生命周期详解 1、Widget组件生命周期 和其他的视图框架比如android的Activity一样,flutter中的视图Widget也存在生命周期,生命周期的回调函数体现在了State上面。组件State的生命…

python自动化测试(九):EcShop添加商品功能

前置条件: 本地部署:ECShop的版本是3.0.0、Google版本是 Google Chrome65.0.3325.162 (正式版本) (32 位) py的selenium版本是3.11.0 目录 一、前置代码 二、添加商品操作 2.1 点击添加商品 2.2 添加名称、分类、品牌 2…

Java基础知识梳理(万字解析)

目录 数据类型 变量和常量 变量的命名规范 局部变量 类变量 实例变量 常量 运算符 java程序流程控制 Scanner类简单用法 方法 数组 面向对象Object-Oriented Programming(OOP) 类 对象 封装 继承 extends 多态 抽象 abstract 接口 i…

CSS3弹性布局

2009年,W3C提出一种崭新的布局方案—弹性盒(Flexbox)布局,使用该模型可以轻松地创建自适应窗口的流动布局,或者自适应字体大小的弹性布局。W3C的弹性盒布局分为旧版本、新版本及混合过渡版本3种不同的设计方案,其中混合过渡版本主…

「专题速递」数据驱动赋能、赛事直播优化、RTC技术、低延时传输引擎、多媒体处理框架、GPU加速...

点击文末阅读原文, 免费报名【抖音背后的体验增长实战揭秘】专场 随着全行业视频化的演进,营销、知识、商业和空间的交互体验正在被重塑。这种变化不仅仅是一种抽象的趋势,更是关系到用户留存和业务增长的关键因素。面对这样的挑战&#xff0…

技术报告模板:2023年全国大学生电子设计竞赛:运动目标控制与自动追踪系统(E题)

2023年全国大学生电子设计竞赛 运动目标控制与自动追踪系统(E题) 2023年8月4日 摘要:针对本题目的各项要求,本研究采用软硬件结合的方法设计了一套运动目标控制与自动追踪系统。该系统由OpenMV嵌入式计算机视觉平台、STM32单片机控…

[PHP]pearProject协作系统 v2.8.14 前后端

pearProject是一款轻量级的在线项目/任务协作系统,远程办公协作。 概述 PearProject 不支持 IE8 及以下版本,建议使用基于Webkit内核的现代浏览器访问 PearProject 为前后端分离架构,因此安装分为后端和前端两大部分,需要分别进…

定时器PWM输出

目录 介绍 PWM占空比 框图 输出比较 通道 1 输出比较功能为例 PWM 输出模式 PWM 边沿对齐模式 hal库代码 标准库代码 介绍 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微 处理器的数字输出来对模…

Android启动优化-全文详细

一个应用App的启动速度能够影响用户的首次体验,通常用户期望app响应和加载速度越快越好。一个启动速度慢的app很可能会给用户留下不好的印象,除了导致用户在应用市场上的打分低之外,很有可能导致致用户直接卸载。这种糟糕的体验可能会导致用户…