最近刚开始学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();
        }
}这是怎么回事?

解决方案 »

  1.   

    异常抛出要有两个解决方案,要么继续往上一级抛,要么捕获
    像这样
    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();
            }
    }
      

  2.   

    JDK6API中有下面一句
    可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。 
      

  3.   

    1楼的答非所问。Java中的异常分为二种:检查异常(Checked Exception)和非检查异常(Unchecked Exception)。
    对于Unchecked Exception,编译器是不会强制你对它们进行处理的,所有Unchecked Exception都是RuntimeException或其子类,著名的如ArrayIndexOutOfBoundsException(数组索引越界异常)。
    这属于基础知识,楼主读的教材中是连这个都没介绍呢还是楼主读书不仔细?
      

  4.   

    回复4楼。
    我们的教材是“清华大学出版社”的《Java程序设计教材》(第2版),雍俊海编写的。
    里面提到了“受检异常(Checked Exception)”和“非受检异常(Unchecked Exception)”,意思和你解释的差不多。不过书上只说了一句:“非受检异常包括运行时异常(Runtime Exception)和错误(Error)。”
    下面举的例子是用除数为0,所以我以为这里所说的Runtime Exception是像除数为0这样的逻辑错误。没考虑到是RuntimeException这个类的子类。