java中final关键字

Posted girl1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中final关键字相关的知识,希望对你有一定的参考价值。

一、final关键字的含义

final是Java中的一个保留关键字,它可以标记在成员变量、方法、类以及本地变量上。一旦我们将某个对象声明为了final的,那么我们将不能再改变这个对象的引用了。如果我们尝试将被修饰为final的对象重新赋值,编译器就会报错。

二、用法

1.修饰变量

final修饰在成员变量或者局部变量上,那么我们可以称这个变量是final变量,如果我们将被final修饰的变量重新赋值,编译器就会报错

2.修饰方法

被final所修饰的方法将无法被子类重写。

使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。” -- 摘自《Java编程思想》

因此如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定(正如编程思想中所提到的,在现在几版较新的JDK中,已经几乎没有性能差别了)。

3.修饰类

如果某个类被final所修饰,那么表明这个的功能通常是完整的;该类将不能被继承。并且final类的所有方法都会被隐式的修饰成final。

 

4.ps:匿名类中的所有变量都必须是final的。

 

static修饰的方法:
1、父类中的静态方法可以被继承、但不能被子类重写。
2、如果在子类中写一个和父类中一样的静态方法,那么该静态方法由该子类特有,两者不构成重写关系。
final修饰:
1、修饰类表示不允许被继承。
2、修饰方法表示不允许被子类重写,但是可以被子类继承,不能修饰构造方法。
3、修饰变量表示不允许被修改
    a)方法内部的局部变量,使用前被赋值即可(只能赋值一次),没有必要非得初始化。
    b)类中的成员变量(如果没有在定义时候初始化,那么只能在构造代码块中或者构造方法中赋值)
    c)基本数据类型的变量(初始化赋值之后不能更改)
    d)引用数据类型的变量(初始化之后不能再指向另外一个对象,但对象的内容是可以变的)

 

以上是关于java中final关键字的主要内容,如果未能解决你的问题,请参考以下文章

java 中的 final 关键字都有哪些用法

java基础只关键字final

Java中final关键字如何使用?

java中final关键字

Java入门系列之final

浅析Java中的final关键字