有关Java中关键字final的理解

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一、final数据

在Java编程语言中,有时候需要告知编译器一段数据是不变的编译期常量。对于这种情况,编译器可以将此常量值带入需要用到它的计算式子当中,这种在编译时执行计算式的方法减轻了运行时的开销。通常,这类常量数据都是基本类型的数据,并赋予关键字final,同时在对此常量定义时需要进行赋值。
值得注意的是:对于基本类型,使用final关键字将使数值恒定不变;而对于对象引用,final则是使引用恒定不变。一旦引用被初始化为指向一个对象时,它也就无法再指向另外一个对象,然而该对象本身是可以被修改的。
通常,对于一个既是static又是final的域只占一段不能改变的存储空间。
下面的例子验证了final数据的含义。
class Hank
{
       int i;
       public Hank(int i){this.i=i;}
}
public class FinalTest
{
       private String s;
       public FinalTest(String s){this.s=s;}
       private final int value=20;
       private static final int INT_1=50;
       public static final int  INT_2=60;
       static final int INT_3=70;
       private final Hank h1=new Hank(1);
       private static final Hank h2=new Hank(2);
       private Hank h3=new Hank(3);
       private final int[] a={1,2,3,4,5};
       public String toString()
       {
              return s+": "+"INT_2= "+INT_2;
       }
       public static void main(String[] args)
       {
              FinalTest ft1=new FinalTest("ft1");
              //ft1.value++;常量值不能被修改
              ft1.h1.i++;//对象引用不能改变,但是其对象本身是可以修改的
              ft1.h3=new Hank(2);
              //ft1.h1=new Hank(1);常量对象引用不能再指向另一个对象引用
              for(int i=0;i<ft1.a.length;i++)
              {
                     ft1.a[i]++; //对象引用不能改变,但是其对象本身是可以修改的
                     System.out.println(ft1.a[i]);
              }
              //ft1.a=new int[3]; 常量对象引用不能再指向另一个对象引用
       }
}

二、空白final

被声明为final但又没有给定初值的域即为空白final,编译器确保使用前必须初始化空白final。比如:
class Blank
{
    private int i;
    Blank(int i){this.i=i;System.out.println("Blank.i="+this.i);}
}
public class BlankFinal
{
    private final int i;//blank final
    private final Blank b;//blank final reference
    BlankFinal()
{
i=1;b=new Blank(1);//使用前必须初始化
System.out.println("BlankFinal.i="+this.i);
}
    BlankFinal(int i)
{
this.i=i;b=new Blank(i); //使用前必须初始化
System.out.println("BlankFinal.i="+this.i);
}
    public static void main(String[] args)
    {
           new BlankFinal();//Blank.i=1;BlankFinal.i=1;
           new BlankFinal(2); //Blank.i=2;BlankFinal.i=2;
    }     
} 

三、final参数

Java允许在函数参数列表中以声明的方式将参数指明为final,这使得在函数体当中修改参数引用所指向的对象变得不合法。比如说:
class Args
{
       public void f(String s){System.out.println(s);}
}
public class ArgsFinal
{
       void has(final Args arg)
       {
              //arg=new Args();不能修改final参数
              arg.f("with final");
       }
       void dnthas(Args arg)
       {
              arg=new Args();//能修改final参数
              arg.f("without final");
       }
       public static void main(String[] args)
       {
              ArgsFinal af=new ArgsFinal();
              Args ar=new Args();
              af.has(ar);//with final
              af.dnthas(ar);//without final
       }
}

四、final类

 如果不想继承某个类,则可以考虑将此类设置成final的形式。即是说,程序员对该类不能做任何改动,同时也意味着它不会有子类。比如:
Class Base{ …}
Final Class SubClass{…}
//! Class Derived extends SubClass{…}不能由final类SubClass导出新类
需要注意的是,所有final类中的方法都隐式的final,他们是无法被覆盖或修改的,因此在其中的方法显示指明为final就显得有些多此一举了。
Reference:
       Bruce Eckel.<<Thinking in Java>>.Fourth Edition


