Java标准异常

在这节中我们来介绍Java标准异常:

Throwable这个Java类被用来表示任何可以作为异常被抛出的类。

Throwable对象可以分为两种类型:

  1. Error用来表示编译时和系统错误(除特殊情况,一般不用你来关心)

     2.Exception是可以被抛出的基本类型,在Java类库、用户方法以及运行时故障中都可能抛出Exception型异常。

所以Java程序员关心的基类型通常是Exception。

在异常的学习过程中,我们要注重理解概念以及如何使用。因为Java中异常的数目在持续的增加,而且第三方类库也会有自己的异常。

特殊例子:RuntimeException

  

if(t == null)
     throw new NullPointerException();

此例中,如果必须对传递给方法的每个引用都检查其是否为null,这是个很枯燥的事。

但是,这并不需要我们程序员来做,它是Java的标准运行时检测的一部分。

如果我们需要对null引用进行调用,Java会自动抛出NullPointerException异常,那么上述的代码就是多余的了。

其实属于运行时异常的类型是很多的,他们会自动被Java虚拟机抛出,所以我们不必在异常说明中将他们列举出来。

这些异常都是从RuntimeException类继承而来的,这构成了一组具有相同特征和行为的异常类型。重要的是我们也不再需要在异常说明中声明方法将抛出RuntimeException类型的异常,它们特被称为“不受检查异常”。这种异常是错误,将会被自动捕获。

那么我们会想,如果不去捕获这种异常,会发生什么事呢?

我们从这个例子中可以去体会:

public class NeverCaught {
	static void f() {
		throw new RuntimeException("From f()");
	}
	static void g() {
		f();
	}
	public static void main(String[] args) {
		g();
	}
}

运行结果:

分析:

所以对于这种异常类型,编译器不需要异常说明,而是输出被报给了System.err。

所以:如果RuntimeException没有被捕获而直达main(),那么在程序退出前将调用异常的printStackTrace()方法。

我们必须要记住:只能在代码中忽略RuntimeException(及其子类)类型的异常,其他类型异常的处理都是由编译器强制实施的。其原因是:RuntimeException代表的是编程错误:

1)无法预料的错误。比如从你控制范围之外传递进来的null引用。

2)作为程序员,应该在代码中进行检查错误。

值得注意的是:不应该把Java的异常处理机制当成是单一用途的工具。它被用来处理一些烦人的运行时的错误,这些错误往往是由代码控制能力之外的因素引起的;然而,他对于发现某些编译器无法检测到的编程错误,也是十分重要的。

猜你喜欢

转载自blog.csdn.net/qq_41026809/article/details/92424381