java中被final修饰的属性是无法改变的?

Java中的final变量 final修饰变量 final修饰方法 final修饰类 final和String的关系 在开发的过程中,经常会使用String类来处理字符串相关的数据,但今天去看String源代码时,发现这个类是用final修饰的,于是,决定去探究inal关键字。final关键字可以修改类,方法和属性,但这个关键字的作用是什么?文章可以带你了解。... 阅读详情
System.out.println("Hello World!");

大家对这个输出语句都很熟悉。
out是System中的一个属性,并且是final修饰的

    /**
     * The "standard" output stream. This stream is already
     * open and ready to accept output data. Typically this stream
     * corresponds to display output or another output destination
     * specified by the host environment or user.
     * <p>
     * For simple stand-alone Java applications, a typical way to write
     * a line of output data is:
     * <blockquote><pre>
     *     System.out.println(data)
     * </pre></blockquote>
     * <p>
     * See the <code>println</code> methods in class <code>PrintStream</code>.
     *
     * @see     java.io.PrintStream#println()
     * @see     java.io.PrintStream#println(boolean)
     * @see     java.io.PrintStream#println(char)
     * @see     java.io.PrintStream#println(char[])
     * @see     java.io.PrintStream#println(double)
     * @see     java.io.PrintStream#println(float)
     * @see     java.io.PrintStream#println(int)
     * @see     java.io.PrintStream#println(long)
     * @see     java.io.PrintStream#println(java.lang.Object)
     * @see     java.io.PrintStream#println(java.lang.String)
     */
    public final static PrintStream out = null;

同时我还发现System中有这样一个修改器方法

 /**
     * Reassigns the "standard" output stream.
     *
     * <p>First, if there is a security manager, its <code>checkPermission</code>
     * method is called with a <code>RuntimePermission("setIO")</code> permission
     *  to see if it's ok to reassign the "standard" output stream.
     *
     * @param out the new standard output stream
     *
     * @throws SecurityException
     *        if a security manager exists and its
     *        <code>checkPermission</code> method doesn't allow
     *        reassigning of the standard output stream.
     *
     * @see SecurityManager#checkPermission
     * @see java.lang.RuntimePermission
     *
     * @since   JDK1.1
     */
    public static void setOut(PrintStream out) {
        checkIO();
        setOut0(out);
    }

这个方法的作用从源码的注释开就知道这是修改out属性输出流的一个方法,不是说final修饰的不可变吗?这里就要看看setOut0()这个方法了

private static native void setIn0(InputStream in);
private static native void setOut0(PrintStream out);
private static native void setErr0(PrintStream err);

可以发现不仅仅是 out,就连final修饰的in和err都是可修改的。
在看就会他们同样都被 native 修饰,大家知道native是java中的一个关键字,但是一般很难看到,使用native修饰符修饰的方法表示原生方法,它的实现可能就不是利用java来实现了,所以原生方法可以绕过java语言的访问控制机制。这是一个特殊解决方法。但是我们在编写程序时最好不要模仿这种做法。

综上:用final修饰的字段在java中是不可变的

激光雷达-IMU标定工具lidar_imu_calib保姆级教程(VLP-16实测) 本文提供激光雷达与IMU联合标定的详细实战教程,重点解析lidar_imu_calib工具在VLP-16上的应用。从环境部署、数据采集技巧到参数配置与结果验证,手把手指导完成标定全流程,并详解如何在LIO-SAM等SLAM系统中应用标定结果,确保传感器融合精度。 阅读详情

相关推荐

unity之——解决利用Jenkins在Windows环境下打包unity工程中的场景为apk包,打包打不出来的问题。并且介绍Jenkins从安装到环境配置,调用unity代码的过程(填坑)!!!!!

今天第一次接触Jenkins,比较头疼。网上的Jenkins配置环境相关的资料比较散乱,并且在Windows平台下相关的配置更是少之又少。我在这里讲一下从Jenkins安装到构建工程。打包unity工程的apk包的过程。 1.首先去Jenkins官网下载安装就不说了,安装完成之后在浏览器中输入http://localhost:8080(默认访问地址)进入Jenkins web界面。进行账号的注册...

cgy56191948的博客 2019

final关键字和不变性

什么是不变性(Immutable) 如果对象在被创建后,状态不能被修改,那么它就是不可变的。 对于不可变的对象(一个对象中所有的属性都被final修饰)是线程安全的,不需要采取额外的措施 fianl的作用 修饰类防止被继承 修饰方法防止被重写 修饰变量防止被修改 天生是线程安全而不需要额外的同步开销 final的3种用法 fianl修饰变量 被final修饰的变量,意味着值不能被修改,如果变量是对象那么对象的引用不能变但是自身的内容依然可以变化 赋值时机 如果初始化并不赋值,后续赋值,就

weixin_39477597的博客 441

VS2022 LNK1168无法打开进行写入 解决办法

C语言编程---VS---错误和警告---链接器工具错误---LNK1168--无法打开进行写入

weixin_67166415的博客 7154

使用final修饰属性,是引用不可变还是地址不可变

