try,catch,fially经典在这里

ysj300 2010-09-08 11:17:49
public void init() {
...全文
302 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
奋斗并快乐着 2010-09-09
  • 打赏
  • 举报
回复
想象一下函数是如何返回值的,汇编代码如何能实现,就理解了
ysj300 2010-09-09
  • 打赏
  • 举报
回复
以上大家都没有点到一个重要的地方。大家在讨论下咯。
ysj300 2010-09-09
  • 打赏
  • 举报
回复
先给大家说个知识点,大家在考虑下。
在try{}catch(){}finally中只要语句进了这个体中,就一定会执行finally部分,不管你有没有return之前,当try中出现return后,他会执行finally中的内容在return。
shehun 2010-09-09
  • 打赏
  • 举报
回复
难道第一个返回值是 3 ,第二个返回值是 1
猿敲月下码 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zyongsheng83 的回复:]
Java code
class Obj{
public int i;
public Obj(){
i = 1;
}
}

public static Obj init(){
Obj o = new Obj();
try{
o.i = 3;
retu……
[/Quote]

同15L的原理一样的,只不过这里操作的是对象中的变量,它是存在的. 跟随对象o一起存在
ysj300 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hanrivergo 的回复:]
finally方法必须要执行,但第一个方法的finally方法没有return语句。第二个方法里面的第一个return有作用,finally方法在try里有return语句的情况也会执行,因此将第一个return值取代。
[/Quote]你的解释不全。没有说到重点。
奋斗并快乐着 2010-09-09
  • 打赏
  • 举报
回复
class Obj{
public int i;
public Obj(){
i = 1;
}
}

public static Obj init(){
Obj o = new Obj();
try{
o.i = 3;
return o;
}finally{
o.i = 1;
}
}

public static void main(String[] args) {
System.out.println(init().i);
}


这样呢?
javaonetww 2010-09-09
  • 打赏
  • 举报
回复
学习。。
steadyman 2010-09-09
  • 打赏
  • 举报
回复
程序走到try{}块中的return后,就立马跳到finally{}中去执行!
eggno8 2010-09-09
  • 打赏
  • 举报
回复

//对BB对象进行操作时。
public static BB getBB() {
BB bb = new BB();
try {
bb.str += "try...";
return bb;
}
catch (Exception e) {
bb.str += "catch...";
return bb;
}
finally {
bb.str += "finally...";
//return bb;//如果是对象,这里的引用效果就导致finally里面用不用return都一样
}
}

看见这个问题试了试,顺便回帖领取每日10分可用分
kala888 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hanrivergo 的回复:]

finally方法必须要执行,但第一个方法的finally方法没有return语句。第二个方法里面的第一个return有作用,finally方法在try里有return语句的情况也会执行,因此将第一个return值取代。
[/Quote]
都是这个样子的。。。其实不用研究,很简单的嘛
yuwenbao 2010-09-09
  • 打赏
  • 举报
回复
呵呵,详细解释一下,注意一段话:The finally block always executes when the try block exits.
即当try块退出时,此时finally才会执行。而楼主的程序,try块什么时候退出呢?是在return语句时退出时。众所周知,return时,返回的是i的值,而不是i本身。此时,i 的值为3。但是赋值呢?是对i本身进行操作,所以finally中赋值改变的是i本身,并不影响return中对i的值的返回。有兴趣,也可以研究一下如下代码:

public int init() {
int i = 0;
try {
i = 3;
}catch(Exception e) {
i = 2;
return i;
}finally {
i = 1;
}
return i;
}
麦田捕手 2010-09-09
  • 打赏
  • 举报
回复
原来这样啊
qq7068127 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hanrivergo 的回复:]

finally方法必须要执行,但第一个方法的finally方法没有return语句。第二个方法里面的第一个return有作用,finally方法在try里有return语句的情况也会执行,因此将第一个return值取代。
[/Quote]
哦,这样啊。明白了!
t2xingzhe 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hanrivergo 的回复:]
finally方法必须要执行,但第一个方法的finally方法没有return语句。第二个方法里面的第一个return有作用,finally方法在try里有return语句的情况也会执行,因此将第一个return值取代。
[/Quote]

正解
gaoisbest 2010-09-09
  • 打赏
  • 举报
回复
学习 学习
sjh2007 2010-09-09
  • 打赏
  • 举报
回复
正好这2天在研究这个try{}catch{}finally{}呢
hanRivergo 2010-09-09
  • 打赏
  • 举报
回复
finally方法必须要执行,但第一个方法的finally方法没有return语句。第二个方法里面的第一个return有作用,finally方法在try里有return语句的情况也会执行,因此将第一个return值取代。
xuyang840117 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wyang1991 的回复:]
难道第一个返回值是 3 ,第二个返回值是 1 ??

那第二个方法里面的第一个return不就没什么作用了??

求解释!
[/Quote]
嗯你的答案正确
正常是try里的先走return 后面的运算,然后在走finlly
我就能理解到这里了。
我昨天才看的这个,还看到了 try 的开源
没太大必要研究那么底层吧
powerchuangwai 2010-09-09
  • 打赏
  • 举报
回复
其实把握住这个语法的本质就可以了
加载更多回复(9)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