欢迎来到天天文库
浏览记录
ID:13067026
大小:67.00 KB
页数:9页
时间:2018-07-20
《java中异常的知识》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、4.4异常4.4.1了解异常异常定义了程序中遇到的非致命的错误,而不是编译时的语法错误,如程序要打开一个不存的文件、网络连接中断、操作数越界、装载一个不存在的类等。我们先来看看下面的程序代码吧:publicclassTestException{publicstaticvoidmain(String[]args){intresult=newTest().devide(3,0);System.out.println(“theresultis”+result);}}classTest{publicintdevide(intx,inty){intresult=x/y;returnresult;
2、}}编译运行上面的程序,将出现如下错误:Exceptioninthread"main"java.lang.ArithmeticException:/byzeroatTest.devide(TestException.java:14)atTestException.main(TestException.java:5)上面的程序运行的结果报告发生了算术异常(ArithMethicException),系统不再执行下去,提前结束,这种情况就是我们所说的异常。4.4.2try…catch语句我们将上面的程序代码进行如下修改:publicclassTestException{publicstat
3、icvoidmain(String[]args){try{intreslut=newTest().devide(3,0);System.out.println("theresultis"+reslut);}catch(Exceptione){System.out.println(e.getMessage());}System.out.println("programisrunninghere,thatisnormal!");}}classTest{publicintdevide(intx,inty){intresult=x/y;returnresult;}}程序运行结果如下:/byze
4、roprogramisrunninghere,thatisnormal!我们看到程序在出现异常后,系统能够正常的继续运行,而没有异常终止。在上面的程序代码中,我们对可能会出现错误的代码用try…catch语句进行了处理,当try代码块中的语句发生了异常,程序就会跳转到catch代码块中执行,执行完catch代码块中的程序代码后,系统会继续执行catch代码块后的其他代码,但不会执行try代码块中发生异常语句后的代码,如程序中的System.out.println(“theresultis”+result);不会再被执行。可见Java的异常处理是结构化的,不会因为一个异常影响整个程序的执
5、行。当try代码块中的程序发生了异常,系统将这个异常发生的代码行号,类别等信息封装到一个对象中,并将这个对象传递给catch代码块,所以我们看到catch代码块是以下面的格式出现的。catch(Exceptione){System.out.println(e.getMessage());}catch关键字后跟有一个用括号括起来的Exception类型的参数e,这跟我们经常用到的如何定义一个函数接收的参数格式是一样的。括号中的Exception就是try代码块传递给catch代码块的变量类型,e就是变量名,所以我们也可以将e改用成别的名称(如ex等),如下所示:catch(Excepti
6、onex){System.out.println(ex.getMessage());}4.4.3throws关键字针对上面的例子,我们假设TestException类与Test类不是同一个人写的,写TestExc-ption类的人,在main方法中调用Test类的devide方法时,怎么能知道devide方法有可能出现异常情况呢?他又怎么能够想到要用trycatch语句去处理可能发生的异常呢?问题可以这样解决,只要写Test类的人,在定义devide方法时,在devide方法参数列表后用throws关键字声明一下,该函数有可能发生异常及异常的类别。这样,调用者在调用该方法时,就必须用t
7、ry…catch语句进行处理,否则,编译将无法通过。如下面的程序代码:publicclassTestException{publicstaticvoidmain(String[]args){intresult=newTest().devide(3,1);System.out.println(“theresultis”+result);}}classTest{publicintdevide(intx,inty)throwsException{in
此文档下载收益归作者所有