final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。
引用本身的不变:
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误
引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //编译通过
可见,final只对引用的“值”(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至
于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的“值”相等,至于这个地址所指向的对象内容是否相等,==操
作符是不管的。
理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证那个对象的状态不变。在多线程的操作
中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它
声明为final,意图使得它“永远不变”。其实那是徒劳的。
分享到:
相关推荐
理解final关键字的定义、用途和作用范围。 掌握在Java程序中使用final关键字的基本技巧。 理解final关键字在构造方法、类、方法和变量等不同位置的应用。 了解final关键字的一些规则,如final变量的初始化、final...
带你深入理解Java中的final关键字_动力节点Java学院整理.
深入理解final关键字 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。 1.修饰类 当用final修饰...
final的使用简单简绍,更容易的理解final关键字的使用
主要介绍了Java中的final关键字深入理解的相关资料,需要的朋友可以参考下
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
1继承的概念 2继承的实现 3变量隐藏与方法覆盖 4super关键字 5 子类的构造顺序 6Object类 7 final关键字
值得注意的是:对于基本类型,使用final关键字将使数值恒定不变;而对于对象引用,final则是使引用恒定不变。一旦引用被初始化为指向一个对象时,它也无法再指向另外一个对象,然而该对象本身是可以被修改的。 ...
文章目录什么是不变性Final作用用法修饰变量修饰方法修饰类不变性和Final的关系?面试题推荐阅读:JVM类加载 什么是不变性 如果对象在被创建后,状态就不能被修改,那么它就是不可变的。 具有不可变的对象一定是线程...
本文主要给大家谈谈小编对java关键字final和static的理解,本文给大家介绍的较详细,需要的朋友参考参考下
final 是 Java 中的关键字,它也是 Java 中很重要的一个关键字,final 修饰的类、方法、变量有不同的含义;finally 也是一个关键字,不过我们可以使用 finally 和其他关键字结合做一些组合操作; finalize 是一个不...
12. final关键字 12.1修饰类 12.2修饰变量 12.3修饰方法 五、多态 1.理解 2.案例 3.多态访问成员的特点 3.1成员变量 3.2成员方法 3.3构造方法 3.4静态成员 4.多态的好处 5.多态的缺点 6. instanceof关键字
本次实验理解继承原理与机制及类继承的声明方法,掌握了成员变量的隐藏及方法的重写和抽象类与抽象方法,掌握了super和final关键字,理解了多态的内涵及实现代码,掌握接口的声明和使用等。
文章目录继承常用的关键字this关键字static关键字super关键字final关键字封装及权限修饰符封装的作用及其优点权限修饰符封装的使用细节多态多态的概念多态的使用要点对象的转型instanceof运算符类型自动提升及强制...
final关键字 6 抽象类 8 抽象类--模板设计模式 9 接口 9 内部类 11 匿名内部类的使用(重要!!!!!!!) 13 成员内部类的使用 13 静态内部类的使用 14 枚举的二种实现方式 14 自定义类实现枚举 14 使用 enum 关键字实现...
final关键字特性 Java类和包 抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入...
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
理解final关键字 java实例化对象的5种方式 1、用new语句直接创建对象,这是最常见的创建对象的方法。 2、通过工厂方法返回对象,如:String str = String.valueOf(23); 3、运用反射手段,调用java.