
C++中try是用来包围可能出现问题的代码区域的一个函数。和catch结合使用的,来捕捉程序中的异常。
捕获异常的代码一般如下:
try {
throw E();
}
catch (H h) {
//何时我们可以能到这里呢
}
1如果H和E是相同的类型
2如果H是E的基类
3如果H和E都是指针类型,而且1或者2对它们所引用的类型成立
4如果H和E都是引用类型,而且1或者2对H所引用的类型成立
从原则上来说,异常在抛出时被复制,我们最后捕获的异常只是原始异常的一个副本,所以我们不应该抛出一个不允许抛出一个不允许复制的异常。
此外,我们可以在用于捕获异常的类型加上const,就像我们可以给函数加上const一样,限制我们,不能去修改捕捉到的那个异常。
还有,捕获异常时如果H和E不是引用类型或者指针类型,而且H是E的基类,那么h对象其实就是H h = E(),最后捕获的异常对象h会丢失E的附加携带信息。
将try catch语句块写入到一个while(标志)循环中,当执行已经成功后记得在代码中将标志的值置为false即可退出循环。
还有一个办法,直接使用goto强制跳转也是可以的,但缺点是程序容易陷入死循环,而其不易读。
C#中通常使用try-catch语句来捕获和处理异常。下面我们看看try-catch语句的使用语法。
try
{
可执行语句块;
}
catch
(
Exception
e
)
{
异常处理语句;
throw;
}
1、try语句块中放置可能存在异常的代码块。若执行try语句块时有异常发生,则程序抛出的异常,由catch语句捕获;若try语句块没产生异常,程序会直接跳出try-catch语句。
2、catch语句块紧跟在try语句块后面,它可以捕获try语句块中抛出的异常。注意catch关键字后有一对小括号,小括号中需放置异常类参数,参数名是可省略的。当try语句抛出异常时,抛出的异常类型会与catch语句中的异常类型进行匹配,若匹配成功,则执行catch语句块中的内容。
3、Exception是所有异常类的父类,它能和所有异常类匹配。前一小节抛出的IndexOutOfRangeException异常类也是Exception的子类。需注意的是:如果catch语句块不带参数,那么catch语句也能捕获所有异常。
4、throw关键字表示抛出一个异常,可省略。
同时try-catch语句通常和finally语句一起使用,具体的使用方法可以参考秒秒学网站讲解异常的那一章,其实上面的内容我也是从那里学来的。
try就像一个网,把try{}里面的代码所抛出的异常都网住,然后把异常交给catch{}里面的代码去处理,最后执行finally之中的代码。
无论try中代码有没有异常,也无论catch是否将异常捕获到,finally中的代码都一定会被执行。
例如:当除数为0时,编译不会报错,如果没有try/catch的话,程序直接崩溃。用try/catch的话,则可以让程序运行下去,并且输出为什么出错。
扩展资料
java中trycatch的使用原则
1、当代码中可能会遇到的异常需要用try{ }catch{Exception e}来处理,否则导致程序崩溃。
2、不要在for循环里面嵌套try catch子句。
3、尽可能的减少try catch子句的嵌套,会影响性能。
4、同一个try子句中多个catch时,异常处理原则。
当一个try块中包含众多语句,可能抛出多种不同的异常,只有通过多个catch块来捕获不同的异常。而如果两个异常存在继承关系,应该把子类异常放在父类异常的前面来捕获,或者把最小范围异常放在最前面 ,范围大的放在后面。
因为是按照catch块从上往下匹配,当它匹配某一个catch块的时候,就直接进入到这个catch块里面去了,后面在再有catch块的话,它不做任何处理,直接跳过去,全部忽略掉。
如果有finally的话进入到finally里面继续执行。Exception这个异常的根类一定要刚在最后一个catch里面,如果放在前面或者中间,任何异常都会和Exception匹配的,就会报已捕获到异常的错误。
class TestTryCatch
{
static int GetInt(int[] array, int index)
{
try
{
return array[index];
}
catch (SystemIndexOutOfRangeException e) // CS0168
{
SystemConsoleWriteLine(eMessage);
//set IndexOutOfRangeException to the new exception's InnerException
throw new SystemArgumentOutOfRangeException("index parameter is out of range", e);
}
}
}
MSDN实例,看看吧。
try
{
//这里是要实现的程序代码
}
finally
{
//这里是不管try里有没有错误都回执行的代码
//注意:这里不能用 return 停止程序
}
catch
{
//这里是try有错误时执行的代码
//这可用return停止程序
}
顺便说下,请把要在整个代码块加try,这样程序回执行比较慢的。
因为加了try编译程序回多加些异常处理程序,编译出来的程序回比较大。
应该在你认为可能发生错误的地方加try
以上就是关于C++ try是什么全部的内容,包括:C++ try是什么、c# 程序中try {}catch{}用法;如何在catch抛出异常后重新执行try、C#中如何处理异常怎么使用try-catch语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)