表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。 也就是, 捕捉异常、处理异常的代码, 也就是,程序中异常没有用 try…catch 捕捉异常、处理异常的代码,我们可以在程序代码 所在的函数(方法) 声明该函数要抛出异常,将该异常抛出到该函数的调 所在的函数(方法)声明后用 throws 声明该函数要抛出异常,将该异常抛出到该函数的调 用函数中, 方法,JVM 肯定要处理的,这样,编译就能通过了。用作者的话讲, 用函数中,一直到 main 方法,JVM 肯定要处理的,这样,编译就能通过了。用作者的话讲, 就是将麻烦传递
给了上级,村长传给乡长,乡长不处理就传给县长, 就是将麻烦传递给了上级,村长传给乡长,乡长不处理就传给县长,县长不处理又传给市 最后一直传到国务院,就截止了,因为国务院没有上级了。 程序中, 长,最后一直传到国务院,就截止了,因为国务院没有上级了。在 Java 程序中, 异常传 方法后,就截止了, 方法的。 递到 main 方法后,就截止了,因为没有哪个方法会调用 main 方法的。 如上面的程序就可以改写成下面这样: 如上面的程序就可以改写成下面这样:
public class TestException { public static void main(String [] args) throws Exception { int result = new Test().devide( 3, 1 ); System.out.println(“the result is” + result );
} }
虽然编译能够通过,但异常一旦发生,没有被处理,程序就会非正常终止。 虽然编译能够通过,但异常一旦发生,没有被处理,程序就会非正常终止。即使你能确信 在你的程序中不会发生某种异常,这种方法也能够简化程序的编写, 在你的程序中不会发生某种异常,这种方法也能够简化程序的编写,但完全违背了
Java 设 计异常的初衷,不建议在正规的程序中使用。用这种方法写点实验性的代码, 计异常的初衷,不建议在正规的程序中使用。用这种方法写点实验性的代码,倒是无可厚 非。
4.4.4 自定义异常与 Throw 关键字
文档资料, 就能看到, java.lang.Throwable 我们通过查阅 JDK
文档资料, 就能看到, Exception 类是 java.lang.Throwable 类的子 类的所有方法。其实,我们在实际应用中, 类,Exception 类继承了 Throwable 类的所有方法。其实,我们在实际应用中,是使用 的子类来描述任何特定的异常的。 类是所有异常类的父类, Exception 的子类来描述任何特定的异常的。Exception 类是所有异常类的父类,Java 语言 类子类,分别对应不同的异常类型, 为我们提供了许多 Exception 类子类,分别对应不同的异常类型,如我们在前面已经看到 过以下几个异常。 过以下几个异常。 ArithmeticException(在算术运算中发生的异常,如除以零) ArithmeticException(在算术运算中发生的异常,如除以零) NullPointerException 变量还没有指向一个对象,就引用这个对象的成员) Exception( NullPointerException(变量还没有指向一个对象,就引用这个对象的成员) ArrayIndexOutOfBoundsException(访问数组对象中不存在的元素) ArrayIndexOutOfBoundsException(访问数组对象中不存在的元素)
除了系统提供的异常,我们也可以定义自己的异常类, 除了系统提供的异常,我们也可以定义自己的异常类,自定义的异常类必须继承 函数中,不允许有负的被除数, Exception 类。假设我们在上面程序的 d
evide 函数中,不允许有负的被除数,当 devide 函数接收到一个负的被除数时,程序返回一个自定义的异常(这里就叫负数异常吧!) !)通 函数接收到一个负的被除数时,程序返回一个自定义的异常(这里就叫负数异常吧!)通 知调用者。我们可以这样定义这个负数异常类。 知调用者。我们可以这样定义这个负数异常类。
class DevideByMinusException extends Exception { int devis