C++ ——关于try...catch 异常抛出、捕获和处理过程

关于try...catch的三个题目

 注:1.如果我们在执行try块内的代码或在try块内的代码调用任何函数期间,没有引起异常,那么程序将继续执行整个try...catch后面的语句

2.如果我们在执行try块内的代码或在try块内的代码调用任何函数期间,有异常被抛出并被catch捕获处理完成后,其余的catch语句不会再执行,也不会回到抛出异常的位置执行,程序将继续执行try...catch后面的语句

例一、阅读程序,写出输出结果

#include <iostream>
using namespace std;

class MyException 
{
    public :
        MyException(string msg) { err_msg = msg; }
        void ShowErrorMsg() { cout<<err_msg<<endl; }
        ~MyException() { }
    private:
        string err_msg;
};
void KindsOfException(int type) throw (MyException,int)//throw()括号里面是throw可能抛掷的所有异常类型 
{  
    switch(type)
	{  //只有当参数是0或1的时候才抛出异常 
        case 0:  
            throw MyException("Exception! Type of Class");
            break;  
        case 1:  
            throw 2019;
            break;    
        default: //其它时候不抛出异常,try是检查异常的,没有异常自然不执行try...catch了 
            break;
    }
}
int main( )
{
	int type[3] = {1, 2, 0};
	for ( int i = 0; i < 3; i++ )
	{
		try 
		{
			KindsOfException(type[i]);  
		}
		catch(MyException myE)
		{   
			myE.ShowErrorMsg(); 
			continue;
			//for循环中执行continue会先跳到上面的i++,再执行i<3的判断条件...
		}
		catch(int i)
		{
			cout<<"Exception! Type of Int -->"<<i<<endl; 
			continue;
		}
		cout<<"No Exception"<<endl;
	}
    return 0;  
}

 输出结果:

例二、阅读程序,写出输出结果

#include <iostream>
using namespace std;
int divide(int x, int y) {
	if (y == 0)
		throw x;
	return x / y;
}
int main() {
	try {
		cout << "8/3 = " << divide(8, 3) << endl;
		cout << "6/0 = " << divide(6, 0) << endl;
		cout << "9/2 = " << divide(9, 2) << endl;
	} catch (int e) {
		cout << e << " is divided by zero!" << endl;
	}
	cout << "That is ok." << endl;	
}

 输出结果:

两种,应该是版本不同,都对

第一种:

第二种:

例三、阅读程序,写出输出结果

#include <iostream>
#include <cmath>
#include <stdexcept>
using namespace std;
double area(double a, double b, double c) {
	if (a <= 0 || b <= 0 || c <= 0)
		throw invalid_argument("the side length should be positive");
	if (a + b <= c || b + c <= a || c + a <= b)
		throw invalid_argument("the side length should fit the triangle inequality");
	double s = (a + b + c) / 2;
	return sqrt(s * (s - a) * (s - b) * (s - c));
}
int main() {
	double a, b, c;		
	cin >> a >> b >> c; //输入1 2 4
	try {
		double s = area(a, b, c);	
		cout << "Area: " << s << endl;
	} catch (exception &e) {
		cout << "Error: " << e.what() << endl; 
	}
}

 输出结果:

 以上内容供自己期末复习使用,如果有错误,还请大家多多指教~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java中,我们可以使用`throw`关键字在`try-catch`块中抛出异常。`throw`关键字用于抛出一个异常对象,可以是Java内置的异常类,也可以是自定义的异常类。 下面是一个简单的示例,演示了如何在`try-catch`块中抛出一个异常对象: ```java public static void main(String[] args) { try { int result = divide(10, 0); System.out.println(result); } catch (ArithmeticException e) { System.out.println("除数不能为0"); throw e; // 抛出异常对象 } } public static int divide(int dividend, int divisor) { if (divisor == 0) { throw new ArithmeticException("除数不能为0"); // 抛出异常对象 } return dividend / divisor; } ``` 在上面的示例中,`divide`方法用于计算两个整数的商,如果除数为0,则抛出一个`ArithmeticException`异常对象。在`main`方法中,我们调用`divide`方法,如果出现异常,则在`catch`块中输出错误信息,并将异常对象重新抛出。这样,在`main`方法中的调用者就可以知道发生了异常,并进行相应的处理。 需要注意的是,在抛出异常对象时,我们可以选择将其原样抛出,也可以使用`throw new`语句重新创建一个异常对象抛出。如果使用`throw new`语句重新创建一个异常对象,则可以在异常对象的构造函数中传入自定义的错误信息,使异常信息更加明确。 ### 回答2: 在Java中,try-catch语句块用来捕捉并处理可能抛出异常。当代码块中的语句发生了异常try语句块会立即停止执行并进入catch语句块,从而避免程序崩溃。 在try语句块中,我们可以放置可能会抛出异常的代码。如果在try语句块内的代码执行过程中出现异常,程序会立即跳转到catch语句块,而不会继续执行try块中后面的代码。 catch块会定义异常处理的相关逻辑。当catch语句块中的异常类型与try语句块中的异常类型匹配时,catch语句块中的代码将会执行。通过处理异常,我们可以采取相应的措施来恢复程序的正常执行,如输出错误信息、记录日志、进行界面提示等。 在catch语句块中,我们可以使用捕获到的异常对象来获取异常信息,并根据具体情况进行处理。异常对象包含了有关异常类型、引发异常的方法以及异常发生的位置等信息。 通过在catch语句块中捕获异常并处理,我们可以有效地保护程序不会崩溃,同时能够提供更好的用户体验。因此,在开发中,我们通常会将可能引发异常的代码放置在try块中,并在catch块中处理异常。 总的来说,try-catch语句块提供了一种机制,使我们能够在代码中捕获并处理异常,以保证程序的正常执行。这样我们可以更好地控制程序的流程和应对可能出现的错误。 ### 回答3: 在编程中,我们经常会使用try-catch语句来捕获并处理异常try-catch语句由try块和catch块组成。在try块中,我们可以放置可能会引发异常的代码。一旦try块中的代码引发了异常,程序会跳转到catch块,并执行catch块中的代码来处理该异常。 通过在catch块中捕获异常,我们可以避免程序因为未处理的异常而终止。捕获后,我们可以根据具体情况选择进行异常处理,例如输出错误信息、记录日志、修复异常或重新抛出异常。 在catch块中,需要使用捕获异常类型的参数来接收抛出异常。可以使用多个catch块来捕获不同类型的异常,以便针对不同类型的异常执行不同的处理逻辑。 try-catch语句的使用可以提高程序的健壮性和可靠性,有效地防止异常导致的程序崩溃或数据丢失。它还可以帮助我们进行调试和定位异常产生的原因,提高程序维护的效率。 总之,通过使用try-catch语句,我们可以捕获抛出异常,并根据具体情况进行处理,从而提高程序的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值