final、finally、finalize

final

final是一个修饰符,也是一个关键字

final关键字是最终的意思,可以修饰成员方法、变量、类。

final修饰的特点

  • 修饰方法:表明该方法是最终方法,不能被重写。
  • 修饰变量(成员变量,局部变量):表明该变量是常量,不能再次被赋值。
  • 修饰类:表明该类是最终类,不能被继承。

修饰局部变量

  • 变量是基本类型:final修饰指的是基本类型的数据值不能发生改变。
  • 变量是引用类型:final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。

修饰方法

父类

public class Final {
     void method1() {
        System.out.println("method1");
    }

     final void method2() {
        System.out.println("method2");
    }
}

子类

public class FinalExtend extends Final {

    @Override
    void method1() {
        System.out.println("method11");
    }
    //错误!不能覆盖重写父类当中的方法
/*    @Override
    final void method2() {
        System.out.println("method22");
    }*/
}

测试

public class FinalClassDemo {
    public static void main(String[] args) {
        FinalExtend finalExtend = new FinalExtend();
        finalExtend.method1();
        finalExtend.method2();
    }
}

# 结果打印
//method11
//method2

修饰变量

局部变量

    public static void main(String[] args) {
        //基本数据类型
        final Integer id1;
        Integer id2;
        id1 = 1;
        //id1 = 2; 报错
        id2 = 3;
        id2 = 4;
        System.out.println(id1);
        System.out.println(id2);

        //引用类型
        final Student student = new Student();
        student.setName("name1");
        System.out.println(student.getName());
        System.out.println(student);
        student.setName("name2");
        System.out.println(student.getName());
        System.out.println(student);
    }

# 结果打印
1
4
name1
finalStudy.Student@1540e19d
name2
finalStudy.Student@1540e19d

成员变量

public class Student {
    private final Integer id=10;

    private String name ;

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

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

对于final修饰的变量,必须有默认值。要不直接赋值,要不使用构造方法赋值。不可写set方法。

修饰类

finally

finally是一个关键字,保证重点代码一定被执行的一种机制。

  • finally在异常处理时提供finally来执行任何清除操作,不管有没有异常被抛出或者捕获,finally块都会执行,通常用于释放资源。
  • finally块中如果有return语句,会覆盖try或catch中的return语句。
  • 关闭JDBC连接、保证unlock锁操作等
public class FinallyTest {
    public static void main(String[] args) {
        method1();
        System.out.println("method1执行结束=========");
        System.out.println("-----------------------------");
        String s2 = method2();
        System.out.println("method2返回=========" + s2);
        System.out.println("-----------------------------");
        String s3 = method3();
        System.out.println("method2返回=========" + s3);
        System.out.println("-----------------------------");
    }
    private static void method1() {
        try {
            System.out.println("开始执行");
            throw new Exception();
        } catch (Exception e) {
            System.out.println("出现异常");
        } finally {
            System.out.println("finally执行");
        }
    }

    private static String method2() {
        try {
            System.out.println("开始执行2");
            throw new Exception();
        } catch (Exception e) {
            System.out.println("出现异常2");
            return "异常返回2";
        } finally {
            System.out.println("finally执行2");
        }
    }
    private static String method3() {
        try {
            System.out.println("开始执行3");
            throw new Exception();
        } catch (Exception e) {
            System.out.println("出现异常3");
            return "异常返回2";
        } finally {
            System.out.println("finally执行3");
            return "finally返回2";
        }
    }
}

开始执行
出现异常
finally执行
method1执行结束=========
-----------------------------
开始执行2
出现异常2
finally执行2
method2返回=========异常返回2
-----------------------------
开始执行3
出现异常3
finally执行3
method2返回=========finally返回2
-----------------------------

不可执行的三种情况

1. try-cach 异常退出。
try{
system.exit(1)
}finally{
print(abc)
}

2. 无限循环
try{
  while(ture){
    print(abc)
  }
}finally{
print(abc)
}

3. 线程被杀死
当执行 try,finally 的线程被杀死时。finally 也无法执行。

finalize

finalize 是基础类 java.lang.Object 的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用,并且在 JDK 9 开始被标记为 deprecated。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值