Java中的final关键字详解

在Java中,final 关键字是一个非常重要的修饰符,用于控制变量、方法或类的不可变性或不可覆盖性。下面我将通过文字解释和代码示例详细讲解 final 关键字的用法。

 1. final 关键字概述

final 关键字可以用于以下三种场景:

变量:用于声明常量,使其值在初始化后不能被修改。

方法:用于防止方法被子类重写(Override)。

类:用于声明一个类不能被继承。

 2. final 修饰变量

当 final 修饰变量时,表示该变量的值一旦被初始化后就不能被修改,即该变量为常量。

 2.1. final 修饰基本数据类型变量

public class FinalVariableExample {
    public static void main(String[] args) {
        final int MAX_SIZE = 100; // 声明一个常量
        System.out.println("MAX_SIZE: " + MAX_SIZE);
        
        // MAX_SIZE = 200; // 编译错误:无法为最终变量赋值
    }
}

解释:

MAX_SIZE是一个 final变量,一旦被赋值后,其值不能被修改。

如果尝试修改 MAX_SIZE的值,编译器会报错。

 2.2. final修饰引用类型变量

 

public class FinalReferenceExample {
    public static void main(String[] args) {
        final Person person = new Person("Alice");
        System.out.println("Person name: " + person.getName());
        
        person.setName("Bob"); // 可以修改引用对象的属性
        System.out.println("Person name after modification: " + person.getName());
        
        // person = new Person("Charlie"); // 编译错误:无法为最终变量赋值
    }
}

class Person {
    private String name;

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

    public String getName() {
        return name;
    }

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

解释:

 person 是一个 final 引用变量,表示 person 引用不能指向其他对象。

 但是,可以通过 person 引用修改对象的属性,例如 setName 方法。

 如果尝试让 person 引用指向另一个 Person 对象,编译器会报错。

 3. final 修饰方法

当 final 修饰方法时,表示该方法不能被子类重写(Override)

class Base {
    public final void display() {
        System.out.println("Base class display method");
    }
}

class Derived extends Base {
    // @Override // 编译错误:无法覆盖最终方法
    public void display() {
        System.out.println("Derived class display method");
    }
}

解释:

Base 类中的display 方法被final修饰,表示该方法不能被子类Derived 重写。

 如果子类尝试重写display 方法,编译器会报错。

 4.fina修饰类

当final修饰类时,表示该类不能被继承。

final class FinalClass {
    public void show() {
        System.out.println("FinalClass show method");
    }
}

// class DerivedFromFinal extends FinalClass { // 编译错误:无法继承最终类
//     public void show() {
//         System.out.println("DerivedFromFinal show method");
//     }
// }

解释:

 FinalClass 被 final 修饰,表示该类不能被其他类继承。

 如果尝试继承 FinalClass,编译器会报错。

 5. final 关键字的总结

 变量:

基本类型:final 变量是常量,值不可变。

引用类型:final 引用不能指向其他对象,但对象本身可以修改。

 方法:

final 方法不能被子类重写。

 类:

final 类不能被继承。

使用 final 关键字可以提高代码的安全性和稳定性,防止意外修改或重写关键代码。

 6. 完整示例

 

public class FinalKeywordExample {
    public static void main(String[] args) {
        // Final variable example
        final int MAX_VALUE = 100;
        System.out.println("MAX_VALUE: " + MAX_VALUE);
        
        // Final reference example
        final Person person = new Person("Alice");
        person.setName("Bob");
        System.out.println("Person name: " + person.getName());
        
        // Final method example
        Base base = new Base();
        base.display();
        
        // Final class example
        FinalClass finalClass = new FinalClass();
        finalClass.show();
    }
}

class Person {
    private String name;

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

    public String getName() {
        return name;
    }

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

class Base {
    public final void display() {
        System.out.println("Base class display method");
    }
}

final class FinalClass {
    public void show() {
        System.out.println("FinalClass show method");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值