高级java每日一道面试题-2024年7月8日

文章目录

  • 面试官问: final 在java中有什么作用
  • 面试者回答:
      • 1. final修饰变量
        • 基本数据类型:
          • 示例:
        • 对象引用:
          • 示例:
      • 2. final修饰方法
        • 示例:
      • 3. final修饰类
        • 示例:
      • 4. final局部变量和参数
        • 示例:
      • 总结

面试官问: final 在java中有什么作用

面试者回答:

在Java中,final 关键字是一个非常重要的修饰符,它用于指定某个变量的值一旦初始化之后就不能被改变(对于基本数据类型)或者某个对象的引用一旦指向某个对象之后就不能再指向其他对象(对于对象引用)。final 还可以用来修饰类和方法,但其在这些场景下的作用与修饰变量时有所不同。下面详细解释 final 在Java中的几种用途:

1. final修饰变量

基本数据类型:
  • final 修饰一个基本数据类型的变量时,这个变量的值一旦被初始化之后就不能被改变。
示例:
final int MAX_VALUE = 100;
// MAX_VALUE = 200; // 这行代码会编译错误,因为MAX_VALUE是final的
对象引用:

final 修饰一个对象引用时,这个引用一旦指向某个对象之后就不能再指向其他对象,但是该对象本身是可以被修改的(如果对象是可变的)。

示例:
final List<String> list = new ArrayList<>();
// list = new ArrayList<>(); // 这行代码会编译错误,因为list是final的
list.add("Hello"); // 这是允许的,因为list对象本身是可变的

2. final修饰方法

final 修饰一个方法时,这个方法不能在子类中被覆盖(重写)。这通常用于确保方法的行为在整个继承链中保持不变。

示例:
public class Parent {
    public final void show() {
        System.out.println("This is final method");
    }
}

public class Child extends Parent {
    // @Override // 这行代码会导致编译错误,因为show()在Parent类中是final的
    public void show() {
        System.out.println("This will not override show()");
    }
}

3. final修饰类

final用于修饰一个类时,这个类不能被继承。这通常用于防止类的继承,确保类的完整性和封装性。

示例:
public final class FinalClass {
    // 类实现
}

在这个例子中,FinalClass不能被其他类继承。

4. final局部变量和参数

在方法内部,final可以用于修饰局部变量和方法参数,这意味着这些变量的引用不能改变。但是,如果局部变量是对象类型,那么final只保证了引用不变,对象的内容仍然可以修改。

示例:
public void test(final List<Integer> list) {
    // list = new ArrayList<>(); // 错误,不能重新赋值
    list.add(10); // 正确,改变了list的内容而不是引用
}

在这个例子中,list的引用不能改变,但是可以改变list的内容。

总结

  • final 关键字在Java中用于指定某些内容是不可变的,包括变量的值、方法的覆盖以及类的继承。
  • 对于基本数据类型的变量,final 确保其值不变;对于对象引用,final 确保引用不变但对象本身的状态可以改变(如果对象是可变的)。
  • final 方法不能被覆盖,final 类不能被继承。
  • 使用 final 可以提高程序的稳定性和安全性,但也可能导致代码的灵活性降低。因此,在使用时需要权衡利弊。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高职计算机应用技术专业教学解决方案

前言 随着信息技术的飞速发展&#xff0c;计算机应用技术专业在高职教育中占据了举足轻重的地位。面对日益增长的行业需求和不断变化的教育环境&#xff0c;高职院校亟需探索创新的教学模式&#xff0c;以培养适应社会和经济发展的高素质技术技能型人才。唯众《高职计算机应用…

基于docker上安装elasticSearch7.12.1

部署elasticsearch 首先&#xff0c;先创建网络 # 创建网络 docker network create es-net拉取elasticSearch的镜像 #拉取镜像 docker pull elasticsearch:7.12.1创建挂载点目录 # 创建挂载点目录 mkdir -p /usr/local/es/data /usr/local/es/config /usr/local/es/plugin…

【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能

author: bbxwg system_version: Ubuntu 22.04 Time : 2024-07-04 目录 技术简单讲解&#xff1a; UDP (User Datagram Protocol) 链表 父子进程 信号 基于UDP的即时聊天室系统&#xff1a;客户端与服务器端实现 客户端操作步骤 服务器端操作步骤 系统版本&#xff…

怎么将视频翻译免费?这篇文章告诉你5个视频翻译的方法

在探索不同文化的经典影视剧时&#xff0c;我们常常被那些精彩绝伦的台词深深吸引。 然而&#xff0c;难以理解的外语符号让我们难以完全领略其魅力。不过&#xff0c;如果你认识免费视频翻译软件的话&#xff0c;那将这些经典台词从陌生的外语符号变成直观的母语表达&#xf…

藏汉翻译通工具推荐使用《藏文翻译词典》App:藏族文化的掌上宝典,帮助你了解学习藏语反义词近义词和藏文作文!

如果你正在学习藏语&#xff0c;遇到不同地区的发音不同时&#xff0c;卫藏语、安多语和康巴语&#xff0c;那么你需要一款好用的翻译和语音朗读工具&#xff0c;帮助你掌握藏语。 如果你正在用藏文写作文&#xff0c;发现一些词汇不会时&#xff0c;需要使用藏文词典&#xf…

