详细介绍final关键字的使用

详细介绍final关键字的使用
大家好,这里是可傥。接下来,我将为大家好好介绍一下关于final关键字的用法。
final关键字,意思是不可更改的。那在java里面,它修饰的变量,方法以及类,分别是怎么使用的呢?牢记“不可更改”,就能好好理解它的用法。

一、修饰变量

final修饰变量的时候,不可更改的变量顾名思义就是常量。java中变量有基本数据类型和引用数据类型两种。修饰基本数据类型,基本数据类型的值不能发生改变。而对于引用类型,则表示引用地址不能发生改变,而对象的内容是可以改变的。如下面代码:

这是一个user类,里面一个name属性

public class User {
    private String name;

    public User(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

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

接下来,我们用final关键字修饰User引用对象user,然后将user指向一个新的对象,会发生报错,而修改name的值,则正常。

public class UserDemoTset {
    public static void main(String[] args) {
        final User user = new User("tangke");
        //user = new User("ketang");//报错 Cannot assign a value to final variable 'user'
        user.setName("ketang");//可以正确赋值
        System.out.println(user);//打印出来的user的name为ketang
    }
}

可见,final关键词修饰的引用类型,是不能改变其引用地址的,但是可以改变其内部的属性。

二、修饰方法

在jdk1.5以前,final修饰的方法一方面是使final修饰的方法不会被覆盖,另一方面如果方法不大,那么编译器会默认将该方法的调用转为内嵌调用,以此提高效率。而jdk1.5之后,虚拟机会自动进行优化,final关键字只用来禁止方法的重写。在继承类之后,子类只拥有调用该方法的权利,而不拥有重写该方法的权利。注:final修饰的方法只是不能被重写,但是却可以被重载。

父类有一个方法用了final修饰字:

class Parent {
    private int age;

    public final int getAge() {
        return age;
    }
}

class Son extends Parent {
    @Override
    public int getAge() {
        return super.getAge();
    }//编译报错
}

三、修饰类

final修饰类表示该类不可以被继承。
如果希望某个类不可以被继承的时候,可以用final关键字来修饰,比如常见的String就是一个final修饰的类。final修饰的类,其方法也无法再被重载,也可以当做是final修饰。

final关键字就聊到这,这里是可傥,将会分享自己的所学以及所得,欢迎大家一起交流。csdn地址:https://blog.csdn.net/qq_4225...

你可能感兴趣的