声明抛出异常
, [$ p% P9 O: K, R如不雅察看序员不想在当前体例内措置异常,可以使用throws语句声明将异常抛出到挪用体例中。 N9 p3 T2 ~6 A5 `) j: N$ f
挪用体例也可以将异常再抛给其他挪用体例。
7 z @; }- F t如不美观所有的体例都选择了抛出此异常,最后Java虚拟机将捕捉它,输出相关的错误信息,并终止轨范的运行。
6 N, a/ L z& h, x9 J- U在异常被抛出的过程中,任何体例都可以捕捉异常并进行响应的措置。
' l/ b" k; ?% e' T( J' H* F5 D7 W捕捉异常: z( P; D( _, G
捕捉异常需要使用try、catch、finally组成的语句块。
; B( w5 i% q1 s3 Y! Y l$ T0 Mtry语句块中是可能抛出异常的代码,如不美观一条语句抛出了异常,厥后续语句不会继续执行,而是转到catch进行异常类型匹配。 " F9 f& \7 P, O. F% F
catch语句块负责捕捉指定类型的异常并进行措置。 0 n+ G) i& n( i) {4 p' |
finally语句块是可选的,一般用于释放资本,无论是否发生异常,finally语句块总会执行。
! H \6 a# }- B* b$ @8 G+ K/ q因为担任,在有多个异常需要捕捉时,异常类型的挨次很主要。
! p0 r d, [; }getMessage()体例返回一个对发生的异常进行描述的字符串。
. ?" V$ Y6 l3 T5 o& ?/ rprintStackTrace()体例打印体例的挪用序列,一向到异常的发生位置。 0 z, t7 `) h8 |1 o+ D
try{
, V; h% A& e7 X& | t //可能抛出异常的代码) G, V+ d- u: R m+ t+ p$ h8 c
}catch(ExceptionType1 e1){; h7 U( p. {& j, U( w; k1 E7 H$ L; w
//抛出异常ExceptionType1时的异常措置代码) O3 s- g: C# v- M7 k* y2 `5 y$ f
}catch(ExceptionType2 e2){. H. ?" G+ J, r& Q2 c; D' f
//抛出异常ExceptionType2时的异常措置代码% R* k5 S; f/ Y5 ?
}finally{
3 A" V9 ?6 F+ u5 |1 V //无论是否抛出异常,城市执行的代码
+ i; h+ W+ b) `# c$ ` }2 C- z* o6 @* O2 u) q
抛出异常不仅Java系统的类可以抛出异常,用户轨范也可以抛出异常。经由过程throw语句来抛出异常对象。 throw new ExceptionType1();
$ d4 Z+ I* K% c声明异常类除了使用系统预界说的异常类外,用户还可以声明自己的异常类。用户自界说的异常类必需是Exception的子类。 public class MyException extends Exception{+ n. d/ y" Y4 A) n. Y
public MyException(){
, V8 w& z" M6 d4 g& T8 S1 M super("发生异常了!");4 _: e- D8 l6 i
}
- }% c' `/ ^4 n& K }
+ ]0 q; c" ^. \! u9 } s. K8 t% ~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 |