功率半导体器件选型指南:从GTO、GTR到MOSFET、IGBT的原理与应用 功率半导体器件是电力电子系统的核心,如同电路中的智能开关,负责电能的转换与控制。其工作原理基于半导体材料的导电特性,通过控制信号精确管理电路的通断。这类器件的技术价值在于提升能效、减小体积并增强系统可靠性,广泛应用于变频器、逆变器、开关电源及新能源领域。理解不同器件如MOSFET的雪崩能量与IGBT的损耗计算,是进行高效、可靠电路设计的基础。本文聚焦于GTO、GTR、MOSFET和IGBT这四类经典全控型器件的特性对比与选型策略,帮助工程师在具体项目中做出经济可靠的选择。 阅读详情

相关推荐

Unity UI适配实战:从Canvas Scaler到主流游戏适配方案解析

本文深入解析Unity UI适配的核心技术,重点介绍Canvas Scaler组件的关键参数如Reference Resolution和Screen Match Mode,并提供主流游戏适配方案实战分析。通过九宫格拉伸、动态调整等技巧,帮助开发者解决多设备适配难题,提升游戏UI在不同分辨率下的表现。

weixin_29001419的博客 933

String理解----final 不可变

String理解-----不可变(final) 大家都知道String类是不可变的,String类是被final修饰过的类。final理解 不可变对象:一个对象在创建完成之后,不能在改变它的状态,那么这个对象就是不可变的。 -------------------------不能改变它的状态表示不能改变对象内的成员变量,包括基本数据类型的值,引用类型变量不能指向其他的对象。 下面有个例子我

Cx的博客 3166

从PSDK到ROS节点:实战GPS数据发布与CMake配置

本文详细介绍了如何从大疆PSDK获取GPS数据并封装为ROS节点的实战过程,包括PSDK编译、GPS数据订阅、ROS节点实现及CMake配置优化。通过具体代码示例和调试技巧,帮助开发者快速实现无人机传感器数据与ROS系统的集成,提升开发效率。

weixin_30843605的博客 433

javafinal关键字的使用与理解

1. final关键字的含义 final表面意思就是不可更改的,恒量的意思;指的是无法改变的量,这与静态标量static是有区别的,静态变量指的是只有一份存储空间,值是可以改变的。使用final一定原因是出于软件设计的角度,因为别人看到final这个关键字就知道是什么意思,达到心领神会的效果,但也正是由于这种"语义"的存在,在程序设计中要谨慎使用,以免误用。 在Javafinal修饰的就是常量,...

奋斗的哼哼 915

Java关键字理解final关键字

前言 我们在了解final关键字之前,可以先从它的字面意思去理解,有道翻译查询如下: 也就是说,final的中文意思就是最终的、不可改变的。在Java中,final关键字表达的也是这样的意思。final关键字修饰变量、方法和类,不管修饰什么,其本意都是指“它是无法更改的”。本文将介绍final关键字final关键字修饰变量 final关键字修饰方法参数 final关键字修饰方法 final...

NYfor2020的博客 518

final关键字_Java面试-谈谈对final关键字理解

一、final简介final意为最终的,不可变的。在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。final修饰的类不可被继承将一个类声明为final,其中的方法会自动地转为final(不包括变量)。final修饰的方法不能被重写final修饰的方法可以重载,可以被子类继承,但是不能被重写。使用final方法的一个原因是锁定方法,以防任何继承类修改它的含义,这是...

weixin_39614109的博客 169

java中对final关键字理解

一、final关键字修饰类 当用final关键字修饰一个类时表明这个类无法被继承 ,如果你想设计一个类不想被继承,那么就加上final关键字。 二、final关键字修饰方法 当用final关键字修饰一个方法时,这个方法无法被重写。 三、final关键字修饰变量 变量被final关键字修饰后,只能在定义和构造函数时初始化值,而无法被成员函数重新赋值。 被final关键字修饰的对象实例,虽然不能指向其他对象的引用,但是可以修改引用指向对象的内容。 四、保证线程可见性,防止指令重排序 ...

m0_51212267的博客 590

谈谈对Javafinal关键字理解

final普遍的认知就是“无法改变或者不需要改变”,但是在不同的应用场景,可能会存在着细微的区别。 final一般作用于数据、方法、类 1.final数据 使用final数据的原因是得到一个永不改变的编译时常量,编译器可以将该常量代入任何可能用到的它的计算中,减轻一些运行时负担。使用时有以下几点要注意 基本类型,使用final修饰时,表示数值恒定不变,在进行定义的时候必须对其进行赋值...

