我试图在catch块中捕获组成的IndexOutOfBoundsException错误。但每次它返回-1而不进入catch块
我可以知道为什么会发生这种情况吗?我想达到阻止。
public class Mars {
public int Setname(String Input) {
int output = 0;
try {
output = Input.indexOf("L");
System.out.println("Error:" + Input.indexOf("L"));
if (output == -1){
throw new IndexOutOfBoundsException();
}
}
catch (IndexOutOfBoundsException e) {
System.out.println("Error:2" + e.getStackTrace());
}
return output;
}
public static void main(String[] args) {
Mars O = new Mars();
O.Setname("London");
}
}
第二件事是:当我们在catch块中编写IndexOutOfBoundsException e
时,它会创建一个IndexOutOfBoundsException
类的实例吗?我是对的吗?
那么为什么我们不能以下面的方式写作呢?这可能是一个非常愚蠢的问题,但仅仅是出于好奇心我想知道。
catch(IndexOutOfBoundsException e = new IndexOutOfBoundsException())
答案 0 :(得分:1)
String的indexOf()
方法返回指定字符第一次出现的字符串中的索引,如果字符未出现,则返回-1
。在您的情况下,您的角色不会出现,这就是您获得-1
的原因。
所以你应该做的是强制这样的例外:
if(output == -1){
throw new IndexOutOfBoundsException()
}
答案 1 :(得分:0)
使用if
语句并抛出异常
if(output == -1){
throw new IndexOutOfBoundsException()
}
答案 2 :(得分:0)
答案 3 :(得分:0)
对于第一件事Mohamed Said Benmousa的回答是正确的
第二件事
IndexOutOfBoundsException e
这不会创建实例。它只是一个引用,如果抛出则指向IndexOutOfBoundsException对象。就像你在调用方法时传递参数一样。