`

final关键字到底修饰了什么

    博客分类:
  • J2SE
阅读更多
final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。 当然对于基本数据类型如果用final进行修饰,那么肯定就是值不会变,那么对于引用类型呢,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,意图使得它“永远不变”。其实那是徒劳的。 
分享到:
评论

相关推荐

    day11 05 final关键字用于修饰成员变量

    day11_05_final关键字用于修饰成员变量

    day11 03 final关键字用于修饰成员方法

    day11_03_final关键字用于修饰成员方法

    day11 02 final关键字用于修饰类

    day11_02_final关键字用于修饰类

    day11 04 final关键字用于修饰局部变量

    day11_04_final关键字用于修饰局部变量

    final关键字的使用.mp4

    final关键字的使用f

    Java编程中static和final关键字的陷阱.pdf

    例如,在 FinalTest1.java 例子中,final关键字修饰的成员变量a是一个常量,不能被修改。 final关键字也可以修饰方法,称为最终方法。最终方法不能被重写。例如,在 FinalTest2.java 例子中,Father类的最终方法...

    final关键字详细解读

    1. final修饰类:当使用final关键字修饰一个类时,该类不能被其他类继承。这一特性在Java标准库中有所体现,例如String类、System类、Math类和Scanner类都是用final修饰的。这样的设计通常是因为这些类已经足够通用...

    Java final关键字

    此外,`final`关键字还有其他用途,如`final`修饰的匿名内部类和`final`局部变量在匿名内部类中的特殊规则,以及`final`与`static`结合时的静态常量等。理解并熟练应用`final`关键字对于编写高效、安全的Java代码至...

    【Java语言基础】final关键字

    final关键字可用于修饰符,变量和方法,用于表示它修饰的类,方法和方法不可改变。 final 最终的最后的 final修饰变量时,表示该变量一旦获得了初始值之后就不可被改变,final既可修饰成员变量(包括类变量和实例...

    Java中的final关键字详解及实例

    用final关键字修饰的方法是不能被该类的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。 注:类的private方法会隐式地被指定为final方法。 public class ...

    Java零基础-final关键字.md

    ### Java零基础-final关键字 #### 内容概要 本文主要介绍了Java中final关键字的概念及其在实际编程中的应用。读者将能够理解final关键字的基本定义、用途及作用范围,并且掌握如何在不同的编程场景中合理使用它。...

    Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口

    1. **final关键字** - `final`关键字用于确保变量的值一旦被赋值后就不能改变,或者类和方法不能被进一步扩展。 - 当`final`修饰类时,该类不能被继承,如`final class MyClass {}`,这意味着MyClass不能作为其他...

    Java中final关键字详解

     在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。  1.修饰类  当用final修饰一个类时,表明这个类不能被继承。也就是说,...

    JavaSE之final关键字与成员变量的类型

    【JavaSE之final关键字与成员变量的类型】 在Java编程语言中,`final`关键字扮演着重要的角色,它表示“最终”或“不可改变”的特性。对于初学者来说,理解`final`的关键字用法是掌握JavaSE基础的重要一步。本篇...

    final关键字的使用

    ### Final关键字详解 #### 一、Final的基本概念与作用 `final`关键字是Java语言中的一个重要的修饰符,它的含义非常直接——“最终”的意思。它可以在不同的上下文中发挥不同的作用,主要体现在以下三个方面: 1....

    Java中的final关键字

    在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被用来定义不可变性和唯一性。这个关键字可以应用于变量、方法和类,分别赋予它们不同的特性。以下是对`final`关键字在不同场景下使用的详细介绍: 1....

    Java并发--final关键字.docx

    【Java并发--final关键字】 Java中的`final`关键字在编程中扮演着重要的角色,它可以用于修饰变量、方法和类,确保被修饰的内容在特定条件下不可变。以下将详细阐述`final`关键字在不同场景下的应用及其特点。 **...

    JavaSE基础:多态、final关键字-27

    在这个主题中,我们将深入探讨多态、final关键字以及与之相关的访问控制权限、package和import的使用。 首先,多态(Polymorphism)是面向对象编程的三大特性之一,它允许我们使用一个父类类型的引用指向其子类的...

    java中final关键字和static关键字详细用法

    Java中的`final`和`static`关键字是编程中非常重要的两个修饰符,它们分别用于不同的场景,以确保代码的稳定性和高效性。 首先,`final`关键字主要用于表示不可变性。它可以用来修饰类、方法和变量。对于类,如果一...

Global site tag (gtag.js) - Google Analytics