为什么在调用一个方法的时候,我已经捕获到异常了,还说要捕获异常?
Why, when calling a method, does it say that I need to catch an exception when I have already caught it?
我有一个 class 可以循环播放一些音频:
public class PlayGameMusic {
public static void main(String[] args) throws Exception {
try{
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("\Users\natal\Desktop\programs\APCS\Fill the Boxes.wav"));
Clip clip = AudioSystem.getClip();
clip.open(inputStream);
clip.loop(Clip.LOOP_CONTINUOUSLY);
Thread.sleep(10000);
}
catch(IOException error){System.out.println("IO Exception Error");}
catch(InterruptedException error){System.out.println("InterruptedException");}
catch(Exception error){System.out.print("System.out.println("Exception");");}
}
}
我可以编译这个方法并且编译器没有报错(我用打印语句测试过)。但是,当我尝试在另一个 class...
中调用上述 class (PlayGameMusic
) 的主要方法时
public class RunGame
{
public static void main(String[] args)
{
PlayGameMusic.main(null);
}
}
...我收到此编译器错误:
unreported exception java.lang.Exception; must be caught or declared to be thrown
我正在捕获可能的异常,PlayGameMusic
class 在 运行 独立运行时工作。为什么我不能从另一个 class 调用它?
您已在 PlayGameMusic
中宣布 main
投掷 Exception
。即使该方法中没有任何内容实际上将 Exception
抛出该方法,您也必须捕获它或在调用方法中声明它,例如RunGame.main
.
因为你正在捕获 PlayGameMusic.main
中的异常,你不需要声明它抛出任何东西。在 PlayGameMusic
中,更改:
public static void main(String[] args) throws Exception
到
public static void main(String[] args)
如果 PlayGameMusic.main
不能抛出 Exception
它不应该用 throw Exception
声明。它不应该有 throw Exception
只是因为它可以生成 并捕获 Exception
.
如果一个方法调用另一个显式抛出 Exception 的方法,则调用方法应该捕获该 Exception 或在其自己的方法签名中声明将其抛出
https://docs.oracle.com/cd/A97339_01/doc/bc4j/BC4JRuntimeFiles/obcExceptions.htm
我有一个 class 可以循环播放一些音频:
public class PlayGameMusic {
public static void main(String[] args) throws Exception {
try{
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("\Users\natal\Desktop\programs\APCS\Fill the Boxes.wav"));
Clip clip = AudioSystem.getClip();
clip.open(inputStream);
clip.loop(Clip.LOOP_CONTINUOUSLY);
Thread.sleep(10000);
}
catch(IOException error){System.out.println("IO Exception Error");}
catch(InterruptedException error){System.out.println("InterruptedException");}
catch(Exception error){System.out.print("System.out.println("Exception");");}
}
}
我可以编译这个方法并且编译器没有报错(我用打印语句测试过)。但是,当我尝试在另一个 class...
中调用上述 class (PlayGameMusic
) 的主要方法时
public class RunGame
{
public static void main(String[] args)
{
PlayGameMusic.main(null);
}
}
...我收到此编译器错误:
unreported exception java.lang.Exception; must be caught or declared to be thrown
我正在捕获可能的异常,PlayGameMusic
class 在 运行 独立运行时工作。为什么我不能从另一个 class 调用它?
您已在 PlayGameMusic
中宣布 main
投掷 Exception
。即使该方法中没有任何内容实际上将 Exception
抛出该方法,您也必须捕获它或在调用方法中声明它,例如RunGame.main
.
因为你正在捕获 PlayGameMusic.main
中的异常,你不需要声明它抛出任何东西。在 PlayGameMusic
中,更改:
public static void main(String[] args) throws Exception
到
public static void main(String[] args)
如果 PlayGameMusic.main
不能抛出 Exception
它不应该用 throw Exception
声明。它不应该有 throw Exception
只是因为它可以生成 并捕获 Exception
.
如果一个方法调用另一个显式抛出 Exception 的方法,则调用方法应该捕获该 Exception 或在其自己的方法签名中声明将其抛出
https://docs.oracle.com/cd/A97339_01/doc/bc4j/BC4JRuntimeFiles/obcExceptions.htm