目录
序言
final是Java中的一个保留关键字,它可以用来修饰类、方法和成员变量,下面就看一下具体的内容吧。
修饰类
当用final修饰一个类时,表明这个类不能被继承。使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类,常见的final类如有如下几种:
- 包装类:Boolean,Character,Short,Integer,Long,Float,Double,Byte,Void
- 字符串类:String,StringBuilder,StringBuffer
- 系统类:Class,System,RuntimePermission,Compiler
- 数学类:Math,StrictMath
修饰方法
使用final方法的原因是以下两种。
- 方法锁定,以防任何继承类修改它的含义。
- 提高效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。
综上,即防止方法被继承的子类重写。另外,类的private方法会隐式地被指定为final方法。
修饰变量
修饰变量是final用得最多的地方。final关键字可以修饰实例变量和局部变量。
修饰实例变量时,实例变量声明在类中,但在方法、构造方法和语句块之外。修饰的变量可能是基本数据类型,也可能是引用数据类型。分为以下两种情况:
- 如果是基本数据类型的变量被final修饰,则其数值初始化后就不能再进行修改;
- 如果是引用数据类型的变量被final修饰,则在对其初始化后将被能再指向其他对象。
修饰局部变量时,局部变量可以声明在方法、构造方法或者语句块中。比如方法中的局部变量通过final修饰,方法(函数)的参数传递有下面两种方式:
- 值传递的参数被final修饰后,其数值在传入后将不能再被修改;
- 引用传递的参数被final修饰后,其对象在传入后将不能再指向其他对象。
注意:Java中没有全局变量的概念。其他概念如下,
- 类变量(静态变量):独立于方法之外的变量,用 static 修饰。静态变量储存在静态存储区。
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。实例变量在对象被实例化之后值确定,在对象被销毁时销毁。
- 局部变量:类的方法中的变量。局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁。
参考链接:
1、https://www.runoob.com/java/java-variable-types.html
2、https://www.runoob.com/w3cnote/inner-lambda-final.html