嗨,大家好
【Java 面试合集】
又来了。今天给大家分享的主题是final 以及finally 不同
.
很简单,但是确实很细节哦,好了废话不多说,让我们开始吧
final
首先我们要知道
final
是一个修饰符,可以修饰属性,方法,类等
- 修饰基本数据类型后,不能再次修改
- 修饰引用数据类型后,不能修引用。但是可以修改对象内容
基本数据类型
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"; // 但是可以这样赋值}
}
使用修饰符
final
修饰类后,类不能被继承。
final class Parent001 {
}public class Test002 extends Parent001 {
}
使用修饰符
final
修饰方法后,方法不能被重写
class Parent001 {public final void test001() {}
}public class Test002 extends Parent001 {public void test001() {}
}
修饰的参数列表,跟修饰成员属性保持一致的
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;}
}
一般跟static 结合使用。用来给全系统提供常用。
public final class Math {public static final double PI = 3.14159265358979323846;
}
finally
- 其实是
try catch finally
关键字。其大概的含义是:无论是否异常,都会执行finallyfinally
代码块 会在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 之前执行的。
其实
final
以及finally
除了书写相似外,毛关系没有
。