可以像处理异常一样处理错误

时间:2012-06-08 22:52:40

标签: java exception

我想知道在Java中是否可以以与异常类似的方式处理错误。我已经看到了无法处理的错误,例如AssertionError,我也尝试在程序中抛出错误并尝试使用catch进行处理,它工作并且下一部分代码也执行了(这是矛盾的到遇到错误的程序应该退出的部分)。是否可以处理很少的错误,而其他一些错误则无法解决。我对此感到困惑,任何人都可以清除我的这个疑问并说明错误和异常之间的区别吗?

package package1;

public class Class1 
{   
public static void main(String[] args)
{
    Class1 cl1=new Class1();
    int x=2;
    String s = null;
    //assert(x<0):"x is not less than zero";
    try
    {
        cl1.workonExceptions();
    }
    catch (Error e)     
    {
        e.printStackTrace();
    }
    System.out.println("Not Terminated yet");
}
public void workonExceptions() throws Error 
{                                               
    try                                         
    {
        throw new Exception("Exception");
    }
    catch (Exception e) 
    {
        throw new Error("Exception Again");         }
}
}

3 个答案:

答案 0 :(得分:3)

Error的一些背景:它不是为了捕获;它只会在某事 错误时出现。一个例外是意味着被捕获和处理,因为它可能会偶尔出现,但不应该中断或严重干扰程序的运行,例如除以零。

至于在try...catch语句中工作,原因是这是Throwable类的属性。

  

只有作为此类(或其子类之一)的实例的对象才被Java虚拟机抛出,或者可以被Java throw语句抛出。类似地,只有这个类或其子类之一可以是catch子句中的参数类型。

答案 1 :(得分:1)

如果从方法抛出异常,则编译器需要该方法的调用者捕获异常。

编译器不要求方法的调用者捕获错误,即使从方法抛出也是如此。

调用程序可以捕获异常和错误,并且它们的行为方式相同。如果你有代码说明“继续执行”,我会有兴趣看到它。如果你抛出其中任何一个(都是从Throwable派生的),那么抛出它们的方法的执行就会停止(没有最终的条款,这个规则的一个(咳)异常我不想试着在这篇文章中介绍)。

答案 2 :(得分:1)

Java中的所有错误都是可捕获的,包括AssertionError,尽管不建议捕获它们,并且不能保证JVM处于足够一致的状态以便在Error之后继续执行。所以你看到的是完全正常的。

与C#不同,即使ThreadDeath的处理方式与其他任何Throwable完全相同(也就是说,它可以被捕获和使用)。

错误和异常之间的主要区别在于,无论异常说明符如何,方法都可以抛出任何错误。