Java关键字之final、finally、finalize

一、final——终极修饰符

  • 修饰属性:被final修饰符修饰的属性局部变量都不能被重新赋值(见下例一),所以为了节省内存空间将被final修饰的属性同时被static修饰,习惯书写顺序为 static final,如果定义为static,则强调只有一份。(见下例二)
    • 修饰基本数据类型,可以认为该数据是常量
    • 修饰类的对象,可以认为该数据和其所指向的对象之间的绑定关系不可更改,但该数据指向的对象的属性是可更改的,即对象的引用不会改变,但对象本身可以改变

注: final是唯一一个既可修饰属性又可以修饰局部变量的修饰符

  • 修饰方法:不能在子类中被覆盖,但可以被重载!! 使用final修饰方法有两个目的,一个是防止继承类对其进行更改,另外一个原因是效率,在早期的java版本中,会将final方法转为内嵌调用。但若方法过于庞大,可能在性能上不会有多大提升。因此在最近版本中,不需要final方法进行这些优化了。
  • 修饰类:不能被继承
    • 如果一个类被final修饰,说明这个类不可能有子类,类中的方法也一定是final方法。

【例一】

class A {
   
    private int i;
    A(int a) {
    i = a; }
    private int x = 9;
    void setI(int i) {
    this.i = i; }
}
public class BlankFinal {
   
    private final int j;
    private final A a;
    public BlankFinal() {
   
        j = 1;
        a = new A(1);
    }
    public static void main(String args[]) {
   
        final int con = 100;
        con = 1000; // The final local variable can't be assigned.
        BlankFinal b = new BlankFinal();
        b.j = 5; // The final field BlankFinal.j can't be assigned.
        b.a = new A(3); // The final field BlankFinal.a can't be assigned.
        b.a.setI(10);
        b.x++;
    }
}


【例二】static final 和 final

class TestFinal {
   
    private static Random ran = new Random();
    private static final int a = ran.nextInt(99);
    private final int b = ran.nextInt(99);

    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: final 是一个修饰符,用来修饰类、变量或者方法,有多种不同的用法,它可以防止派生类修改父类中的方法。finally 是异常处理语句结构中的一部分,它总是执行,即使catch块没有捕获异常,或者在try块中发生return语句或抛出异常。finalize 是一种特殊的方法,它在垃圾收集器准备好回收对象时执行,它允许用户在垃圾收集器清理对象之前做一些清理工作。 ### 回答2: 在Java中,finalfinallyfinalize是三个不同的关键字,具有不同的用途和含义。 1. finalfinal是一个修饰符,可以应用于变量、方法和类。当应用于变量时,代表该变量为常量,即不可被修改。当应用于方法时,代表该方法不可被子类重写。当应用于类时,代表该类不可被继承。final关键字用于表示一个最终的、不可变的实体。 2. finallyfinally是一个关键字,用于定义在try-catch语句中的一个代码块。无论是否发生异常,finally语句块中的代码总是会被执行。finally块通常用于关闭资源或释放资源,以确保资源的正常回收。 3. finalizefinalize是一个方法,属于Object类的一个方法。它在垃圾回收器清除对象之前调用。finalize方法可以被子类重写,用于在对象被销毁之前进行善后操作,例如释放占用的系统资源。但在现代Java编程中,应尽量避免使用finalize方法,而是使用其他方式手动释放资源,因为finalize方法的执行时间是不确定的,可能会造成性能上的问题。 总结起来,final是用来修饰最终的实体,finally是用来确保代码块一定会被执行,而finalize是一种供垃圾回收器回收对象前进行善后操作的机制。 ### 回答3: 在Java中,finalfinallyfinalize是三个被经常混淆的概念,它们的作用和用法完全不同。 1. finalfinalJava中的关键字,用于修饰变量、方法和类。当修饰一个变量时,表示该变量的值不能被修改。当修饰一个方法时,表示该方法不能被子类重写。当修饰一个类时,表示该类不能被继承。final关键字的作用是为了保证数据的安全性和程序的稳定性。 2. finallyfinally也是Java中的关键字,用于定义一个块,无论是否发生异常都会执行该块中的代码。finally块通常用于释放资源,例如关闭文件、数据库连接等。无论try或catch块中是否有return语句,finally块都会被执行。 3. finalizefinalize是Object类中的一个方法,在Java中用于垃圾回收机制。当一个对象不再被引用时,垃圾回收器会在适当的时机调用该对象的finalize()方法,允许对象在被销毁前进行必要的清理操作,例如关闭资源等。但是,由于finalize()方法的调用时间不确定且不可靠,不建议在程序中过度依赖该方法。 综上所述,final关键字用于修饰变量、方法和类,表示不可改变、不可重写和不可继承;finally关键字用于定义一个块,无论是否发生异常都会执行其中的代码;finalize()方法用于在对象被销毁前进行必要的清理操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值