java标准异常(转载)

来源:互联网 发布:grpc javascript 编辑:程序博客网 时间:2024/05/22 15:24

Throwable这个Java类被用来表示任何可以作为异常抛出的类。它分为两种类型:

1.Error:表示编译时和系统错误,除特殊情况外,我们不需要理会此异常。

2.Exception:可以被抛出的异常,在JAVA类库、用户方法及运行时故障中都可能抛出的异常,我们通常关心此异常。

异常的基本概念是用名称代表发生的问题,异常的名称应该做到望文知义,异常也并非都是在java.lang包中定义的,有些异常来自于util、net和io这样的包。

if(t == null)

throw new NullPointerException();

如果必须对传递给方法的每个引用都检查是否为Null,那么可以想象工作量将会异常的多。在JAVA中,这种异常属于JAVA的标准运行时检测的一部分。如果对null引用进行调用,JAVA会自动抛出NullPointerException异常,所以上述代码是多余的。

属于运行时异常的类型有很多,它们会自动被JAVA虚拟机抛出,所以不必在异常说明中罗列出来,这些异常都继承自RuntimeException类,使用起来很方便。它们构成了一组具有相同特征和行为的异常类型,也不需要在异常说明中声明方法抛出的异常,它们也被称为“不受检查异常”,这种异常属于错误,将被自动捕获,但是尽管不需要捕获RuntimeException异常,但仍然可以在代码中抛出这种类型的异常。看下面一段代码:

[java] view plain copy
  1. package access;  
  2.   
  3. public class NeverCaught {  
  4.     static void f(){  
  5.         throw new RuntimeException("From f()");  
  6.     }  
  7.     static void g(){  
  8.         f();  
  9.     }  
  10.     public static void main(String[] args) {  
  11.         // TODO Auto-generated method stub  
  12.         g();  
  13.     }  
  14.   
  15. }  
此程序的输出结果为:


编译器不需要异常说明,其输出报告给了System.err。如果RuntimeException没有被捕获而直达main函数,那么程序退出前将调用异常的printStackTrace方法。

只能在代码中忽略RuntimeException及其子类型的异常,其它类型的异常的处理都是由编译器强制执行的,RuntimeException代表的是编程错误:

1.无法预料的错误,比如从控制范围外传递来的null引用。

2.应该在代码中检查的错误,在一个地方发生的异常,常常会在另一个地方发生错误。

不应该把异常处理机制当做是单一的用途的工具,它被设计用来处理一些烦人的运行时错误,这些错误往往是由代码控制范围外的不确定因素导致的,但是它对于发现某些编译器无法检测到的编程错误也是很有帮助的。