异常处理(视频讲解:49分钟)在程序中总是存在各种错误,使应用程序在运行时终止.
为了在程序执行过程中发生错误时能正常运行,可以使用Java提供的异常处理机制捕获可能发生的异常,对异常进行处理并使程序能正常运行.
通过阅读本章,您可以:(了解异常的概念(了解异常的分类(掌握如何获取异常信息(掌握如何处理异常(了解如何抛出异常(了解自定义异常(了解异常的使用原则11.
1异常概述视频讲解:光盘\TM\lx\11\异常概述.
exe假设一辆轿车发生了故障,可能是某个零件发生了问题,也可能是没有油了.
如果是由于零件问题,只需要更换零件就可以解决;如果是没有油了,只需要加满油就可以正常行驶了.
程序中的异常与此类似,就对程序中可能发生异常的语句进行处理,使程序能够正常执行.
在程序开发过程中,可能存在各种错误,有些错误是可以避免的,而有些错误却是意想不到的,在Java中把这些可能发生的错误称为异常.
图11.
1说明了异常类的继承关系.
图11.
1异常类的继承关系图从图11.
1中可以看出,Throwable类是所有异常类的超类,该类的两个直接子类是Error和Exception.
其中,Error及其子类用于指示合理的应用程序不应该试图捕获的严重问题,Exception及其子类给出了合理的应用程序需要捕获的异常.
11.
2异常的分类视频讲解:光盘\TM\lx\11\异常的分类.
exe在Java中可以捕获的异常(即Exception类的子类)分为可控式异常和运行时异常两种类型.
11.
2.
1可控式异常在Java中把那些可以预知的错误,例如从文件中读取数据、对数据库进行操作等,在程序编译时就能对程序中可能存在的错误进行处理,并给出具体的错误信息,我们把这些错误称为可控式异常.
表11.
1中列出了常用的可控式异常及说明.
表11.
1常用可控式异常及说明异常说明IOException当发生某种I/O异常时,抛出此异常SQLException提供关于数据库访问错误或其他错误信息的异常ClassNotFoundException类没有找到异常NoSuchFieldException类不包含指定名称的字段时产生的信号NoSuchMethodException无法找到某一特定方法时,抛出该异常【例11.
1】创建项目01,在项目中创建Example_01类,在该类中加载一个不存在的类,观察发生的异常.
(实例位置:光盘\TM\sl\11\1)publicclassExample_01{privateintnum=10;成员变量publicintgetNum(成员方法returnnum;返回成员变量的值}publicvoidsetNum(intnum)成员方法this.
num=num;设置成员变量的值}publicExample_01(类的构造方法try{Class.
forName("com.
mingrisoft.
Test");//装载com.
mingrisoft包中的Test类}catch(ClassNotFoundExceptione){e.
printStackTrace();}System.
out.
println("测试.
在控制台输出"测试.
"}publicstaticvoidmain(String[]args){Example_01exam=newExample_01();//创建类的实例exam.
setNum(888)调用setNum()方法设置成员变量num的值为888System.
out.
println(exam.
getNum(调用getNum()方法输出成员变量的值888}}运行结果如图11.
2所示.
图11.
2ClassNotFoundException异常11.
2.
2运行时异常在Java中有些错误是不能被编译器检测到的,例如,在进行除法运算时,除数为零;试图把一个不是由数字组成的字符串使用Integer类的parseInt()方法转换为整数等,Java的编译器是检测不到的,因而能够正常编译,但是在运行时就会发生异常,我们把这些异常称为运行时异常.
表11.
2列出了常用的运行时异常及说明.
表11.
2常用的运行时异常及说明方法说明IndexOutOfBoundsException指示某集合或数组的索引值超出范围时抛出该异常NullPointerException当应用程序试图在需要对象的地方使用null时,抛出该异常ArithmeticException当出现异常的运算条件时,抛出此异常IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常【例11.
2】通过Integer类的实例创建Object对象o,观察将Object对象o强制转换为字符串时发生的异常.
Objecto=newInteger(0)通过Integer类的实例创建Object对象oSystem.
out.
println((String)o)将Object对象o强制转换为字符串时出错【例11.
3】在项目中创建Example_02类,在该类中创建一个数组,然后使用超出数组下标范围的值访问数组中的元素,观察发生的异常.
(实例位置:光盘\TM\sl\11\2)int[]number={100,80,50,70,20,60};//创建并初始化具有6个元素的数组publicvoidsetNum(intindex,intvalue){//根据索引值index为数组元素赋值value的方法number[index]=value;为数组中索引值index处的元素赋值value}publicintgetNum(intindex)根据索引值index获得数组中对应元素值的方法returnnumber[index]获得数组中索引值index处的元素值}publicstaticvoidmain(String[]args){Example_02ex=newExample_02(创建类的实例//调用方法获得数组中索引值0处的元素值,即第一个元素的值100intvalue=ex.
getNum(0);System.
out.
println(value)输出第一个元素的值100//索引值6超出了数组下标的范围,因此将发生异常,导致程序终止,下面的代码将不会被执行value=ex.
getNum(6);System.
out.
println(value);//获得数组中最后一个元素的值60value=ex.
getNum(5)System.
out.
println(value)输出最后一个元素值60}运行结果如图11.
3所示.
图11.
3ArrayIndexOutOfBoundsException异常11.
2.
3范例1:算术异常算术异常即ArithmeticException,是指整数被0除产生的异常.
在Java语言中,如果一个整数被0除,那么将抛出ArithmeticException,但是浮点数被0除,将不引发算术异常,这与数学中不同.
本范例将演示出现算术异常的情况,并进行处理.
运行结果如图11.
4所示.
(实例位置:光盘\TM\sl\11\3)图11.
4算术异常(1)在Eclipse中创建项目03,并在该项目中创建com.
mingrisoft包.
(2)在com.
mingrisoft包中创建类文件,名称为ExceptionTest.
在该类的主方法中,演示出现算术异常的情况.
这里将第一条可能出现异常的语句应用try…catch语句捕获,并输出异常信息,第二条可能出现异常的语句不作处理.
代码如下:publicclassExceptionTest{publicstaticvoidmain(String[]args){System.
out.
println("-1.
0/0="+(-1.
0/0)演示负浮点数除0System.
out.
println("+1.
0/0="+(+1.
0/0)演示正浮点数除0try{System.
out.
println("-1/0="+(-1/0)演示负整数除0}catch(Exceptione){System.
out.
println("抛出异常:"+e.
getMessage());}System.
out.
println("+1/0="+(+1/0)演示正整数除0System.
out.
println("输出结束.
");}}11.
2.
4范例2:数组下标越界异常数组下标越界异常即ArrayIndexOutOfBoundsException,当访问的数组元素的下标值大于数组的最大下标值时发生.
也就是数组元素的下标值大于等于数组的长度时发生.
本范例将演示出现数组下标越界异常(ArrayIndexOutOfBoundsException)的情况.
运行结果如图11.
5所示.
(实例位置:光盘\TM\sl\11\4)图11.
5数组下标越界异常(1)在Eclipse中创建项目04,并在该项目中创建com.
mingrisoft包.
(2)在com.
mingrisoft包中创建类文件,名称为ArrayExceptionTest.
在该类的main()方法中,首先声明一个长度为5的整型数组,并应用Arrays对象的fill()方法,将数组中所有元素赋值为8,然后应用for循环遍历输出所有数组元素.
代码如下:publicclassArrayExceptionTest{publicstaticvoidmain(String[]args){int[]array=newint[5]声明一个长度为5的整型数组Arrays.
fill(array,8)将新声明数组的所有元素赋值为8for(inti=0;iclazz=Class.
forName(得到一个空的Class对象System.
out.
println("离开try语句块");}catch(ClassNotFoundExceptione)定义catch语句块System.
out.
println("进入catch语句块");e.
printStackTrace();System.
out.
println("离开catch语句块");}finally定义finally语句块System.
out.
println("进入finally语句块");}}}11.
8.
2经典范例2:数据库操作异常视频讲解:光盘\TM\lx\11\数据库操作异常.
exe数据库操作异常即SQLException,通常发生在出现数据库访问错误时.
本范例将演示出现数据库操作异常的情况.
运行结果如图11.
15所示.
(实例位置:光盘\TM\sl\11\14)图11.
15数据库操作异常(1)在Eclipse中创建项目15,并在该项目中创建com.
mingrisoft包.
(2)在com.
mingrisoft包中编写ExceptionTest类,在该类的main()方法中,编写数据库连接的代码,并且捕获可能抛出的异常.
代码如下:publicclassExceptionTest{publicstaticvoidmain(String[]args){StringURL="jdbc:mysql://localhost:3306/db_database";//MySQL数据库的URLStringDRIVER="com.
mysql.
jdbc.
Driver"MySQL数据库的驱动StringUSERNAME="mr"数据库的用户名Connectionconnection=null;try{Class.
forName(DRIVER)加载驱动//建立连接connection=DriverManager.
getConnection(URL,USERNAME,"");}catch(SQLExceptione)捕获SQLExceptione.
printStackTrace();}catch(ClassNotFoundExceptione)捕获ClassNotFoundExceptione.
printStackTrace();}finally{try{connection.
close(释放资源}catch(SQLExceptione){e.
printStackTrace();}}}}11.
9本章小结本章向读者介绍的是Java中的异常处理机制.
通过本章的学习,读者应了解异常的概念、几种常见的异常类,掌握异常处理技术,以及如何创建、激活用户自定义的异常处理器.
Java中的异常处理是通过try…catch语句来实现的,也可以使用throws语句向上抛出.
建议读者不要将异常抛出,应该编写异常处理语句.
对于异常处理的使用原则,读者也应该理解.
vollcloud LLC首次推出6折促销,本次促销福利主要感恩与回馈广大用户对于我们的信任与支持,我们将继续稳步前行,为广大用户们提供更好的产品和服务,另外,本次促销码共限制使用30个,个人不限购,用完活动结束,同时所有vps产品支持3日内无条件退款和提供免费试用。需要了解更多产品可前往官网查看!vollcloud优惠码:VoLLcloud终生6折促销码:Y5C0V7R0YW商品名称CPU内存S...
以前我们在参与到云服务商促销活动的时候周期基本是一周时间,而如今我们会看到无论是云服务商还是电商活动基本上周期都要有超过一个月,所以我们有一些网友习惯在活动结束之前看看商家是不是有最后的促销活动吸引力的,比如有看到阿里云年中活动最后一周,如果我们有需要云服务器的可以看看。在前面的文章中(阿里云新人福利选择共享性N4云服务器年79.86元且送2月数据库),(LAOZUO.ORG)有提到阿里云今年的云...
我们先普及一下常识吧,每年9月的第一个星期一是美国劳工节。于是,有一些服务商会基于这些节日推出吸引用户的促销活动,比如RackNerd有推出四款洛杉矶和犹他州独立服务器,1G带宽、5个独立IP地址,可以配置Windows和Linux系统,如果有需要独立服务器的可以看看。第一、劳工节促销套餐这里有提供2个套餐。两个方案是选择犹他州的,有2个方案是可以选择洛杉矶机房的。CPU内存SSD硬盘配置流量价格...