final关键字
final可以用来修饰变量,可以用来修饰类,可以修饰方法
1、final 变量的值不能被改变
final的成员变量
final的局部变量
2、final的 方法不能够被重写
3、final的类不能被继承
下面 看一下这个程序进行学习:
一、
public class TestFinal { public static void main(String[] args) { T t = new T(); t.i = 9; //在这里是错误的,不可以改变i的值,因为是i是final的 } } final class T { final int i = 8; }
在上面的代码中 我先定义了一个变量i,是final的,在main函数里 将T的对象进行实例化,t.i=9 进行改变i的值,这是不可以的。
二、
在上述代码中:
public class TestFinal { public static void main(String[] args) { T t = new T(); } } final class T { final int i = 8; public void m(final int j) { j = 9; } }
我定义了一个方法m, 形参是final的,意思就是说,当传进这个方法m中的j不能够在m方法里面进行改变
,所以上面的书写也是错误的,这个有什么用途呢,假如说将上面的几行代码写成这样:
pulic void m (final Cat c){
//
}
这个将final int i改成了 final Cat c,说明在这个m方法中,Cat c 不能将这个引用指向其他的猫
三、
public class TestFinal { public static void main(String[] args) { T t = new T(); } } class T { final int i = 8; public final void m() { //j = 9; } } class TT extends T { /* * 这里TT类继承T类,不能重写m方法,因为在父类中m方法 * 被修饰成final的 */ public void m() { }
这段代码进行证明了final的 方法是不能够被重写的
四、
public class TestFinal { public static void main(String[] args) { T t = new T(); } } final class T { final int i = 8; public final void m() { //j = 9; } } class TT extends T { /* * 这里TT类不能够继承T类,因为final修饰的类不能被继承 */ public void m() { } }
这里将T类被修饰成final,下面TT子类是不能被继承T类的,因为,被final修饰的类不能被继承的
总的来说final的语法还是比较简单的。