例外简介-章 2

本文深入探讨了在编程中处理异常的两种关键方法:重新抛出异常和捕获异常。通过实例展示了如何使用try-catch结构来捕获特定类型的异常,并解释了如何通过printStackTrace()方法获取异常的详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第2章:如何处理异常

调用程序时,有时会收到有关

未处理的异常类型 。 这意味着,某些东西会抛出(或可能会抛出)异常,但编译器不知道该怎么办。

您可以通过两种不同的方式来处理:

  1. 进一步抛出异常(将其传递到其他地方)
  2. 赶上异常并应对
根据您要执行的操作,当发生异常时,一个或另一个方法可能是最佳选择。

如果您只想进一步抛出该异常,则只需添加

向任何函数抛出Exception ,应将其继续传递。 那是简单的方法,通常就足够了。

例:


public void calculate(double a, double b, char func) throws Exception
{
    double result;
    switch(func)
    {
    case '+' : result = add(a,b); break;
    case '-' : result = sub(a,b); break;
    case '*' : result = mul(a,b); break;
    case '/' : result = div(a,b); break;
    default  : result = 0;
    }
    System.out.println(a + " " + func + " " + b + " = " + result);
}
public double add(double a, double b)
{
    return a+b;
}
public double sub(double a, double b)
{
    return a-b;
}
public double mul(double a, double b)
{
    return a*b;
}
public double div(double a, double b) throws Exception
{
    if (b==0) throw new Exception();
    return a/b;
} 
这将尝试计算调用的结果,例如calculate(2.,3。,'+')calculate(2.,3。,'/') 。 但是,theese被调用者将再次引起编译器未处理的异常类型Exception消息。

在某些时候,必须捕获并消除异常。 确切地说,这是通过try-catch-structure完成的:


try
{
    calculate(6.,0.,'/');
}
catch(Exception e)
{
    System.out.println("ERROR: You can't divide by zero!");
} 
因此,程序尝试计算结果并可以捕获异常并对之作出反应。

现在,有不同类型的异常,您可能想以不同的方式对它们做出反应。 演示此问题的最简单方法是以下程序:


public static void Thrower(boolean x) throws NullPointerException, ArrayIndexOutOfBoundsException 
    {
        if(x) throw new NullPointerException();
        else throw new ArrayIndexOutOfBoundsException();
    }
public static void main(String[] args) {
        try
        {
            Thrower(false);
        }
        catch(NullPointerException npe)
        {
            System.out.println("Caught a NullPointerException");
        }
        catch(ArrayIndexOutOfBoundsException  aioobe)
        {
            System.out.println("Caught an ArrayIndexOutOfBoundsException ");
        }
    } 
警告:应该写这样的程序一般。 函数应该做什么,但抛出异常。 那会创建非常难看的代码! 小费:

如果在某个时候您获得了Exception并想进一步了解它(例如它来自何处),那么有一种非常简单的方法:


...
catch(Exception e)
{
    e.printStackTrace();
} 
它可以给你这样的东西:
java.lang.NullPointerException
    at exceptionArticle.Division.Thrower(Division.java:63)
    at exceptionArticle.Division.main(Division.java:14)
返回第1章继续第3章

From: https://bytes.com/topic/java/insights/750352-introduction-exceptions-ch-2-a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值