final 是权限修饰符, 表示最终的, 能修饰 变量, 方法,和类。
修饰变量: 变成了常量。
修饰方法: 变成了最终的方法,不能被重写,但是可以被正常调用。
修饰类: 变成的最终的类,不能有子类,但是可以被正常创建对象。
finally 是一个代码块,只能与我们的 try代码块连用,表示无论代码是否发生异常,finally里面的代码都要执行。
finally强制退出两种方式:System.exit()、
Finally把控细节:
package se.finals;
public class FinallyDemo {
public static void main(String[] args) {
FinallyDemo finallyDemo = new FinallyDemo();
// finallyDemo.finallyTestTryNoResult();
// System.out.println(finallyDemo.finallyTestTryResult());
/ /System.out.println(finallyDemo.finallyTestCatchResult());
System.out.println(finallyDemo.finallyTestFinallyResult());
}
// 1.都没有返回值
public void finallyTestTryNoResult() {
try {
System.out.println("try code block invoked");
//int i = 1 / 0;
throw new Exception();
} catch (Exception e) {
System.out.println("catch code block invoked");
} finally {
System.out.println("finally code block invoked");
}
}
// 2.try有返回值
public String finallyTestTryResult() {
try {
System.out.println("try code block invoked");
return "no result";
//throw new Exception();
} catch (Exception e) {
e.printStackTrace();
System.out.println("catch code block invoked");
} finally {
System.out.println("finally code block invoked");
}
return "result";
}
// 3.catch有返回值
public String finallyTestCatchResult() {
try {
System.out.println("try code block invoked");
//throw new Exception();
int i = 1 / 0;
return "no result";
} catch (Exception e) {
e.printStackTrace();
System.out.println("catch code block invoked");
return "error";
} finally {
System.out.println("finally code block invoked");
}
}
// 4.finally有返回值
public String finallyTestFinallyResult() {
try {
System.out.println("try code block invoked");
//throw new Exception();
int i = 1 / 0;
return "no result";
} catch (Exception e) {
e.printStackTrace();
System.out.println("catch code block invoked");
return "error";
} finally {
System.out.println("finally code block invoked");
return "success";
}
}
}