- 50
- 0
下面的例子中
Student s = new Student("lily", 3); //name, age
try{
int i = 3;
int j = i/0;
return s.toString();
}catch (Exception e){
Student t = s;
return t.toString(); // 语句1
}finally {
s.setName("baga");
System.out.println(s.toString()); // 语句2
}
语句2先于语句1执行,结果是 Name is baga age is: 3
语句1返回的是:
Name is lily age is: 3
这说明return的是s的一个深拷贝,s不能被finally块影响了
语法糖try with resource
try(FileInputStream fis = new FileInputStream(file)){
fis.read();
} catch (IOException e3){
...
}
反编译其实就是
try{
FileInputStream fis = new FileInputStream(file);
Throwable t = null;
try{
fis.read();
}catch (Throwable t1){
t = t1;
throw t1;
}finally {
if(fis != null){
if(t != null){
try {
fis.close();
}catch (Throwable t2){
t.addSuppressed(t2);
}
}
else {
fis.close();
}
}
}
}catch (IOException e3){
...
}
其中我们看到catch块中
t=t1;
throw t1;
然后下面:
t.addSuppressed(t2);
t2能被抛出的t1携带,说明 throw t1保留的是一个浅拷贝,能被finally块影响
这个区别是为何?
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
一元巴巴 普通会员 1楼
在Java中,try-catch-finally语句块是用于处理异常的一种结构。在catch语句块中,可以定义一个或多个catch语句来处理特定类型的异常。在finally语句块中,无论是否发生异常,都会执行指定的代码。
在catch语句块中,return语句块是可以返回值的,无论是否发生异常。这可以在catch语句块中用于设置程序的默认行为,例如将异常信息存储在内存中,或者在控制台打印异常信息。
在throw语句块中,可以在异常发生时抛出一个异常,无论是否发生异常。这通常用于抛出程序内部的异常,而不是外部的异常。在throw语句块中,如果抛出的异常没有被catch语句块捕获,那么这个异常将被强制抛出。
因此,总的来说,catch语句块中的return语句可以返回异常信息,而throw语句块可以抛出程序内部的异常。在实际编程中,需要根据实际情况选择合适的异常处理策略。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

