Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 关于异常的问题
wslss007





发贴: 35
积分: 0
于 2005-10-20 11:53 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
public class catchDemo
{
  public static void main(String args[]){
    catchDemo object=new catchDemo();
    try
    {
      System.out.println("trying");
      object.sampleMethod();
      System.out.println("trying after call");
    }
    catch (Exception e)
    {
      System.out.println("catching");
      System.out.println(e.getMessage());
    }
  }
  public void sampleMethod() throws Exception
  {
    System.out.println("starting sample Method");
    throw new Exception("From sampleMethod with love");
  }
}

请看如上程序,为什么输出时候没有“trying after call",我的理解是先执行try 语句,然后看throw子句中定义了一个异常,然后再跳到catch 语句来捕获异常,可以如此理解吗?



作者 Re:关于异常的问题 [Re:wslss007]
Jcat

熊猫的猫



发贴: 266
积分: 16
于 2005-10-20 17:40 user profilesend a private message to usersend email to Jcatsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
在try块中出现异常时,程序会直接跳到catch块,并不将try块执行完。

如果想实现你的“理解”,可以在最后加一个finally块,此块必然被执行
finally{
System.out.println("trying after call");
}



编程,游泳,睡觉--SleepingCat
作者 又一个异常问题 [Re:wslss007]
why

問題兒童

总版主


发贴: 4629
积分: 388
于 2005-10-20 21:09 user profilesend a private message to usersend email to whysearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
wslss007 posted on http://www.cjsdn.net/post/view?bid=1&id=160223

public class hi
{
public static void main(String args[]){
try{
sampleMethod(99);
}
catch (Exception e)
{
System.out.println("caught in main");
}

}
public static void sampleMethod(int n)throws Exception
{
try
{
if(n>0)
throw new Exception();
else
System.out.println("aaa");
}
finally {
System.out.println("bbb");
}
}
}

以上输出为什么先是“bbb”,然后才是“caught in main”



作者 Re:关于异常的问题 [Re:wslss007]
Jcat

熊猫的猫



发贴: 266
积分: 16
于 2005-10-21 13:34 user profilesend a private message to usersend email to Jcatsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我将您的方法的代码直接写到调用方法处,这样可能有助于您看清“层”。

我的理解如下:
1.书上对关键字finally的描述:Runs its code before terminating the program
2.单就这段代码来说,它是被结构化的顺序的执行的。(面向过程)
3.可以有三种形式的组合:try-catch,try-finally,try-catch-finally
4.任何一个组合都是一个整体,您不能割裂的看问题。

具体解释:
1.当第二层的try抛出一个异常时,它将要terminate第二层的代码,before terminating the code,finally块将被执行。
2.然后第一层的try继续将这个异常抛出,如果后面(您调用函数的位置的后面)还有代码将不会被执行。
3.这时第一层的catch块捕获了这个异常,并执行catch块中的代码。
public class Application1 {
public static void main(String args[]) {
int n = 99;
try { //第一层
try { //第二层
if (n > 0) {
throw new Exception();
} else {
System.out.println("aaa");
}
} finally { //第二层
System.out.println("bbb");
}
} catch (Exception e) { //第一层
System.out.println("caught in main");
}
}
}


Jcat edited on 2005-10-21 21:34

编程,游泳,睡觉--SleepingCat
作者 Re:关于异常的问题 [Re:wslss007]
wslss007





发贴: 35
积分: 0
于 2005-10-21 21:21 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
好,明白了,谢谢。



flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923