浅谈JAVA中的final修饰符

Java中的public、private、static和final浅谈 public和private两个都是访问权限修饰符,用于控制外界对类内部成员的访问。static是控制类成员变化的修饰符之一。final也是控制类成员变化的修饰符。对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。声明为static的方法有以下几条限制:它们仅能调用其 阅读详情

final修饰符是JAVA中比较简单的一个修饰符,很多人通过书本就可以熟练掌握,但我学的时候,虽然感觉会用了,但是并不是十分理解这个修饰符,所以我找了相关资料,把我的个人理解分享给大家~~

 

final书本定义:

1.final可以修饰变量,被final修饰的变量被赋初值后,不能对它重新赋值

2.final可以修饰变量,被final修饰的方法被重写

3.final可以修饰类,被final修饰的类不能派生子类

总的来说,就是值不能改,方法不能重写,类不能继承,就相当于是终结版。。。。

 

一、final修饰的变量

  被final修饰的实例变量必须显示地赋初值,且只能以下三种方式:

  1、定义时初始化

  2、在非静态初始化块中为final实例变量指定初始值

  3、在构造器中指定初始值

  对于局部变量,则必须赋初值,且赋值后不能再改变~

  给个例子:

  

二、宏变量

  对于一个final变量,不管它时类变量、实例变量、还是局部变量,只要定义该变量时使用了final修饰,并在定义该final类变量时指定了初始值,而且该初始值可以在编译时被确定下来,那么这个final变量实质上已经不是变量,相当于一个恒量或者是直接量。

  

  那么,何为宏变量?顾名思义,我觉得,所谓宏变量,其实就是恒变量。当定义final变量时就为该变量指定了初始值,而且该初始值在编译时就已经确定下来,那么这个final变量本质上就是一个“宏变量”,编译器会把程序中所有用到该变量的地方直接替换成该变量的值。

  下面举一个经典例子,相信大家都遇到过:

  

  大家先看test测试单元,这是没有添加final修饰符的,那么测试结果为 true/false。str1是一个普通字符串,str2是两个字符串直接量进行连接,由于编译器可以在编译阶段就确定s2的值”JAVAEE“,所以系统会让s2直接指向字符串池中缓存中的”JAVAEE"字符串,所以str1==str2,返回结果为true。而对于str5而言,它的值由str3和str4连接得到,但是不是由两个直接量连接,因此编译器不会执行“宏替换”,因此编译器无法在编译时确定str5的值,不会让str5指向字符串池中缓存中的“JAVAEE”,所以输出false.

  

  大家再来看test2测试单元,只要给str3和str4添加final修饰符,将其变成宏变量,则编译器就能确定str5的值,从而输出true.

  PS:对于final实例变量而言,如果要将其变为“宏变量",则必须在定义该变量时就赋初值,否则无效,下面给个例子:

    

 

三、final方法不能被重写

  

  上面程序Base类中,用final定义父类info方法,但是被final定义的方法是不能重写的,所以exe7中的info的方法并不是重写Base中的方法,只是子类中的一个普通方法,如果要检查子类中的方法是不是重写父类中的方法,可以给方法强制添加@Override注释,如果方法报错,则不是重写方法。

 

四、内部类中的局部变量

  注意:如果程序要在内部类中使用局部变量,那么这个局部变量必须使用final修饰!

  

 

 

专有钉钉小程序(浙政钉)开发搭建流程总览 最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑! 阅读详情

相关推荐

WordPress搭建“外贸独立站”完整操作教程

  以往的文章,我们介绍了很多种搭建独立站的方式,有最省事的Shopify 、最专业的Magento以及最省钱的Wordpress Woocommerce。其中,通过主机托管的方式又分了免费的谷歌云vps主机、1美元Godaddy主机以及SiteGround共享主机三种。建站方法方式实在太多了,有免费的,有廉价的,有商业版的,有共享主机、有云主机主机以及各种各样的vps服务器,选择哪种方式,哪款主机,也只有真正试了才直到。   没错,上述的这些方法方式,无一例外,我都亲身折腾过。从个人实际需求和建站方式来

www25qi的博客 8080

static和final能否修饰类,方法,属性

先描述static 不能修饰普通类,可以修饰内部类。 可以修饰方法。 可以修饰属性。 1-1:修饰内部类后内部类有什么特点? 答:可以直接创建对象,创建方式如下 1-2:如果内部类没有被继承如果创建对象? 答:必须先new一个外部类对象,然后在对象.new 外部类创建 代码如下: 2-1:被static修饰的方法被继承后还能被重写吗? 答:可以被重写,有一个要求,重写的方法修饰符的范围 需...

llltaotao的博客 6806

Trae IDE与Playwright MCP:5分钟实现零代码网页数据抓取

