网站首页 > java教程 正文
要: “异常”指的是程序运行时出现的非正常情况。在用传统的语言编程时,程序员只能通过函数的返回值来发出错误信息。这易于导致很多错误,因为在很多情况下需要知道错误产生的内部细节。通常,用全局变量errno来存储“异常”的类型。这容易导致误用,因为一个errno的值有可能在被处理?reg;前被另外的错误覆盖掉。
Java的“异常”
“异常”指的是程序运行时出现的非正常情况。在用传统的语言编程时,程序员只能通过函数的返回值来发出错误信息。这易于导致很多错误,因为在很多情况下需要知道错误产生的内部细节。通常,用全局变量errno来存储“异常”的类型。这容易导致误用,因为一个errno的值有可能在被处理?reg;前被另外的错误覆盖掉。即使最优美的C语言程序,为了处理“异常”情况,也常求助于goto语句。Java对“异常”的处理是面向对象的。一个Java的Exception是一个描述“异常”情况的对象。当出现“异常”情况时,一个Exception对象就产生了,并放到产生这个“异常”的成员函数里。
8.1基础
Java的“异常”处理是通过5个关键词来实现的:try,catch,throw,throws和finally。用try来执行一段程序,如果出现“异常”,系统抛出(throws?copy;一个“异常”,你可以通过它的类型来捕捉(catch?copy;它,或最后(finally?copy;由缺省处理器来处理。下面是“异常”处理程序的基本形式:
try{//程序块}catch(ExceptionType1e){//对ExceptionType1的处理}catch(ExceptionType2e){//对ExceptionType2的处理throw(e);//再抛出这个“异常”}finally{}
8.2"异常”的类型
在“异常”类层次的最上层有一个单独的类叫做Throwable。这个类用来表示所有的“异常”情况。每个“异常”类型都是Throwable的子类。Throwable有两个直接的子类。一类是Exception,是用户程序能够捕捉到的“异常”情况。我们将通过产生它的子类来创建自己的“异常”。另一类是Error,它定义了那?copy;通常无法捕捉到的“异常”。要谨慎使用Error子类,因为它们通常会导致灾难性的失败。在Exception中有一个子类RuntimeException,它是程序运行时自动地对某?copy;错误作出反应而产生的。
8.3不捕捉“异常”
“异常”对象是Java在运行时对某?copy;“异常”情况作出反应而产生的。例如,下面这个小程序包含一个整数被0除的“异常”。
classExc0{publicstaticvoidmain(Stringargs[]){intd=0;inta=42/d;}}
当Java执行这个除法时,由于分母是0,就会构造一个“异常”对象来使程序停下来并处理这个错误情况,在运行时“抛出”(throw?copy;这个“异常”。说“抛出”是因为它象一个滚烫的马铃薯,你必须把它抓住并立即处理。程序流将会在除号操作符处被打断,然后检查当前的调用堆栈来查找“异常”。一个“异常”处理器是用来立即处理“异常”情况的。在这个例子里,我们没有编一个“异常”处理器,所以缺省的处理器就发挥作用了。缺省的处理器打印Exception的字符?reg;值和发生“异常”的地点。下面是我们的小例子的输出。
C:\>javaExc0java.lang.arithmeticException:/byzeroatExc0.main(Exc0.java:4)
8.4try与catch
通常我们希望自己来处理“异常”并继续运行。可以用try来指定一块预防所有“异常”的的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。例如,下面的例子是在前面的例子的基础上构造的,但它包含一个try程序块和一个catch子句。
classexc1{publicstaticvoidmain(stringargs[]){try{intd=0;inta=42/d;}catch(arithmeticexceptione){system.out.println("divisionbyzero");}}}
catch子句的目标是解决“异常”情况,把一?copy;变量设到合理的状态,并象没有出错一样继续运行。如果一个子程序不处理某个“异常”,则返到上一级处理,直到最外一级。有想学Java的朋友欢迎来尚学堂报名 。机不可失哦。更多技术交流者或想获取JAVA资料请加微信(858568103)
猜你喜欢
- 2024-10-11 第四讲《JAVA基础之运算符》,小妙招教你速记、速填坑
- 2024-10-11 容易让人忽视的,java高精度运算(java高精度转低精度的原则)
- 2024-10-11 提高千倍效率的 Java 代码小技巧(java提高班)
- 2024-10-11 一文搞明白java中的位运算、补码、反码、原码
- 2024-10-11 十五、Java运算符-赋值运算符与instanceof运算符
- 2024-10-11 一文掌握Java二、八、十六进制运算实现原理
- 2024-10-11 计算机进制转换(计算机进制转换教程)
- 2024-10-11 Java基础之try catch finally的原理
- 2024-10-11 LeetCode算法第29题:两数相除(计算两数相除并输出结果)
- 2024-10-11 Java教程之运算符(java运算符运算方法)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)