学习异常处理-自定义异常类与finally无法修改retrun,throw等终止语句的内容
class MyException extends RuntimeException{
public MyException(){}
public MyException(String message){super(message);}
}
public class 异常处理 {
public static void main(String[] args) {
/*
五 finally代码块
起因: 垃圾回收机制不会回收任何物理资源,只会回收堆内存中的对象所占的内存
注意:
1 正常情况下finally语句永远可以得到执行,即使try块或catch块执行return或throw等方法退出的语句,现在知道为什么它叫finally了吧
(System.exit(1)执行导致退出虚拟机除外,当然没人这么干,还是记住那句话,正常情况下finally语句永远可以得到执行)
2 不要在finally块中使用或throw等导致方法退出的语句.(因为这将导致try块或catch块的return,throw语句失效.)
3 finally无法修改try或catch块中return返回的值和throw语句的内容,即使修改的return或throw语句中中变量的值也如此
因为return返回的值已经被执行了,产生了一个结果x,此时才执行finally语句,最后返回x结果.
(执行finally语句前return语句的返回值结果已经产生.)
*/
//下面语句输出说明finally无法修改该return返回值
System.out.println(testReturn());//吃饭了1111111111111111111111
try {
System.out.println(testThrow());
} catch (MyException e) {
//下面语句输出说明finally无法修改该throw语句内容
System.out.println(e.getMessage());//吃饭了2222222222222222222
}
}
public static String test(String s) {return s;}
public static String testReturn() {
String message = "吃饭了";
try {
return test(message) + "1111111111111111111111";
} finally {
message = "good";//修改message变量
}
}
public static String testThrow() {
String message = "吃饭了";
try {
throw new MyException(message + "2222222222222222222");
} finally {
message = "good";//修改message变量
}
}
}
运行结果如下:
吃饭了1111111111111111111111
吃饭了2222222222222222222
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报