Java中的final关键字在编写程序中,比较常用。尤其是在上文中的匿名内部类中。
final 表示最终,也可以称为完结器,表示对象是最终形态的,不可改变的意思。
使用final修饰的的类,是“断子绝孙”的。
一:final修饰成员变量
Final修饰的类的成员变量是常量,不可被改变。
代码如下所示:
public class T01 { public static void main(String[] args) { person per = new person(); System.out.println(per.index); } } class person { public final int index = 1; }
控制台输出:
1
我们尝试一下改变person类中的index值,如下图所示:
final修饰基本数据类型的变量,值不能改变
final修饰引用数据类型的变量,不能改变的是变量存放的地址值,地址值上(对象)的
内容可以改变
final修饰局部变量,该变量在定义的时候可以不被赋值,但是在使用之时,该变量必须
被初始化
final修饰成员变量,该变量要么在定义时直接被初始化,要么在构造代码块中被初始
化,要么在构造方法中被初始化。
换言之,在对象创建完毕之前,被final修饰的成员变量一定要被赋值且只能被赋值一次
二:final修饰成员方法
Final修饰的成员方法是不可以被重写的。
public class T01 { public static void main(String[] args) { person per = new person(); // System.out.println(per.index); per.drink(); } } class person { public final int index = 1; public final void drink() { System.out.println("person类使用final修饰的方法!"); } }
控制台输出:
person类使用final修饰的方法!
我们定义一个类来继承person类,尝试重写一下drink方法:
三:final修饰类
final 修饰的类叫作 final 类,final类通常是功能完整的,不能被继承,Java 中有许多类是 final 的,比如 String, Interger 以及其他包装类。
public class T01 { public static void main(String[] args) { person per = new person(); // System.out.println(per.index); per.drink(); } } final class person { public final int index = 1; public final void drink() { System.out.println("person类使用final修饰的方法!"); } }
控制台输出:
person类使用final修饰的方法!
下面我们尝试一下定义一个子类来继承person类,结果如下图所示:
四:final优点
1:final 关键字,提高了性能,JVM 和 Java 应用都会缓存 final 变量。
2:final 变量,可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
5、总结
1、final 关键字可以用于修饰成员变量、本地变量、方法以及类。
2、final 成员变量,必须在声明的时初始化或者在构造器中初始化,否则报编译错误。
3、final 变量不能再次赋值;final 方法不能被重写;final 类不能被继承。
4、在匿名类中,所有变量都必须是 final 变量。
5、接口中,声明的所有变量本身是 final 的。
6、final 和 abstract 这两个关键字是反相关的,final 类就不可能是 abstract 的。
7、声明时未初始化的 final 变量,称为空白 final 变量(blank final variable),必须在构造器中进行初始化,或者调用 this() 初始化,否则,编译器会报错final变量(变量名)需要进行初始化。
8、final修饰变量命名单词全大写,每个单词用下划线分割
9、对于集合对象声明为 final 指的是引用不能被更改。
10、final修饰类,该类不被继承(无子类,但是该类可以有父类)
以上大概是java中final关键字的使用。
有好的建议,请在下方输入你的评论。