从0到1构建渠道运营体系:实战案例与策略指南

引言 在当今竞争激烈的市场环境中&#xff0c;有效的渠道运营是企业实现产品或服务快速触达目标用户、提升市场份额的关键。从零开始构建一个高效的渠道运营体系&#xff0c;不仅需要深思熟虑的策略规划&#xff0c;还需要灵活应变的实战操作。本文将结合实战案例&#xff0c;…

C++ STL 多线程库用法介绍

目录 一&#xff1a;Atomic&#xff1a; 二&#xff1a;Thread 1. 创建线程 2. 小心移动(std::move)线程 3. 如何创建带参数的线程 4. 线程参数是引用类型时&#xff0c;要小心谨慎。 5. 获取线程ID 6. jthread 7. 如何在线程中使用中断 stop_token 三&#xff1a;如何…

大前端热点技术

前言 2018年后&#xff0c;整个大前端发展趋于稳定&#xff0c;各大主流框架的特性变少&#xff0c;各种新轮子也在逐渐变少&#xff0c;但在多端融合、上下游提效以及一些细分领域&#xff0c;还是有很多值得期待的。 本文将基于过去一年大前端方向在Web、Node、多端、IoT、…

vue学习笔记之组件传值

说起组件传值&#xff0c;首先要介绍再vue中什么是组件。 组件&#xff08;Component&#xff09;&#xff0c;是vue中很强大的一个功能&#xff0c;可以将一些可重用的代码进行重用。所有的vue组件同时也是vue实例&#xff0c;可以接受使用相同的选项对象和提供相同的生命周期…

[Unity入门01] Unity基本操作

参考的傅老师的教程学了一下Unity的基础操作&#xff1a; [傅老師/Unity教學] Unity3D基礎入門 [華梵大學] 遊戲引擎應用基礎(Unity版本) Class#01 移动&#xff1a;鼠标中键旋转&#xff1a;鼠标右键放大&#xff1a;鼠标滚轮飞行模式&#xff1a;右键WASDQEFocus模式&…

【机器学习】属性降维:揭示数据的简化之美

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 属性降维&#xff1a;揭示数据的简化之美引言什么是属性降维&#xff1f;为何降…

linux学习week2+3

linux学习 九.linux磁盘分区、挂载 3.磁盘情况查询 命令&#xff1a;df -h 注意&#xff1a;使用率到80%以上就要清理了 查询指定目录的磁盘占用情况&#xff1a;du -d 目录 其它参数&#xff1a; -s&#xff1a;指定目录占用大小汇总 -h&#xff1a;带计量单位 -a&#xff…

lora/lycoris

Stable Diffusion 训练指南 (LyCORIS) | Coding HuskyStable Diffusion 文字生成图片的教程已经很多了。这篇文章是讲解如何用 Kohya Trainer 在 Google Colab 上训练一个 LyCORIS 模型。在读之前希望你已经至少玩过 Stable Diffusion。https://ericfu.me/stable-diffusion-fin…

QFileSystemModel绑定到 QTreeView、 QListView、QTableView

QFileSystemModel绑定到 QTreeView、 QListView、QTableView&#xff0c;实现文件的查看 .h文件 #ifndef FILESYSEXAMPLE_H #define FILESYSEXAMPLE_H#include <QMainWindow> #include <QFileSystemModel>namespace Ui { class FileSysExample; }class FileSysExam…

Vuex的模块化编程

1.之前我们使用store引入的时候不够简介&#xff0c;store为我们封装了方法 mapState:从state中获取数据,以数组的方式返回 mapGetters:从getters中获取方法,以数组的方式返回 mapMutations:从mutations中获取操作,以数组的方式返回 mapActions:从actions中获取动作,以数组的方…

Hi3861 OpenHarmony嵌入式应用入门--MQTT

MQTT 是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输 协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用&#xff0c;是专为受限设备和低带宽、 高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器…

PFC电路中MOS管的选取2

上面这种驱动方式叫推挽驱动&#xff0c;或者图腾柱驱动 当芯片驱动脚 DRV为高电平时&#xff0c;此时回路中的源是芯片的 DRV引脚&#xff0c;芯片驱动电流从左往右流动&#xff0c;通过 R1&#xff0c;通过Q1的be脚&#xff0c;通过R3、R4给MOS管Q4的Cgs结电容充电 不过值得…

Mybatis-Plus一文详解BaseMapper和Service 使用

Mybatis-Plus简介 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性&#xff1a; 无侵入&#xff1a;只做增强不做…

idea 默认路径修改

1.查看 idea 的安装路径&#xff08;右键点击 idea 图标&#xff0c;查看路径 &#xff09; “C:\Program Files\JetBrains\IntelliJ IDEA 2021.3.1\bin\idea64.exe” 在 bin 目录查看 idea.properties 文件&#xff0c;修改以下四个路径文件 # idea.config.path${user.home}/…

Linux的前世今生

Unix的起源和发展 1969年&#xff0c;AT&T贝尔实验室的Ken Thompson和Dennis Ritchie等人开发了Unix操作系统。Unix的设计理念强调小而简洁的工具&#xff0c;文本流和系统模块化&#xff0c;这些理念后来成为Linux开发的重要基础。1973年&#xff0c;Unix用C语言重新编写…