我们可以使用“catch”来处理具有特定值的OutOfBoundsException吗?

时间:2017-02-02 20:47:22

标签: java exception try-catch indexoutofboundsexception

我正在学习java中的异常。我遇到了以下问题:

String bigstring = myscanner.nextLine();
String[] splited = bigstring.split("\\s+");
try {
    smallstring1 = splited[0];
    smallstring2 = splited[1];
    smallstring3 = splited[2];
} catch(java.lang.ArrayIndexOutOfBoundsException exc) {
    smallstring3 = null;
}

如果用户只想输入2个单词,这将有效。

如果他想输入一个单词怎么办?

我们可以以某种方式指定冒号后出错的值吗?

像:

java.lang.ArrayIndexOutOfBoundsException: 2

java.lang.ArrayIndexOutOfBoundsException: 1

我们可以在try / catch块中以某种方式使用(对于此示例)此“2”或“1”吗?

2 个答案:

答案 0 :(得分:2)

java.lang.ArrayIndexOutOfBoundsException不是一个可以恢复的例外。它传达了编程错误 因此,不应试图理解导致问题的索引,而应该确保不会发生异常。

在你的情况下,你应该在尝试获取它的值之前检查数组的大小。

以下是一个例子:

    int arraySize = splited.length;

    if (arraySize == 3){
      smallstring1=splited[0];
      smallstring2=splited[1];
      smallstring3=splited[2];
    }

    else if (arraySize == 2){
      smallstring1=splited[0];
      smallstring2=splited[1];
    }

    else if (arraySize == 1){
      smallstring1=splited[0];
    }

答案 1 :(得分:1)

您可能不应该对正常的程序流使用异常。例外通常应该是“例外”。

无论如何,虽然你不能这样做,但你可以在catch块中使用if语句。您还可以检查splited.length以检查阵列的大小。