final关键字

Java中使用到final关键字的三种情况:数据、方法和类

1.final用来修饰数据

1)用来表明该数据是恒定不变的

2)对于编译期常量这种情况,编译器可以将该常量值带入任何可能用到它的计算式中,意思就是说,在编译时执行计算式,这样可以减轻运行时的负担。在JAVA中,这类的常量必须是基本的数据类型,并且是以final关键字表示。在对这个常量进行定义的时候,必须对其进行赋值。

3)当对对象的引用而不是基本数据类型时,且用final修饰,对于基本的数据类型而言,final是使数值恒定不变的‘而对于对象引用而言,final使引用恒定不变。一旦引用被初始化指向一个对象,则没有办法再指向另外一个对象。但是,对象自身是可以被修改的,java并未提供使任何对象恒定不变的途径。

4)带有final static 修饰的基本类型全用大写字母命名,并且字与字之间用下划线隔开。

2.空白final

1)java允许生成空白final,其指被声明为final但又未给定初值的域。不管什么情况下,编译器都确保空白final在使用前必须被初始化。

2)关于空白final的初始化,必须在域的定义处或者每个构造器中用表达式对final进行赋值,这就是final域在使用前总是被初始化的原因所在

3.final修饰参数

1)java允许在参数列表中以声明的方式将参数声明为final,这也就意味着你没有办法再方法中更改参数引用所指向的对象。

2)你可以读取final所修饰的参数,但是没有办法来改变这个参数的值。这个特性主要用来向匿名内部类传递数据

4.final用来修饰方法

1)final用来修饰方法的原因有两个:

a)把方法锁定,防止任何继承类来修改它的含义,这是出于设计的考虑

b)明确禁止方法被覆盖

注:类中所有的private方法都隐式的指定为final,由于无法取用private方法,所以就无法覆盖它。

“覆盖”只有在某方法是基类的接口的一部分时才会出现。即,必须能将一个对象向上转型为该基本类型并调用相同的方法,如果某方法为private,他就不是基类的接口的一部分。他仅是隐藏域基类中的程序代码,只不过是具有相同的名称而已。但是如果其子类中以相同的名称生成一个public ,protected或包访问权限方法的话,仅仅是生成了一个新的方法,由于private方法无法触及而且能有效的隐藏,所以除了把它看成是因为他所属的类的组织结构的原因而存在外,其他任何事物都不需要考虑他

5.final修饰类

当将某个类的整体用final修饰时(通常是将关键字final置于他的定义之前),就表明了你不打算继承该类,而且也不允许别人这样做,而且由于final类 禁止继承,所以final类中的所有方法都隐式的定义为final,因为他们是无法覆盖的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值