【Java 面试合集】final 以及finally 不同

final 以及finally 不同

1. 概述

嗨,大家好【Java 面试合集】又来了。今天给大家分享的主题是final 以及finally 不同.
很简单,但是确实很细节哦,好了废话不多说,让我们开始吧

2. final

首先我们要知道final 是一个修饰符,可以修饰属性,方法,类等

2.1 修饰成员属性

  • 修饰基本数据类型后,不能再次修改
  • 修饰引用数据类型后,不能修引用。但是可以修改对象内容

基本数据类型

public class Test001 {
	final int age = 10;
    age = 20; // 不能进行修改
}

一旦使用final 修饰基本数据类型后,不能再次修改。

在这里插入图片描述

引用数据类型

public class Test001 {
    final Person p = new Person();

    public void test002() {
        p = new Person(); // 报错。
        p.name = "20"; // 但是可以这样赋值
    }
}

2.2 修饰类

使用修饰符final 修饰类后,类不能被继承。

final class Parent001 {
}

public class Test002 extends Parent001 {
}

在这里插入图片描述

2.3 修饰方法

使用修饰符final 修饰方法后,方法不能被重写

class Parent001 {
    public final void test001() {

    }
}

public class Test002 extends Parent001 {
    
    public void test001() {

    }
}

在这里插入图片描述

2.4 修饰参数列表

修饰的参数列表,跟修饰成员属性保持一致的

public class Test003 {
    public static void main(String[] args) {
        test001(1, 2);
    }
    public static void test001(final int a, int b) {
        a = 2; // 不能重新赋值
        b = 3;
    }
}

2.5 常用方式

一般跟static 结合使用。用来给全系统提供常用。

public final class Math {
	public static final double PI = 3.14159265358979323846;
}

3. finally

  • 其实是try catch finally 关键字。其大概的含义是:无论是否异常,都会执行finally
  • finally 代码块 会在try 代码块的return之前执行。
  • 如果finally代码块进行返回了,try 代码块中就无法返回了

实例1

public class Test004 {
    public static void main(String[] args) {
        System.out.println(test001());
    }

    public static String test001() {
        try {
            System.out.println("test001-1");
            return "test001-1-r";
        } finally {
            System.out.println("test001-2");
            return "test001-2-r";
        }
    }
}

上述代码的打印结果如下:

# test001-1
# test001-2
# test001-2-r

通过上述示例,如果finally代码块返回值后,try 代码块就不会返回了

实例2

public class Test004 {
    public static void main(String[] args) {
        System.out.println(test001());
    }

    public static String test001() {
        try {
            System.out.println("test001-1");
            return "test001-1-r";
        } finally {
            System.out.println("test001-2");
        }
    }
}

上述代码打印结果如下:

// test001-1
// test001-2
// test001-1-r

上述示例代码说明:如果try代码块正常的话,finally 代码块是在return 之前执行的。

4. 总结

其实final 以及finally除了书写相似外,毛关系没有

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值