final关键字在java中被称为完结器,表示最终的意思,意味着被final修饰的成员不能被改变。

final修饰变量时,意味着该变量是常量;

final修饰方法时,意味着该方法不能被子类重写;

final修饰类时,意味着该类不能够被继承。

 

final修饰变量

 

在实际应用中,可以将final 和 static 关键字联合使用来声明一个常量,此时一般常量的名字全部大写,以和变量进行区分。

public static final String WEEK="Monday";

 

一般情况下,有两种原因把变量定义为final修饰:

* 不希望一个变量的值在程序运行时发生改变

* 将一个变量定义为final修饰的,程序会在编译时就对其值进行检测,从而提高运行时的效率

 

对于基本数据类型的数据来说,使用关键字final修饰其值会变成一个常量。对于一个对象句柄来说,使用关键字final修饰则表明不能将该句柄指向另一个对象,但是可以对对象的成员变量进行修改。例如:

class A{

  int i=1;

}

public class FinalObject{

  public static void main(String[] args){

    A a = new A();
    add(a);
  }

}

/**定义一个add方法,参数a是final类型的*/

public static void add(final A a){

  //a=new A();                    //编译错误,不能指定最终的参数a

  int i=a.i+1;                    //2

}

 

final修饰方法

final修饰的方法使得恶意的代码攻击者不能通过改写父类中的方法来窃取或者修改某些重要的信息。

如果一个类中的方法被设置成private类型的,那么这个方法也是final类型的,因为private类型的方法也不允许被其他的子类所覆盖。

 

final修饰类

被final关键字修饰的类只是不能被继承,可以通过创建该类的一个实例来访问其中的方法或修改其中的成员变量。

使用final关键字修改类的两个原因:

* 从安全角度,被final修饰的类不能被继承,使得其他类不能通过继承来对其进行处理。

* 从程序设计角度上,如果认为该类的设计在程序中不再需要任何的改变和扩充,就可以使用final关键字来修饰。