声明抛出异常8 [2 d$ I: D7 r( x6 y
如不雅察看序员不想在当前体例内措置异常,可以使用throws语句声明将异常抛出到挪用体例中。
. |3 g) {, s( l f- V7 ^挪用体例也可以将异常再抛给其他挪用体例。
0 S& V# z8 O" G5 }& g |如不美观所有的体例都选择了抛出此异常,最后Java虚拟机将捕捉它,输出相关的错误信息,并终止轨范的运行。 : g5 ^8 d# r* l# @; {8 K
在异常被抛出的过程中,任何体例都可以捕捉异常并进行响应的措置。
! H b0 _ P2 y! y' n, {& C5 }捕捉异常
C$ H1 j8 T& H3 Z1 D( F, `, Y2 z' m捕捉异常需要使用try、catch、finally组成的语句块。 8 Y1 L5 c) S4 B+ f* h, F+ F% D
try语句块中是可能抛出异常的代码,如不美观一条语句抛出了异常,厥后续语句不会继续执行,而是转到catch进行异常类型匹配。 % j/ L4 o3 n8 W, ~# u, b1 Y
catch语句块负责捕捉指定类型的异常并进行措置。 & w1 ]; [" R( S
finally语句块是可选的,一般用于释放资本,无论是否发生异常,finally语句块总会执行。
/ I* z5 Z2 ]4 y& b( W: a3 t2 `* ]因为担任,在有多个异常需要捕捉时,异常类型的挨次很主要。
) x: e6 l/ r$ LgetMessage()体例返回一个对发生的异常进行描述的字符串。
0 o8 H* Z1 e' ~, w8 H0 z* h' `printStackTrace()体例打印体例的挪用序列,一向到异常的发生位置。
- b2 Z, N: _$ C4 p1 |( z* j2 A try{
3 v; ~" n' v2 X) R/ k5 ?. U //可能抛出异常的代码
0 d$ y7 d' \3 y" H) S# n+ u }catch(ExceptionType1 e1){
& c+ A8 _0 g& [$ S) y/ p; X i //抛出异常ExceptionType1时的异常措置代码
! d: b1 u( T& _' y }catch(ExceptionType2 e2){! _0 }6 M- b$ F- f
//抛出异常ExceptionType2时的异常措置代码
0 r2 z+ f. { H K/ l, e }finally{
a" t7 ^/ T, K0 E/ x //无论是否抛出异常,城市执行的代码8 I# Y, R' W' W
}6 _ q% e: w" k5 |6 g, a: b
抛出异常不仅Java系统的类可以抛出异常,用户轨范也可以抛出异常。经由过程throw语句来抛出异常对象。 throw new ExceptionType1();2 X8 c( N: \) B0 a- t
声明异常类除了使用系统预界说的异常类外,用户还可以声明自己的异常类。用户自界说的异常类必需是Exception的子类。 public class MyException extends Exception{
! [. e7 o" B7 \, {& Y' l public MyException(){3 d: I; v; ]- C, S
super("发生异常了!");
8 r; R" f6 p6 C" k+ R }
$ r4 M E# D5 ]" x1 e1 T! J }) m& U8 Q6 j1 a* n/ k, G2 O. c
view plaincopy to clipboardprint?package cn.edu.uibe.exp; class MyExp extends Exception{ private static final long serialVersionUID = 1L; MyExp(){ super("自界说异常"); } } public class Exp2 { public void f1(int n) { System.out.println("f1前面"); f2(n); System.out.println("f1后面"); } public void f2(int n) { System.out.println("f2前面"); try{ System.out.println("try的前面"); f3(n); System.out.println("try的后面"); //发生异常时不会输出 }catch(MyExp e){ System.err.println(e.getMessage()); }finally{ System.out.println("无论是否发生异常"); } System.out.println("f2后面"); } public void f3(int n) throws MyExp{ System.out.println("f3前面"); f4(n); System.out.println("f3后面"); //发生异常时不会输出 } public void f4(int n) throws MyExp{ System.out.println("f4前面"); if(n |