eXX*_*XX2 0 java exception-handling
我有两个版本的代码.在Method()中抛出的第一个版本类型的异常 - NullPointerException在第二个版本中 - Exception.但是第一个版本将编译但第二个版本将无法编译.为什么会这样?
public class Demo
{
    static void Method()
    {
        try
        {
            throw new NullPointerException("error");
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }
    public static void main(String argv[])
    { 
        try
        {
            Method();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
}
这是第二个版本.
public class Demo
{
    static void Method()
    {
        try
        {
            throw new Exception("error");
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }
    public static void main(String argv[])
    { 
        try
        {
            Method();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
}
第一个版本的堆栈跟踪:
java.lang.NullPointerException: error
    at Demo.Method(Demo.java:7)
    at Demo.main(Demo.java:18)
这是因为NullPointerException所谓的"未经检查"的例外.您不需要在throws子句中声明它们.
然而,一个偶然Exception是没有选中的,你就需要在申报throws声明.你需要Method()抛出Exception你的第二个代码片段.
未选中的例外是RuntimeException,Error和衍生类.NullPointerException衍生自RuntimeException.