网页数据抓取是数据采集和自动化处理中的基础技术,其核心原理是通过程序模拟浏览器行为,定位并提取页面中的结构化信息。传统方式依赖编写脚本处理网络请求、解析HTML和应对反爬机制,技术门槛较高。而结合AI与自动化工具的新范式,通过自然语言交互即可完成复杂操作,极大降低了技术门槛并提升了开发效率。这种技术价值在于将开发者从繁琐的编码中解放,使其更专注于数据分析和业务逻辑。在数据监控、市场调研、竞品分析等应用场景中,快速获取网页数据是关键需求。本文以Trae IDE集成Playwright MCP为例,演示如何通过

culi3118的博客 498

final关键字

final关键字有以下特点 final修饰的类无法被继承 final修饰的方法无法被覆盖重写 public final void play(){//没法覆盖重写- System.out.println("被final修饰的方法没法覆盖重写"); System.out.println("我叫"+name+",今年"+age+"岁,性别"+se...

没有对象也没有new方法的大白 453

科研党必备:用MATLAB批量处理.mat文件数据的3种高效方法

本文为科研人员提供了使用MATLAB批量处理.mat文件数据的三种高效方法,涵盖智能数据加载、专业可视化与自动化报告生成。通过构建自动化框架、多维度数据画图策略及批量处理流程,帮助用户显著提升数据处理效率与图表专业性,解决海量实验数据的管理与分析难题。

weixin_29089057的博客 72

离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制

在进行深度学习算法的环境部署时,由于生产服务器被彻底隔离外网,只能把conda中env文件夹中的虚拟环境文件夹从开发机直接拷到Windows 服务器,但在运行labelimg等工具时可能报错,因此用conda-pack来解决。

weixin_44115575的博客 1427

Java学习

final关键字的学习

m0_67308235的博客 2556

Jetson编译安装pycuda

可使用nvcc --version查看是否有信息输出,若没有,且安装cuda的情况下,需要手动将CUDA 的路径添加到环境变量中。编译生成_pvt_struct.cpython-38-aarch64-linux-gnu.so文件。基于jetson orin nano jetpack512模块上安装pycuda。4、获取pycuda源码(版本根据实际情况获取)2、进入conda环境并安装cuda工具包。9、若未检测出来需要清除并强制编译。7、编译成功后安装pycuda。5、配置编译并设置环境变量。

qq_48175141的博客 972

java final修饰符_浅谈JAVA中的final修饰符

final修饰符是JAVA中比较简单的一个修饰符,很多人通过书本就可以熟练掌握,但我学的时候,虽然感觉会用了,但是并不是十分理解这个修饰符,所以我找了相关资料,把我的个人理解分享给大家~~final书本定义:1.final可以修饰变量,被final修饰的变量被赋初值后,不能对它重新赋值2.final可以修饰变量,被final修饰的方法被重写3.final可以修饰类,被final修饰的类不能派生子类...

weixin_31487521的博客 189

YOLOv11改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6

在卷积神经网络中,激活函数通过在神经网络中引入非线性,使网络能够学习和逼近复杂函数,从而处理复杂的模式识别与分类问题。

Limiiiing的博客 2792

Oracle EBS R12.2.X JSP部署、编译和配置相关操作。

系统环境 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 背景 在某项目上,需要开发JSP相关程序,比如单点登陆、打印二维条码。当前把JSP部署编译以后,访问提示错误:Requested resource or page is not allowed in this site, 通过查SR发现Oracle EBS R12.2.X版本对客制化JSP进行权限控限,需要设置某些配置文件。 实例操作步骤 上传JSP文件 通常上传到$OA_HTML目录或其子目

陈显平的专栏-Oracle EBS 1911

浅谈Java中的常见修饰符

在Java的面向对象中,我们会随时碰到修饰符,关于常见修饰符的了解和掌握是很有必要的。 在学完面向对象之后,可以知道Java中有权限修饰符、状态修饰符、抽象修饰符。下面就谈谈这几种修饰符。 权限修饰符 Java中有四种权限修饰符:public(公共的、公有的)、protected(受保护的)、缺省(默认)、private(私有的)。这四种权限修饰符的权限是依次减少的。 表格: ...

Adelagirl的博客 312

【已解决】飞牛nas(fnOS)异常断电导致硬盘未挂载(无法挂载),系统内部错误修复、救回数据全流程!(含更新系统后外接 NTFS 格式硬盘丢失的修复方法)

fnOS 飞牛NAS遭遇非正常断电后,存储空间显示「未挂载」或更新系统后外接 NTFS 格式硬盘丢失,点击挂载提示「系统内部错误」!💥 博主已经完美恢复,本文记录了相关的解决方案,帮您恢复或最大程度保住重要数据🎉

XiaoqiangClub的博客 2223

浅谈Java中的final关键字

https://www.cnblogs.com/xiaoxi/p/6392154.html

智障小鲁班 847

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java native 修饰符_浅谈Java中各种修饰符与访问修饰符的说明

JAVA中的类只能是public 或者package的。这是符合逻辑的:人们定义类的初衷就是为了让别人用的。倘若是private,别人怎么调用?但是有一个内部类可以被定义为private。严格上说,内部类,算不得上是一种光明正大的类,内部类在某种意义上是类这个王国里的特务和地下工作者。特务和地下工作者为王国起了不少作用,但是几乎从来不敢在公众场合抛投露面。就算要露面,也要在主人(class)的同意...

weixin_39658474的博客 166

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

从Java中的修饰符入手,浅谈类和继承的一些事儿

javascript中,成员(域和方法统称为成员)是没有访问限制的。而java中,无论是类还是成员都有一堆的修饰符去修饰它们,掐指一算,有 private、protected、public、static、final、abstract,一开始可能会理不清这些修饰符的含义和关系,特别是在涉及继承时,这些修饰符又会起到什么作用,今日得空稍作整理,并以此为出发点,再扯一扯java中面向对象的一些细节。

Public Static Void Main 855

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【浅谈】 包 ,权限修饰符,final,接口

【包】(package)是类的一种文件组织和管理方式,是一组功能相似或相关的类或接口的集合。 注意事项: 1、同包不同类调用的时候,不能分隔它的包名; package aaa.ccc; public class Test { /* * Test 和College不是同一个类 */ public static void main(String[] args) { aaa.bbb...

云卷云舒 168

浅谈java中final数据

引言在说说final之前,我们先了解下类被加载到内存中所需要的几个步骤,一个类被加载到内存中需要经过如下几个阶段: 编译: java文件必须编译成Class文件(也称为字节码文件)才可以被JVM识别,JVM并不关心Class的来源是什么语言,只要它符合一定的结构,就可以在Java中运行。 装载:查找和导入必要的Class文件,在Java虚拟机执行过程中,只有他需要一个类的时候,才会调用类加载器来加

1430

java中定义了几种访问修饰符_浅谈Java中各种修饰符与访问修饰符的说明

JAVA中的类只能是public 或者package的。这是符合逻辑的:人们定义类的初衷就是为了让别人用的。倘若是private,别人怎么调用?但是有一个内部类可以被定义为private。严格上说,内部类,算不得上是一种光明正大的类,内部类在某种意义上是类这个王国里的特务和地下工作者。特务和地下工作者为王国起了不少作用,但是几乎从来不敢在公众场合抛投露面。就算要露面,也要在主人(class)的同意...

weixin_35519039的博客 253

浅谈Java中的final,finally以及finalize

浅谈Java中的final,finally以及finalize 本文主要是为那些对Java中final,finally以及finalize不是很熟的学习者一个简单参考,本文章的主要参考书籍《Java编程思想》final模块 finally模块 finalize模块 final模块 根据上下文环境,Java的关键字final的含义存在着细微的差别,但它通常指的是“这是无法改变的”,原因无非是两

qq_24874985的博客 437

浅谈java中 final 的用法

**浅谈java中 final 的用法** final 是个关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,final的用法如下: 1. final 修饰在方法上,不能被重写 2. 语法: 权限修饰符 final 返回值类型 方法名 ...

weixin_43282557的博客 240

浅谈Java中的final的用法

浅谈Java中的final的用法 final是Java的一个关键字,可以用来修饰变量,类以及方法 1.final修饰变量 用final修饰的成员变量或者本地变量一般称为final变量,其·只能被赋值一次,不能中途改变。如果试图再次初始化被final修饰的变量,编译器就会报错。 2.final修饰方法 当方法被final修饰时,这个方法就不能再被子类的方法重写。好处是运行时final方法会比非final方法要快 3.final修饰类 用final修饰的类被称为final类。final类不能被继承 ...

qq_44021627的博客 152

java final关键字_“无法改变的设计”——浅谈Java中的final关键字

在Java中,final关键字可以用来修饰类、变量(包括成员变量和局部变量)、方法,下面从这三个方面分别说明。final方法当一个方法被final修饰时,表明这个方法不能被子类重写。下面程序试图重写final方法,将会引发编译错误。 public class Dinosaur { public final void test() { } } ​ public class Further exten...

weixin_39758956的博客 99

浅谈如何使用Java中的final和static

我先占个坑〇

hexiaozhe的博客 126
上一篇: Java基础之—反射(非常重要)
下一篇: 【Spring源码分析】Bean加载流程概览
Hack_Bug
博客等级 码龄15年 34粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值