Java暑期学习Day32
今天是第32天,20170805,为了美好的生活前进{:10_307:}static/image/hrline/5.gif
① throws/throw 关键字
a.在catch区块进行完部分错误处理时,可以使用throw(!!注意不是throws
如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。 )将异常再抛出,实际上,我们可以在任何流程中抛出异常,不一定要在catch区块中,在流程中抛出异常,就直接跳离原有的流程,可以抛出受检或非受检异常。
-!- 如果抛出的是受检异常,此时就必须在方法上使用throws声明。
非受检异常 不使用
b.如果使用继承时,父类某个方法声明throws某些异常,子类重新定义该方法时
可以:
1.不声明throws任何异常
2.throws父类该方法中声明的某些异常
3.throws父类该方法中声明异常的子类
不可以:
1.throws父类方法中未声明的其他异常
2.throws父类方法中声明异常的父类
② 自定义异常
重新抛出异常时,除了将捕捉到的异常直接抛出,也可以考虑为应用程序自定义专属的异常类别,让异常更能表现应用程序特有的错误信息。
自定义异常类别时,可以继承Throwable、Error、 Exception的相关子类(即所有异常都必须是 Throwable 的子类),通常建议继承自Exception或其子类,如果不是继承自Error或RuntimeException,那么就会是受检异常。
public class Ce extends Exception{ //自定义受检异常
...
}
-!-如果希望写一个检查性异常类,则需要继承 Exception 类
如果想写一个运行时异常类,那么需要继承 RuntimeException 类
③ 堆栈追踪(Stack Trace)
package exception;
public class StackTraceDemo {
public static void main(String[] args) {
try {
c();
} catch (NullPointerException ex) {
ex.printStackTrace();
}
}
static void c() {
b();
}
static void b() {
a();
}
static String a() {
String text = null;
return text.toUpperCase();
}
}
查看堆栈追踪最简单的方法,就是直接调用异常对象的printStackTrace()。
上面代码的运行结果是——
java.lang.NullPointerException
at exception.StackTraceDemo.a(StackTraceDemo.java:25)
at exception.StackTraceDemo.b(StackTraceDemo.java:20)
at exception.StackTraceDemo.c(StackTraceDemo.java:16)
at exception.StackTraceDemo.main(StackTraceDemo.java:7)
堆栈追踪信息中显示了异常类型,最顶层是异常的根源,以下是调用方法的顺序,程序代码行数是对应于当初的程序原始码。
页:
[1]