关于java异常方面的提问!

heroleader 2012-04-02 12:39:59
public classTest {

public static void main(String[] args) {
System.out.println(newTest().test());
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
++x;
}
}
}
为什么执行结果是1呢,finally执行了没有,程序执行到哪里结束的???
请高手告诉我执行详细过程!!!谢谢了!!!
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Brave_ly 2012-04-02
  • 打赏
  • 举报
回复
try-catch-finally语句块里面finally语句块无论如何是会执行的,程序在首次进入try语句块的return的时候,因为后面有finally的语句块,所以先把把x=1的值保存到缓冲区里了,然后再执行finally语句块里的自增,而后程序就直接将缓冲区里的值返回,所以输出的结果就是1咯。
找工作中 2012-04-02
  • 打赏
  • 举报
回复
会从上而下,按照编译顺序,先执行return,再执行finally
sdojqy1122 2012-04-02
  • 打赏
  • 举报
回复

//finally肯定是执行的
public class Test {

public static void main(String[] args){
System.out.println(new Test().test());
}
Integer test(){
Integer x = new Integer(1);
try{return x;}//如果是基本类型,就是return 1;待命,等finally执行完,在接着//return回去,如果是对象,return的是一个地址引用,然后用print的时候调用了对象的toString方法。所以结果是2.
finally{x.setInt(2);}//如果这里直接用x = new Integer(2);打印出的结果还是1,因为这个x地址已经变了,不影响上个地址int i的结果,所以调用toString时打印的是上个i的值。
}
}
class Integer{
int i;
Integer(int i){
this.i = i;
}
public void setInt(int j) {
this.i = j;
}
public String toString(){
return i+"";
}
}
//看完这个或许对你有帮助
wangdong20 2012-04-02
  • 打赏
  • 举报
回复
return x;
应该就直接结束程序了吧
sun_is_me 2012-04-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
引用楼主 的回复:
public classTest {

public static void main(String[] args) {
System.out.println(newTest().test());
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
……

++ 执行了,你自……
[/Quote]
如想深入讲究,建议看就jvm·
sun_is_me 2012-04-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
public classTest {

public static void main(String[] args) {
System.out.println(newTest().test());
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
……
[/Quote]
++ 执行了,你自己debug看一下就知道了,第一个return,就应该将它的返回值给返回了

62,614

社区成员

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

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