Topic: 关于异常的问题

  Print this page

1.关于异常的问题 Copy to clipboard
Posted by: wslss007
Posted on: 2005-10-20 11:53

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 语句来捕获异常,可以如此理解吗?

2.Re:关于异常的问题 [Re: wslss007] Copy to clipboard
Posted by: Jcat
Posted on: 2005-10-20 17:40

在try块中出现异常时,程序会直接跳到catch块,并不将try块执行完。

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

3.又一个异常问题 [Re: wslss007] Copy to clipboard
Posted by: why
Posted on: 2005-10-20 21:09

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”

4.Re:关于异常的问题 [Re: wslss007] Copy to clipboard
Posted by: Jcat
Posted on: 2005-10-21 13:34

我将您的方法的代码直接写到调用方法处,这样可能有助于您看清“层”。

我的理解如下:
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");
}
}
}

5.Re:关于异常的问题 [Re: wslss007] Copy to clipboard
Posted by: wslss007
Posted on: 2005-10-21 21:21

好,明白了,谢谢。


   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