第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