当我正在经历我碰到下面的规则传来JLS 8 11.2:为什么会有调用没有try catch块静态无效的主要()
Java编程语言要求程序包含 处理程序检查可能由执行 方法或构造函数导致的异常(第8.4.6节,第8.8.5节)。此编译时检查 是否存在异常处理程序旨在减少未正确处理的异常数。对于每个检查异常 这是可能的结果,方法或构造函数的throws子句必须提及该异常的类别或该异常的类别的其中一个(第11.2.2.3)类别的其中一个 。
我不明白那条规则的要点。举例来说,据我所知,这两个程序
class Main
{
public static void main (String[] args) throws Exception
{
throw new Exception();
}
}
和
class Main
{
public static void main (String[] args) throws Exception
{
try{
throw new Exception();
} catch (Expection e){ }
}
}
是良好的。
但是该规则要求程序包含任何检查的异常的处理程序,对于第一个不正确的异常。其实,看看处理程序的定义:
每个异常由类Throwable 或它的子类(§11.1)的一个实例表示。这样的对象可以用来从发生异常的点向携带 的信息携带 信息。 处理程序通过try 语句(§14.20)的catch子句建立。
强调我的。
所以,在第一个程序是没有任何处理,但
Java编程语言要求程序包含 处理程序检查的异常
你能不能澄清这个规则?
抛出基本上是将异常传递给调用者。以便呼叫者可以以他自己的方式处理。而在第二个代码中,你并不需要抛出实际的! – Prashant 2015-02-08 07:06:48
http://programmers.stackexchange.com/questions/257174/how-does-the-jvm-handle-an-exception-thrown-by-the-main-method – Adam 2015-02-08 07:07:12
“对于可能导致的每个检查异常,方法或构造函数的throws子句必须提及该异常的类别或该异常类别的某个超类别之一。这里的奥秘是什么? – Raedwald 2015-02-08 12:04:16