您的位置:首页>软件开发>C/C++>

C / C++的和Java的异常机制[2]

[ 来源:CSDN | 更新日期:2007-7-15 20:19:12 | 评论 0 条 | 我要投稿 ]
一个简单例子:
  public class MyException extends Exception
  ...{
  MyException(String str)
...{
super(str);
 }
 }

 public class MyTest
 ...{
 public void f()throws MyException
...{
throw new MyException("f() exception");
 }
 }
 public class Main
 ...{
public static void main(String[]args)
...{
try
...{
new MyTest().f();
}catch(MyException me)
...{
System.out.println(me);
}finally
...{System.out.println("finally"); 字串9
 }
 }
 }
如果可能发生多种异常时,可用多个catch语句捕捉不同类型的异常,从第一个catch开始匹配异常,如果异常是该类或该类的子类,则匹配。如果要匹配所有的异常,则在catch中捕捉 Throwable 类,因为其它所有异常类都是其子类,都可匹配。其中 finally块是程序必然会执行的块,除非JVM突然退出了。

  C++的异常机制

在C的时候,错误处理要 setjmp() / longjmp() 通过。而C++里, setjmp() / longjmp() 已经不能用了。C++的异常可以是类,也可以是基本类型(如int)。在标准库中,也存在exception类。但是,C++并没有要求我们自定义的异常要继承某个类。

  一个简单例子:

 #include
 using namespace std;

 #ifndef NULL
 #define NULL 0
 #endif
 class MyException
 ...{ 字串6
const char * const msg;
public:
MyException(const char* const _msg=NULL):msg(_msg)...{};
void print()
...{
cout }
 };
 void f()
 ...{
throw MyException("something bad happened");
 }

 int main()
 ...{
try
...{
f();
}catch(MyException me)
...{
me.print();
}
system("pause");
return 0;
 }
  C++的异常捕捉匹配和JAVA的基本相同,只是C++没有 finally 块。要捕捉所有异常的方法是用 catch(...) 语句。

字串8


  以上所述都只是JAVA和C++的异常机制的皮毛。对JAVA的异常,觉得自己理解得还可以,懂得什么是捕捉,什么是抛出异常、传播异常和包装异常等。但是对C++的异常,可以说是刚刚接触,刚才看了 Thinking in C++ 异常处理的一章。想起JAVA的异常机制,就作个对比,写个笔记。


Tags:
责任编辑:
您的评论
用户名: 新注册) 密码: 匿名评论 [所有评论]

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为