java异常的两种处理方式(JAVA精讲(八)异常处理)java教程 / Java异常处理与调试技巧...

wufei123 发布于 2024-02-19 阅读(77)

异常处理异常就是不可预测的不正常情况,Java采用了 一种面向对象的机制,即把异常看作一种类型,每当发生这种事件时,Java就自动创建一个异常对象,并执行相应的代码去处理该事件。

异常处理语句是一段可执行的代码,可以自己编写,也可以采用系统提供的默认异常处理语句但是当默认的异常处理语句执行之后,对于应用程序而言,将显示异常信息(也就是报错),然后结束程序;对于小应用程序,执行默认的异常处理后,程序虽然可以继续执行,但执行的状态混乱,不能正确运行。

所以:咱还是自己写吧一、异常处理结构try{程序执行体}catch(异常类型1异常对象1){异常处理程序体1}catch(异常类型2异常对象2){异常处理程序体2}finally{异常处理结束前的执行程序体

}1.try-catch语句catch语句可以有多个,用来匹配多个异常,将依照先后顺序逐个对其检查因为异常之间有继承关系,所以处理子类异常的catch语句必须位于处理父类异常的catch语句前面,下面的catch语句FileNotFoundException是IOException 的子类,所以必须写在前面;。

try{FileInputStreamin=newFileInputStream(fromfile);FileOutputStreamout=newFileOutputStream(tofile);BufferedReader

br=newBufferedReader(newInputStreamReader(in));BufferedWriterbw=newBufferedWriter(newOutputStreamWriter

(out));/** * 直接调用StringBuffer类的reverse()方法转置字符串 */Stringtemp=null;while((temp=br.readLine())!=null

){str=newStringBuffer(temp);// 用StringBuffer(String // str)这个构造方法实例化一个StringBuffer类的对象,将temp传进去 str=str

.reverse();str1=str.toString();bw.write(str1);bw.newLine();System.out.println(str1);}br.close();bw.close

();}catch(FileNotFoundExceptione){// TODO Auto-generated catch block e.printStackTrace();}catch(IOException

e){// TODO Auto-generated catch block e.printStackTrace();}在异常处理之后,程序从try语句代码段后继续执行异常抛出点之后的try里面的语句就不再执行;。

catch的作用域只是其前面的try语句指定的代码段,如果在try之前就产生了异常,那么后面的所有代码包括try和catch都不会执行所以一定要把可能包含异常的语句都包含在try语句内部;若找不到匹配的catch语句,系统将执行默认的异常处理,这和不处理异常相同;。

如果try语句内没有产生异常,则不会执行catch语句,直接执行try-catch的外部语句;Java支持多异常捕获功能,异常类型之间用“|”隔开;try{代码块}catch(异常类型1|异常类型2|异常类型3

……异常对象名){代码块}catch 不能独立于 try 存在;2.finally语句不管程序有没有异常发生, 程序都会执行 finally 块中的程序,一般是在这里关闭已打开的对象或释放内存资源,比如关闭已打开的数据库对象,或者是I/O文件输入输出对象等。

在 try/catch 后面添加 finally 块并非强制性要求的;try 代码后不能既没 catch 块也没 finally 块;try, catch, finally 块之间不能添加任何代码;3.throw与throws语句

throw用于指出当前行存在异常,即手动抛出异常当程序执行到throw语句时就转向相匹配的异常处理语句,它下面的代码不再执行,所在方法也不再返回值throw的执行点也称异常抛出点什么时候需要手动抛出一个异常呢?。

intage=0;age=-66;System.out.println("I am"+age+"years old");这段代码在JVM(Java虚拟机)看来是正常的整型变量赋值,但是我们看起来就觉得是错的,不可能会有负的年龄。

intage=0;age=-66;if(age<0){Exceptione=newException();//创建异常对象 throwe;//抛出异常 }else{System.out.println(

"I am"+age+"years old");}throws语句用于指明当前方法可能会产生异常,具体处理由调用这个方法的东西负责,基本格式为:访问修饰符classclassName{访问修饰符返回值类型

方法名(参数列表)throws异常类型{}}多人协作编程的时候自己的异常最好自己处理了,做人要负责一点……

throw是语句抛出一个异常throws是方法可能抛出异常的声明二、自定义异常类所有异常都必须是 Throwable 的子类如果希望写一个检查性异常类,则需要继承 Exception 类如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

可以像下面这样定义自己的异常类:classMyExceptionextendsException{}只继承Exception 类来创建的异常类是检查性异常类三、异常处理调试方法1.在程序中添加输出变量的信息。

常用的程序调试方式,通过向代码中添加大量的输出语句,观察输出项的值,判断程序出错的范围例如:System.out.println("x="+x);如果x是一个数值,就可以转换为相应的字符串如果是一个对象,则Java会调用它的toString()方法,这对调试程序很有帮助。

大家在编写自己类的时候也可以重写toString()方法2.在非静态方法中,通过this输出当前对象的状态System.out.println("当前对象:"+this);这样系统会调用当前类的toString()方法,从而给出辅助理解程序的信息。

3.采用printstackTrace()方法输出一场对象调用栈的信息,采用getMessage()获取异常信息,采用getClass()和getName()获取异常类名例如:classuserException

extendsException{// 自定义异常类 publicuserException(){super("自定义异常");// 通过构造函数设置异常信息 }}publicclassgetMessages

{publicstaticvoidm1()throwsuserException{m2();}publicstaticvoidm2()throwsuserException{thrownewuserException

();// 抛出异常 }publicstaticvoidmain(Stringargs[]){try{m1();}catch(userExceptione){System.out.println(e.

getMessage());// 输出异常信息 e.printStackTrace();// 输出调用栈的信息 System.out.println("异常类型:"+e.getClass().getName

());// 输出异常类型 }}}

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻99986