IT咸鱼圈 429

final什么意思Java_深入理解Java中的final关键字

ava中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。final关键字的含义?finalJava中是一个保留的关键字,可以声明成员变量、方...

weixin_32467421的博客 258

谈谈我对javafinal关键字理解

JAVA 编程 final关键字 来源于有道词典的翻译: final adj. 最终的;决定性的;不可更改的; 作用 final可以用来修饰的结构:类,方法,变量 final可以修饰一个类(例如:String类,System类,StringBuffer类) final用来修饰一个方法(例如:object类中的getclass()) final用来修饰变量:此时变量为常量 final修饰属性可...

Steve韩峰的博客 317

深入理解Javafinal关键字

1.final关键字有几种用法(1)修饰变量 # 用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。final修饰的变量可以先声明,后赋值。 # final修饰基本类型时,起到常量的作用,基本类型的值不可变。 final修饰引用类型时,不能再指向其他的对象,但被引用的对象 的值是可以改变的(引用变量的值 实际上是它所引用的对象的地址)。 ...

夏日清风 1万+

final关键字_深入理解 Java 中的 final 关键字

点击上方“武培轩”,选择“设为星标”技术文章第一时间送达!finalJava 中重要关键字之一,可以应用于类、方法以及变量上。这篇文章中将讲解什么是 final 关键字?将变量、方法和类声明为 final 代表了什么?使用 final 的好处是什么?final 关键字是什么?finalJava 中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作 ...

weixin_39676633的博客 111

javafinal是啥意思_(转)深入理解Java中的final关键字

Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。final关键字的含义?finalJava中是一个保留的关键字,可以声明成员变量、...

weixin_35866180的博客 2100

理解java关键字final

final: 字面意思,最终、最后。 在java中,继承的出现提高了代码的复用性,并方便开发。但也会带来问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写。可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,那怎么解决? 要解决上述的这些问题,需要使用到一个关键字finalfinal的意思为‘最终,不可变’。final是个修饰符,它可以用来修饰类,类的成员,以及局部变量。 final的特点 final修饰类不可以被继承,但是可以继承其他类。 [jav

103

深入理解Java中的final关键字

Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。 final关键字的含义? finalJava中是一个...

dizhengquan1198的博客 80

java final类的实现_深入理解Java中的final关键字

Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。final关键字的含义?finalJava中是一个保留的关键字,可以声明成员变量、...

weixin_39631261的博客 119

Javafinal关键字理解和使用

final关键字 final的作用就是声明 “一个东西不能变” final修饰基本类型 当final修饰一个基本类型的时候,就是声明了这个基本类型的变量不可以在改变,这个基本类型的变量就成了一个常量。` public static void main(String[] args) { final int i = 1; //! i= 10; } ...

weixin_45804960的博客 958

Javafinal关键字-快速理解掌握

Javafinal关键字,主要的作用就是告知编译器我这边有一块数据是恒定不变的;比如: 编写一个永不改变的编译时常量 或者在运行时被初始化的值,而你不希望这个值被改变 final关键字的作用: 修饰变量:被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。 java允许在参数列表中以声明的方式将参数指明为final,这就意味着无法在方法中更改参数引用所指向的对象。可以读参数,但却无法修改参数,这一特性主要用来想匿名内部类传递数据。 final int MAX_SPEED = 120.

LSFZ88888的博客 168

javafinal关键字理解与应用

1.修饰类: 修饰类当用final去修饰一个类的时候,表示这个类不能被继承。注意:a. 被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。b. final类中的成员方法都会被隐式的指定为final方法。说明:在自己设计一个类的时候,要想好这个类将来是否会被继承,如果可以被继承,则该类不能使用fianl修饰,在这呢,一般来说工具类我们往往都会设计成为一个fian...

weixin_44162368的博客 365
上一篇: 怎么使用jquery判断一个元素是否含有一个指定的类(class)
下一篇: 极1s刷Padavan改华硕[N14U N54U]固件
Sir_fish
博客等级 码龄11年 5粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值