最近刚开始学java。很多游戏规则还不清楚。
刚看到异常处理这一章,处理异常的第二种方式是“转移异常方式”。
像下面这段代码
public class Main
{
public static void main(String[] argv)
{
throw new Exception();
}
}
编译的时候会提示:
[code=BatchFile]Main.java:5: unreported exception java.lang.Exception; must be caught or declared to be thrown
throw new Exception();
^
1 error[/code]
要求处理产生的异常。但换了另一种异常,比如RuntimeException(),
却不会出现编译错误。
public class Main
{
public static void main(String[] argv)
{
throw new RuntimeException();
}
}这是怎么回事?
刚看到异常处理这一章,处理异常的第二种方式是“转移异常方式”。
像下面这段代码
public class Main
{
public static void main(String[] argv)
{
throw new Exception();
}
}
编译的时候会提示:
[code=BatchFile]Main.java:5: unreported exception java.lang.Exception; must be caught or declared to be thrown
throw new Exception();
^
1 error[/code]
要求处理产生的异常。但换了另一种异常,比如RuntimeException(),
却不会出现编译错误。
public class Main
{
public static void main(String[] argv)
{
throw new RuntimeException();
}
}这是怎么回事?
像这样
public class Main
{
public static void main(String[] argv)
{
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}或者
public class Main
{
public static void main(String[] argv) throws Exception
{
throw new Exception();
}
}
可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。
对于Unchecked Exception,编译器是不会强制你对它们进行处理的,所有Unchecked Exception都是RuntimeException或其子类,著名的如ArrayIndexOutOfBoundsException(数组索引越界异常)。
这属于基础知识,楼主读的教材中是连这个都没介绍呢还是楼主读书不仔细?
我们的教材是“清华大学出版社”的《Java程序设计教材》(第2版),雍俊海编写的。
里面提到了“受检异常(Checked Exception)”和“非受检异常(Unchecked Exception)”,意思和你解释的差不多。不过书上只说了一句:“非受检异常包括运行时异常(Runtime Exception)和错误(Error)。”
下面举的例子是用除数为0,所以我以为这里所说的Runtime Exception是像除数为0这样的逻辑错误。没考虑到是RuntimeException这个类的子类。