a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 126|回复: 0

[基础知识] JAVA面向对象编程课堂笔记17

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
应对未检查异常就是养成良好的检查习惯。
. f; T* @2 R  e0 a1 t* T已检查异常是不可避免的,对于已检查异常必须实现定义好应对的方法。 & k: ]: M! r0 [% |) z/ a6 g6 o
已检查异常肯定跨越出了虚拟机的范围。(比如“未找到文件”)   C9 w1 X! s  N+ ~4 O
  
4 X* R0 U. `. k  e* o9 L如何处理已检查异常(对于所有的已检查异常都要进行处理):
$ {) C/ s3 S2 q首先了解异常形成的机制:
: }6 x. N4 x) u* O当一个方法中有一条语句出现了异常,它就会throw(抛出)一个例外对象,然后后面的语句不会执行返回上一级方法,其上一级方法接受到了例外对象之后,有可能对这个异常进行处理,也可能将这个异常转到它的上一级。
- K5 v4 q; k: K- i对于接收到的已检查异常有两种处理方式:throws和try方法。 0 r+ c4 b5 C7 j3 s) k8 O
  0 c$ I1 l- D( e9 T! [, r, X
注意:出错的方法有可能是JDK,也可能是程序员写的程序,无论谁写的,抛出一定用throw。
8 @2 r' x" d! a- w) c5 }# ~$ h  
# ?) S2 Y. U3 F$ t例:public void print() throws Exception. 7 ?# z% k3 S% I/ a7 B7 n; [; p( n
  
! `, L; Z8 L! f; W8 a对于方法a,如果它定义了throws Exception。那么当它调用的方法b返回异常对象时,方法a并不处理,而将这个异常对象向上一级返回,如果所有的方法均不进行处理,返回到主方法,程序中止。(要避免所有的方法都返回的使用方法,因为这样出现一个很小的异常就会令程序中止)。
; O, {; c. E+ }7 P0 Z  ! u" v& R3 D. y4 o
如果在方法的程序中有一行throw new Exception(),返回错误,那么其后的程序不执行。因为错误返回后,后面的程序肯定没有机会执行,那么JAVA认为以后的程序没有存在的必要。 9 u# x* l0 L3 x  a& X, i
  
0 T+ {( U* _, u* `& R* M对于try……catch格式: ) F9 X2 I+ u/ n* K2 r- X+ W- ^
try  {可能出现错误的代码块}   catch(exception e){进行处理的代码} ; ' Q  c! |- v' [! ?
                                对象变量的声明 " R  R1 l! I, U* i
  
/ n( A5 Q! n' ^% A* \3 M- j; [% t用这种方法,如果代码正确,那么程序不经过catch语句直接向下运行;
: {; x* H# ~0 m5 w& U' A如果代码不正确,则将返回的异常对象和e进行匹配,如果匹配成功,则处理其后面的异常处理代码。(如果用exception来声明e的话,因为exception为所有exception对象的父类,所有肯定匹配成功)。处理完代码后这个例外就完全处理完毕,程序会接着从出现异常的地方向下执行(是从出现异常的地方还是在catch后面呢?利用程序进行验证)。最后程序正常退出。 . _/ R6 L* j5 J- H4 U
  ' j% g4 N0 C7 _' |3 ?1 N! M0 e8 U
Try中如果发现错误,即跳出try去匹配catch,那么try后面的语句就不会被执行。 * A, j0 H: N" q% G6 G
一个try可以跟进多个catch语句,用于处理不同情况。当一个try只能匹配一个catch。
. L3 u" b, q6 t( w6 G我们可以写多个catch语句,但是不能将父类型的exception的位置写在子类型的excepiton之前,因为这样父类型肯定先于子类型被匹配,所有子类型就成为废话。JAVA编译出错。 7 y- P: N- }  Y! `# s; M
  . t, h. E/ \8 M
在try,catch后还可以再跟一子句finally。其中的代码语句无论如何都会被执行(因为finally子句的这个特性,所以一般将释放资源,关闭连接的语句写在里面)。
' b1 O4 G( z  J/ b. c' N  / F4 O$ ]% Y" U' K0 ^+ P
如果在程序中书写了检查(抛出)exception但是没有对这个可能出现的检查结果进行处理,那么程序就会报错。 6 r7 r& n* k& q; d! w* T
而如果只有处理情况(try)而没有相应的catch子句,则编译还是通不过。 1 z% U, z3 o( v" D* d* P
如何知道在编写的程序中会出现例外呢 ! K( Y8 u0 A  F: O
1.调用方法,查看API中查看方法中是否有已检查错误。 2 e$ R& f: B! E1 ]
2.在编译的过程中看提示信息,然后加上相应的处理。 4 S0 k% j4 x5 F, E6 X5 W  s2 |
  4 n8 d4 @0 s, |, c5 S$ t2 z
Exception有一个message属性。在使用catch的时候可以调用:
/ l- O  J9 A  yCatch(IOException e){System.out.println(e.message())};
& Q$ d" B3 H4 F6 l, W' _& Z' S7 aCatch(IOException e){e.printStackTrace()}; & M! J% h2 n* ?1 f& M
上面这条语句回告诉我们出错类型所历经的过程,在调试的中非常有用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-7 16:06 , Processed in 0.290895 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表