← 返回首页
JavaSE系列教程(三十二)
发表时间:2020-01-10 13:27:08
讲解Java的final关键字

1.什么是final

final是java中的一个关键字,可以修饰变量(成员变量+局部变量)、类以及方法。final与abstract关键字是反相关的,不能同时出现。

2.final修饰基本类型变量

final修饰基本类型变量表示变量值不能改变。 例如:

public class Test {

    public static void main(String[] args) {

        final int num = 100;

        System.out.println(num++); //编译错误,num不能修改
    }
}

3.final修饰引用类型变量

final修饰引用类型变量表示对象不能改变,但是对象属性可以改变。 例如:

class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Test {

    public static void changeName(final Person p) {
        p.setName("岳飞"); //对象的属性可以改变

        //p = new Person("岳飞",60);//编译错误,对象不能改变
    }

    public static void main(String[] args) {

        Person p = new Person("张飞", 30);

        changeName(p);

        System.out.println(p);
    }
}

4.final修饰类

final修饰类,表示该类不能被继承,俗称"断子绝孙"类。例如:java.lang.String类就是最著名的final类。 例如:


class OtherClass extends MyClass{ //编译错误,不能继承final类。

}

public final class MyClass {
}

5.final修饰成员方法

final修饰成员方法表示该方法不能重写。

例如:

class OtherClass extends MyClass{

    @Override
    public void fn(){ //编译错误,不能重写final方法。
        System.out.println("实现了fn()..");
    }
}

public  class MyClass {

    public final void fn(){

    }
}

6.final的初始化

被fianl修饰的成员变量使用前必须初始化赋值,有两种方式: 1)声明时直接赋值 2)全部在构造方法中赋初值

小结:

1)final修饰基本类型变量表示值不能改变。

2)final修饰引用类型变量表示对象不能改变,对象的属性可以改变。

3)final修饰类表示该类不能继承。

4)final修饰成员方法表示该方法不能重写。

5)final成员变量在使用前必须初始化,可以声明的同时赋初值,也可以在构造方法中赋值。