他大爷的,面试被问到,没答出来 先说结论:引用可变,地址不能变,内容可以改变,修饰基本数据类型值不能变

m0_67480772的博客 667

产业大脑+未来工厂:揭秘浙江数字经济系统的5大核心场景搭建指南

本文深入解析了“产业大脑+未来工厂”这一浙江数字经济系统的核心范式,并提供了五大核心场景的实战搭建指南。文章详细阐述了从供应链协同、产能共享到产品创新、质量追溯及绿色低碳等关键场景的构建逻辑与技术架构,旨在帮助企业实现从技术驱动到场景驱动的价值落地,破解数据孤岛难题,提升产业链整体效能。

mac99的博客 665

VINS-Mono 代码详细解读——IMU预积分的残差、Jacobian和协方差 processIMU()+intergrationBase类+imu_factor.h

IMU离散中值预积分 1.1、IMU模型 测量值:加速度计a^、陀螺仪w^, 加上了bias游走和随机白噪声。 真实值:加速度计a、陀螺仪w。 实际情况下,可以获得测量值a^和w^,需要反推真实值。一般忽略随机游走高斯噪声n w=w^-bg; a=qwb(a^-ba)-gw; 1.2、连续时间IMU运动模型,积分 PVQ(两帧之间) 将第k帧和第k+1帧所有的IMU进行积...

try_again_later的博客 9265

final关键字

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。 1.修饰类   当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

loonie51的专栏 782

自举电容的工作原理-3句话总结

1、一道面试题 照例,先抛出来一道面试题:“Buck电路的SW引脚通常会放置一颗小电容,这颗电容有什么用?”。这个问题问得比较细,非常考验被面试者的硬件基本功。 2、似懂非懂的答案 有小伙伴可能不太清楚这颗电容的作用,回答不上来。也有小伙伴脱口而出:自举电容,用来做升压的。但后面好像说不出来具体逻辑。 没具体了解过,答不上来,也没啥可惜的。但是了解过一点,但又似懂非懂的这种,给出的答案只是轻轻点水或者千篇一律,那无疑是错过了一个加分项。 3、异步Buck的自举环路组成 既然是针对Buck电路讲自举电容,前面

ltqdxl的博客 3万+

被final修饰的对象属性是否可以修改(转载)

其实看到这里,问题的答案已经很明显了。被final修饰的变量值是没有变的;被final修饰的model,存储的只是一个内存地址,setId只是通过引用地址找到model实例数据,修改了model对象的实例数据;而model存储的值(指向对象的指针)并没有变,疑惑解除~;版权声明:本文为优快云博主「狂奔的蜗牛已被占用」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

VIBE的博客 2331

手把手教程 | 使用 apktool 修改已发布 APK 的版本号与版本名称

摘要:本文介绍如何使用apktool工具直接修改APK版本信息,适用于版本回滚、多版本测试等场景。详细步骤包括反编译APK、修改版本号、重打包、对齐优化和重新签名,并分享了反编译相关实用知识。该方法无需源代码参与,但需注意修改后的APK必须重新签名才能安装。最后强调应在合法范围内使用反编译技术。

学无止境 825

利用人工神经网络在Abaqus中实现本构模型的网格粗化计算框架:详细指南与实践

在这篇文章中,我们详细介绍了如何在Abaqus中实现基于人工神经网络(ANN)的本构模型以进行网格粗化的计算框架。我们通过两个主要模块——数据生成器模块和ANN训练模块,实现了这一计算框架,并将训练好的ANN集成到Abaqus的用户材料子程序(UMAT)中,创建了一个基于ANN的本构模型。我希望这篇文章能帮助到那些希望在Abaqus中实现基于ANN的本构模型的读者,同时,我也非常欢迎大家提出宝贵的意见和建议,让我们共同进步。

qq_38334677的博客 1714

Java中final关键字的作用

final翻译过来是“最终的,无法改变的”的意思。

xiao___zhu的博客 1466

基于ENVI完成影像的去云操作以及后续处理

利用ENVI完成重采样影像的去云操作 由于SNAP重采样之后的影像是分波段保存的,ENVI的波段运算工具一次也只能输出一个波段,所以去云的操作分波段进行,原理是掩膜法 下面是打开所有波段后的界面 去云的依据是以quality_scene_classification栅格文件为基础,该文件是哨兵2数据自带的场景质量分类图,包含12个级别,可以通过SNAP软件查看,如下图所示: 对于去云操作而言,我们只需要DARK_FEATURE_SHADOW(地形等),CLOUD_SHADOW(云阴影)、CL

lemon_tttea的博客 2万+

java 三个修饰符 abstract、static、final

  abstract 修饰符。    被 abstract 修饰的类,称为抽象类。抽象类无法实例化,可以作为数据类型接收子类的实例,应用于多态。抽象类可以有构造方法。 public abstract class Animal { public Animal() { System.out.println("animal 构造."); } public void eat() { System.out.println("animal 吃"); } } public class Dog ext..

liu1shi的博客 193

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

final

