Java final关键字,使用场景

Java中,final关键字可以修饰 变量,方法,类。

final 修饰变量

变量初始化之后不能重新赋值。一般与 static 一起使用,并且所有字母大写。

· 局部变量 & 全局变量

1、修饰局部变量时,可以在定义时初始化,也可以先定义变量,后初始化。

public class Test {
    
    
    public static void main(String[] args) {
    
    
        final String s1 = "";	//定义时初始化
        final String s2;
        s1 = "";			//先定义,后初始化 
    }
}

2、修饰全局变量时,可以在定义时初始化,也可以在执行构造器时初始化。 在使用构造器初始化,并且有多个构造器时,必须保证多个构造器都能初始化,否则编译报错。

class FinalTest{
    
    
    private int id;
    private final int age = 18;		//定义时初始化
    private final String name;		//构造器初始化

    public FinalTest(String name) {
    
    
        this.name = name;
    }
    public FinalTest(int id,String name) {
    
    
        this.id = id;
        this.name = name;
    }
}

· 基本数据类型 & 引用数据类型

1、修饰基本数据类型时,初始化后值不能重新赋值。

class FinalTest{
    
    
    private int id;
    private final int age = 18;
    private final String name;

    public FinalTest(String name) {
    
    
        this.name = name;
    }
    public FinalTest(int id,int age,String name) {
    
    
//        this.age = age;   //编译报错
        this.id = id;
        this.name = name;
    }
}

2、修饰引用数据类型时,初始化后不能改变指向对象的引用,但引用的对象中的变量可以修改。

public class Test {
    
    
    private final static FinalTest f = new FinalTest(1,"张三");
    
    public static void main(String[] args) {
    
    
//        Test.f = new FinalTest(2,"李四");      //编译报错

        System.out.println(Test.f.getId());		//打印:1
        Test2.f.setId(2);						//修改值
        System.out.println(Test.f.getId());		//打印:2
    }
}
class FinalTest{
    
    
    private int id;
    private final int age = 18;
    private final String name;

    public FinalTest(String name) {
    
    
        this.name = name;
    }
    public FinalTest(int id,String name) {
    
    
        this.id = id;
        this.name = name;
    }

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }
}

如果需要所引用的对象中的变量不能修改,则把对象中的变量使用 final 修饰。


使用例子: String类中的存储值的变量使用的是final修饰的,所以String值不可变。

final 修饰方法

修饰方法表示该方法不能被重写,为最终方法。

public final class FinalTest{
    
    
    public final void test(){
    
    }
}

使用例子: Object类中的 wait(),notify(),notifyAll()方法使用的是final修饰的,确保他们在子类中不改变语义。


final 修饰类

修饰类时表示该类不能被继承,为最终类。所以,final不能与abstract一起使用。

public final class FinalTest{
    
    
        
}

使用例子: String类使用final修饰的,确保他们不会在子类中改变语义。




——THE END——

猜你喜欢

转载自blog.csdn.net/weixin_46022868/article/details/112439038