为什么在调用一个方法的时候,我已经捕获到异常了,还说要捕获异常?

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