final 可以用来修饰 类、变量(属性和局部变量)、方法,不能修饰构造器 final修饰类 特点:该类不能被继承,属于太监类 比如:String类就是final修饰的 final修饰方法 特点:该方法不能被重写,但能被继承 final修饰变量 用final修饰的变量一旦被赋值将不能更改,我们也把称为常量 final 类型 名 = 值; 常量的命名规范: 所有字母都大写,提高代码的阅读性 final修饰的引用类型变量,可以更改引用的属性值,不能更改地址号,也就是对象 ...

qq_36042938的博客 277

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

反射可以修改final类型

Java 编译器不会对所有的 final 属型进行内联优化,只有八种基本类型属性和 LiteralString(直接用引号包裹而不是new关键字实例化的字符串 如 String str="123") 会进行内联优化,对于引用类型不会则进行内联优化。此外,在运行期间才确定值的final属性也不会进行内联优化。Java 编译器对 final 属型的基本类型进行了内联优化,即编译时把该 final 属性的值直接放到了引用它的地方。即使是反射修改了该属性,但是引用它的地方放的并不是属性引用而是属性值,所以返回值并没

m0_71149992的博客 1790

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Final

Final修饰符 修饰变量 public class Final { public static void main(String[] args) { //第一种情况 //final修饰一个变量,变量的值不可以改变,这个变量也成了一个字符常量,名字大写 final int A = 10;//final修饰基本数据类型 //A = 20; 报错,不可以修改值 //第二种情况 final Dog d = n

weixin_51178047的博客 121

关于java语言中的final关键字

关于java语言中的final关键字 final

heliuerya的博客 510

java中final关键字

final修饰的引用变量不可改变是指该引用类型的内存地址不能改变,其属性和方法等资源改变不影响。如果final修饰的数据作为参数传递到方法里面的话,记住传递的只有值,跟修饰词无关。final修饰的变量叫做常量,一旦赋值不可改变。final修饰的方法不能被重写。final修饰的类不能被继承。

m0_56215275的博客 114

Final关键字

作用:最终的 (被Final修饰的类不能被继承,属性不能改变值,局部变量可被赋值一次方法不能被重写)

weixin_51779902的博客 119

Java final修饰符:final修饰属性、final修饰方法及final修饰类

final 关键字表示对象是最终形态的,对象是不可改变的意思。final 应用于类、方法和变量时意义是不同的,但本质是一样的:final 表示不可改变。 final 用在变量的前面表示变量的值不可以改变,此时该变量可以被称为常量;final 用在方法的前面表示方法不可以被重写;final 用在类的前面表示类不可以被继承,即该类是最终形态,如常见的 java.lang.String 类。 final...

jijiangpeng的博客 3152

Java中final和static修饰的变量是在什么时候赋值的?

开始一位朋友在群里问了这样一个问题:本着乐于助人的想法,我当时给出的回答:后来我总觉得哪里不对劲。于是我仔细翻阅了《Java虚拟机规范》和《深入理解Java虚拟机》关于这一部分的内容。害...

程序IT圈 5981

Java中Final修饰对象

众所周知,final是java的关键字,修饰符,用于声明属性(属性不可变)、方法(方法不可重写)和类(类不可继承),那么final可以修饰对象么,修饰对象又是代表着什么?

amuchena的博客 8159

JAVA中的final修饰符

文章目录前言1.final修饰变量1.1 final修饰成员变量1.2 final修饰局部变量1.1 final修饰基本类型和引用类型变量2.final修饰方法3.final修饰类 前言 李刚老师《JAVA疯狂讲义》第5版,第5章学习笔记。 JAVA中的final修饰符可以用来修饰变量、方法和类,用于表示被修饰的变量、方法和类不可变。 1.final修饰变量 final变量获得初始值后,就无法被重新赋值,当其修饰成员变量和实例变量时,有所不同。修饰基本类型变量和引用类型变量时也有所不同 1.1 final修

a647777的博客 4141

final修饰的类,其属性和方法默认是被final修饰的吗?

在论坛上,看到一个问题,当然,各位聪明的客官想必已经知道问题是什么了,嘿嘿,没错就是文章的标题:final修饰的类,其属性和方法默认是被final修饰的吗? 老实说,刚开始看到这个问题的时候,有点懵...(现场捕获懵比一只:),嘻嘻),之前学习的语法什么的,隔了太久忘记了。。。既然忘记了,就写个程序进行测试下吧 嘻嘻,以下是测试的程序:(小程序中用到了反射机制,还没学习到的客官,可以...

banheguo0461的博客 2361

java 反射处理final修饰符

我们指定java 使用final修饰符修饰的属性的值不能修改或其引用的地址不可修改,那么使用反射能否进行修改呢?答案是肯定的,但是却并没有那么简单. 笔者还想尝试为属性动态添加final 修饰符, 以实现类似只读变量,但是由于java对静态变量的编译机制问题,并不能实现. 1. 反射工具类 笔者开发一个简答的ReflectUtil, 实现为属性新增或删除final 修饰符 /** * 反射工具类...

Java 程序源 1931
上一篇: (设计原则)禁止编写返回可变对象引用的访问器方法
下一篇: Java是按值调用还是按引用调用的?
大锤997
博客等级 码龄6年 4粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值