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的语法还是比较简单的。

posted @ 2018-12-27 10:44  雪地里的Alan  阅读(170)  评论(0编辑  收藏  举报