目录

 

序言

修饰类

修饰方法

修饰变量


序言

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方法的原因是以下两种。

  1. 方法锁定,以防任何继承类修改它的含义。
  2. 提高效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。

综上,即防止方法被继承的子类重写。另外,类的private方法会隐式地被指定为final方法。

 

修饰变量

修饰变量是final用得最多的地方。final关键字可以修饰实例变量和局部变量。

修饰实例变量时,实例变量声明在类中,但在方法、构造方法和语句块之外。修饰的变量可能是基本数据类型,也可能是引用数据类型。分为以下两种情况:

  • 如果是基本数据类型的变量被final修饰,则其数值初始化后就不能再进行修改;
  • 如果是引用数据类型的变量被final修饰,则在对其初始化后将被能再指向其他对象。

修饰局部变量时,局部变量可以声明在方法、构造方法或者语句块中。比如方法中的局部变量通过final修饰,方法(函数)的参数传递有下面两种方式:

  • 值传递的参数被final修饰后,其数值在传入后将不能再被修改;
  • 引用传递的参数被final修饰后,其对象在传入后将不能再指向其他对象。

 

注意:Java中没有全局变量的概念。其他概念如下,

  • 类变量(静态变量):独立于方法之外的变量,用 static 修饰。静态变量储存在静态存储区。
  • 实例变量:独立于方法之外的变量,不过没有 static 修饰。实例变量在对象被实例化之后值确定,在对象被销毁时销毁。
  • 局部变量:类的方法中的变量。局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁。