📜  Java中的 final、finally 和 finalize(1)

📅  最后修改于: 2023-12-03 14:42:47.542000             🧑  作者: Mango

Java中的 final、finally和finalize

在Java中,final、finally和finalize是三个常见的关键字。它们具有不同的作用和用法。本文将对它们进行介绍。

final

final是一个关键字,用于声明一个变量、方法或类不可被修改或继承。被声明为final的变量只能赋值一次,一旦赋值,其值就不能再次改变。被声明为final的类不能被继承,被声明为final的方法不能被重写。

final变量

被声明为final的变量只能被初始化一次。它可以在声明变量时初始化,也可以在代码块中初始化。在Java中,一般将final变量用作常量,用全部大写字母表示。

final int a = 10;  //声明一个final变量并初始化为10
final String NAME = "Jack";  //声明一个final变量并初始化为Jack
final方法

被声明为final的方法不能被重写。例如,父类中的final方法在子类中不能被覆盖。

public class Animal {
    public final void eat() {
        System.out.println("I'm eating.");
    }
}

public class Cat extends Animal {
    //以下代码会报错:The method eat() cannot override the final method from Animal
    //public void eat() {
    //    System.out.println("The cat is eating.");
    //}
}
final类

被声明为final的类不能被继承。例如,下面的代码中,被声明为final的类不能被继承。

public final class Animal {
    public void eat() {
        System.out.println("I'm eating.");
    }
}

//以下代码会报错:Cannot inherit from final 'Animal'
//public class Dog extends Animal {
//    public void eat() {
//        System.out.println("The dog is eating.");
//    }
//}
finally

finally是一个关键字,在try...catch语句块中用于执行必须被执行的代码。例如,下面的代码中,无论在try块中是否抛出异常,finally块中的代码都将被执行。

try {
    //执行一些代码,可能会出现异常
} catch (Exception e) {
    //捕获异常
} finally {
    //无论上面的代码是否抛出异常,这里的代码都将被执行
}
finalize

finalize是Object类的一个方法,用于在垃圾回收器将对象从内存中删除之前执行一些必要的清理操作。例如,下面的代码中,在对象被GC回收时,finalize方法将被调用。

public class Animal {
    public void eat() {
        System.out.println("I'm eating.");
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("The Animal object is being garbage collected.");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.eat();
        animal = null;  //将对象置为null,以便被GC回收
        System.gc();    //手动调用垃圾回收器
    }
}