public KalaGame(KeyBoardPlayer player1,KeyBoardPlayer player2)
{ //super(0);
int key=0;
try
{
do{
System.out.println("Enter the number of stones to play with: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
key = Integer.parseInt(br.readLine());
if(key<0 || key>10)
throw new InvalidStartingStonesException(key);
}
while(key<0 || key>10);
player1=new KeyBoardPlayer();
player2 = new KeyBoardPlayer();
this.player1=player1;
this.player2=player2;
state=new KalaGameState(key);
}
catch(IOException e)
{
System.out.println(e);
}
}
当我输入无效数量的宝石时,我收到此错误
线程“main”中的异常InvalidStartingStonesException:起始宝石的数量必须大于0且小于或等于10(尝试22)
为什么不是由我在
定义的throw处理的异常 KalaGame.<init>(KalaGame.java:27) at PlayKala.main(PlayKala.java:10)
答案 0 :(得分:5)
您只处理IOException
但不处理被抛出的异常,即InvalidStartingStonesException
。
答案 1 :(得分:1)
您可以捕获多个异常类型并相应地过滤它们:
try
{
// ...
}
catch(IOException ioe)
{
// ...
}
catch(Exception ex)
{
// ...
}
您可以添加此最后一个catch块以匹配任何异常。
答案 2 :(得分:0)
听起来它正在被投掷处理。通过调用throw,您告诉Java“退出程序并打印出InvalidStartingStonesException”。听起来这就是正在发生的事情。如果您有以下内容:
catch(InvalidStartingStonesException{
// code to handle the exception goes here
}
然后程序将运行您的错误处理代码。如果此异常扩展了IOException,那么您已经有一个catch会打印异常。
答案 3 :(得分:0)
catch(IOException)块没有捕获异常,因为InvalidStartingStonesException不是IOException,也不是它的后代。
您的异常是未经检查的异常,就像IllegalArgumentException一样。编译器并没有强制程序员捕获这样的异常,因为它们通常代表错误而不是可以处理的情况。
由于没有捕获异常,它会在主线程的调用堆栈中一直向下传播,直到程序终止。