异常处理----使用 try…catch…finally 处理异常
使用 try…catch…finally 处理异常
异常处理是通过try-catch-finally语句实现的。
try {
...... //可能产生异常的代码
} catch( ExceptionName1 e ) {
...... //当产生ExceptionName1型异常时的处置措施
} catch( ExceptionName2 e ) {
...... //当产生ExceptionName2型异常时的处置措施
} [finally {
...... //无条件执行的语句
} ]
异常处理举例
public class Test8_2 {
public static void main(String[] args) {
String friends[]={"lisa","bily","kessy"};
try {
for(int i=0;i<5;i++) {
System.out.println(friends[i]);
}
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("index err");
}
System.out.println("\nthis is the end");
}
}
运行结果:
lisa
bily
kessy
index err
this is the end
public class DivideZero1{
int x;
public static void main(String[] args) {
int y;
DivideZero1 c=new DivideZero1();
try{
y=3/c.x;
} catch(ArithmeticException e){
System.out.println("divide by zero error!");
}
System.out.println("program ends ok!");
}
}
运行结果:
divide by zero error!
program ends ok!
public class TestTryCatchFinally {
public static void main(String[] args) {
try {
int i = 10;
int j = i / 0;
}catch (NullPointerException e) {
System.out.println(e.getMessage());
}catch(ClassCastException e) {
System.out.println(e.getMessage());
}catch(Exception e) {
System.out.println(e.getMessage());
} finally{
System.out.println("finally...");
}
//不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行。
System.out.println("end...");
//示例编译时异常, IO 异常属于编译时异常.
try {
InputStream is = new FileInputStream("abc.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
捕获异常
try
捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中。
catch (Exceptiontype e)
在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类作为catch的参数。
可以用ArithmeticException类作为参数,也可以用RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数。但不能是与ArithmeticException类无关的异常,如NullPointerException,那么,catch中的语句将不会执行。
捕获异常的有关信息:
与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。
getMessage( ) 方法,用来得到有关异常事件的信息
printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。
finally
捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行。
finally语句是可选的
运行时异常和编译时异常
前面但使用的异常都是RuntimeException类或是它的子类,这些类的异常的特点是:即使没有使用try和catch捕获,Java自己也能捕获,并且编译通过 ( 但运行时会发生异常使得程序运行终止 )。
如果抛出的异常是IOException类的异常,则必须捕获,否则编译错误。
IOException 异常处理举例
public class Test8_3{
public static void main(String[] args) {
FileInputStream in=new FileInputStream("myfile.txt");
int b;
b = in.read();
while(b!= -1) {
System.out.print((char)b);
b = in.read();
}
in.close();
}
}
public class Test8_3 {
public static void main(String[] args) {
try{
FileInputStream in=new FileInputStream("myfile.txt");
int b;
b = in.read();
while(b!= -1) {
System.out.print((char)b);
b = in.read();
}
in.close();
}catch (IOException e) {
System.out.println(e);
}finally {
System.out.println(" It’s ok!");
}
}
}
异常处理----使用 try…catch…finally 处理异常的更多相关文章
- C++异常处理:try,catch,throw,finally的用法
写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...
- java的异常处理机制(try…catch…finally)
1 引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信 ...
- 异常处理(try...catch...final 和 throw , throws)
1.传统(弱语言)处理异常方式 原理:利用判断来控制异常出现 publicclass Test01 { publicstaticvoid main(String[] args) { Scanner s ...
- 异常处理(try catch throw)详解(C++)
选择异常处理的编程方法的具体原因如下: 1.把错误处理和真正的工作分开来: 2.代码更易组织,更清晰,复杂的工作任务更容易实现: 3.毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了: 4 ...
- 22 C#中的异常处理入门 try catch throw
软件运行过程中,如果出现了软件正常运行不应该出现的情况,软件就出现了异常.这时候我们需要去处理这些异常.或者让程序终止,避免出现更严重的错误.或者提示用户进行某些更改让程序可以继续运行下去. C#编程 ...
- 异常处理之多重catch
package com.sxt.exception.test1; import java.util.InputMismatchException; import java.util.Scanner; ...
- 异常处理之try catch finally
package com.sxt.wrapper.test2; /* 0418 * 异常处理 * 采用异常处理的好处:保证程序发生异常后可以继续执行 * e.printStaceTrace:打印堆栈信息 ...
- 异常处理的方式二:throws+异常类型
package com.yhqtv.demo01Exception; import java.io.File; import java.io.FileInputStream; import java. ...
- C++异常处理(try catch throw)完全攻略
程序运行时常会碰到一些异常情况,例如: 做除法的时候除数为 0: 用户输入年龄时输入了一个负数: 用 new 运算符动态分配空间时,空间不够导致无法分配: 访问数组元素时,下标越界:打开文件读取时,文 ...
随机推荐
- NSIS安装程序制作工具判断系统是否安装.NET
前段时间忙了很久的系统总算上线了,由于是WinForm程序不能整个文件夹的发给客户使用.所以必须要打包,记得以前在VS2005中是自带部署功能的.现在换了VS2013那个部署功能完全弄不清方向.最后在 ...
- XPath Cookbook-Axes(轴)
http://blog.csdn.net/duruiqi_fx/article/details/55511164 ******************************************* ...
- CentOS7.3 搭建Openvpn
环境:CentOS Linux release 7.3.1611 (Core) 查看os版本命令:[root@openvpn ~]# cat /etc/redhat-release 命令记录如下: y ...
- ajaxfileupload 半成品遇到的问题,不走success 走error的问题
大部分都是datatype 为 json的时候遇到的 1.遇到json被加pre标签 去掉 2.遇到json被加audio 标签 去掉 3.遇到json转换错误,换方式转 改后的代码如下 , 有注 ...
- 一次执行批量sql的方法
在javaweb开发中,免不了一次业务操作会设计到几个表之间的添加,获取主键插入子表 1.主表使用单条插入,获取id,自表获取id进行批量插入最后完成操作 SimpleJdbcTemplateDaoI ...
- C#中关于系统用户信息持久化(接上文)
首先传几张效果图描述一下功能: 经过上文用户名和密码的验证后,就到了添加用户这一步,登陆后的用户可以添加新的用户,被添加的用户可以登陆系统. 这里会用到C#中的“正则表达式”对用户名格式进行判断,以及 ...
- Android.util.Log 关于Android开发中打印log
日常Android开发真机调试过程经常会遇到系统日志过多过快,想看的内容一闪而过的问题.而自定义些log可以很好的解决这些问题. 代码中添加 log androidsdk中提供了log输出的ap ...
- Cannon
Description In Chinese Chess, there is one kind of powerful chessmen called Cannon. It can move hori ...
- python content list(1--4)
part 1 python language 1. environment building and config 2. variable and data type 3. programming b ...
- wpf/Silverlight/wp中如何绑定模板中的属性
<Style TargetType="{x:Type TabItem}" x:Key="EditorTabItemStyle"> <Sette ...