我目前正在为考试做准备,并且正在执行以下任务:
我想捕获“ ArrayIndexOutOfBoundsException”。
我有以下课程:
Console.WriteLine(positiveRatio.ToString("0.000000");
并从主要方面:
class Util {
// get the smallest number of the given array
@SuppressWarnings("unused")
public static int minimum(int[] values) {
try {
int min = values[0];
if (values == null) {
throw new NullPointerException();
}
if (values.length > 0) {
for (int i = 1; i < values.length; i++) {
if (values[i] < min) {
min = values[i];
}
}
return min;
} else {
throw new ArrayIsEmptyException();
}
} catch (NullPointerException e) {
System.out.println("Das ist kein Array");
} catch (ArrayIsEmptyException e) {
System.out.println("Das Array ist leer.");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
如何捕获此输出的异常:
public class UtilTest {
// Testprogramm
public static void main(String[] args) {
System.out.println("Die kleinste Zahl ist: " + Util.minimum(new int[] { 1, 6, 4, 7, -3, 2 }));
System.out.println("Die kleinste Zahl ist: " + Util.minimum(new int[0]));
System.out.println(Util.minimum(null));
}
}
感谢您的帮助!
答案 0 :(得分:4)
发生错误时,代码立即跳出。
在您的代码中,您正在做的事情在某些情况下会导致错误(例如,如果数组变量指向空(为null),或者它为空数组),然后检查这些条件,这毫无意义。
这就像先过马路,然后检查是否有汽车驶来。在您检查之前,您已经已经杀死道路,或者,如果您已经安全地穿过马路,则检查毫无意义。
因此,将其切换。
具体来说,此代码:int min = values[0];
如果NullPointerException
为空,将抛出values
,如果ArrayIndexOutOfBoundsException
为空数组,将抛出values
。
更一般地说,这是
catch (Exception e) {
e.printStackTrace();
}
是难以置信的错误代码。对于初学者来说,这意味着代码将在错误发生后继续运行,因此即使出现1个错误,您的日志中仍然充满了大量错误消息,更重要的是,异常包含5个有用的信息位:其类型,其消息,堆栈跟踪,其因果链以及附加的抑制异常。
最后一个通常不是特别有趣,但是其他四个非常有用。您将丢掉4个有用的东西中的3个,仅打印堆栈跟踪。除此之外,您还需要使用这种样式在任何地方重复代码。
所以不要。
永远不要编写仅捕获异常或将其捕获的捕获异常的代码。只是..不要抓住它,让顶级异常处理程序(打印所有有用的信息,然后关闭线程,这是一个相当不错的默认值)来处理它。如果是检查异常,请在方法签名中添加throws X
,其中X是检查异常。例如:
好的代码:
public void deleteFile(String fileName) throws IOException {
Files.delete(Paths.get(fileName));
}
错误代码:
public void deleteFile(String fileName) {
try {
Files.delete(Paths.get(fileName));
} catch (IOException e) {
System.err.println("Something went wrong deleting file!");
e.printStackTrace();
}
}
第二段代码:
那只是它出了什么问题的一个示例。