java异常处理

在c语言中,错误处理是通过函数返回值判断的。所以,程序结构冗杂,比如:

int r1=f1(...);
if(r1<0)
{
...//错误处理
}
int r2=f2(...);
if(r2<0)
{
...//错误处理
}
......

所以java与c++对此做了改进,将正常代码与错误代码分离。即
异常处理:
Throwable类——可抛出特性:该类或其子类的对象能够被throw语句(将一个对象抛出)抛出。
有哪些子类呢:
1、Error类:错误类,在程序健壮性可信任的情况下,若程序崩溃,且是因为Error类或其子类报错,不需要对其进行处理,这是由于java内部bug或者操作系统不稳定导致,不是程序员的责任。
2、Exception类:异常类,所有此类问题都是程序员的责任,需要对代码进行处理。——异常分为两类:checked exception与unchecked exception,前者必须要对异常进行捕获,后者可以不对异常进行捕获;异常类有两个子类:IOException(属于checked exception),RuntimeException(属于unchecked exception)绝对不允许try catch捕获,而应该去修改源代码。
在这里插入图片描述try-catch-finally语句

try{
s1;
s2;
...
sn;
}
catch(Exception e1){处理e1的代码}
catch(Exception e2){处理e2的代码}
...
finally{...}

1、若s1,s2…sn,未抛出异常,那么catch块不执行,直接执行finally代码。
2、若s2出现异常,内部throw语句抛出异常X(假设在嵌套函数第100层时出现异常,将会直接进行大幅度跳转,转至catch块),根据错误类型进行处理。
那么怎么判错误类型呢(与哪一个catch语句相配):
从上往下依次判(相配),异常对象X是不是instanceof 某个类型,是则true,否则false。那么什么叫做instanceof 某个类型呢,举例:

//B是A的子类,C是B的子类
A a=new A();
B b=new B();
C c=new C();
D d=new D();
a instanceof A-true
b instanceof A-true
c instanceof A-true
d instanceof A-false
b instanceof C-false

所以即判断X是不是某个类或其子类的对象。当在catch块中寻找到第一个相配位置时,执行后方语句,在执行finally语句。
3、若catch语句全不相配,此时,先将finally语句执行,再将异常向外抛,在外层catch语句寻找,若在最外层仍然无法捕获,最终将会抛给JVM(虚拟机),程序停止执行。
catch语句顺序,由子到父
throws:抛出异常声明语句,要与throw语句区分开。
举例:
库函数read()

//static int read() throws IOException
int c
while(c=System.in.read()!=-1)
	System.out.print(...);
//此时会编译报错,因为read()要进行异常补货
//改正1,捕获异常
int c;
try{
while(c=System.in.read()!=-1)
	System.out.print(...);
}catch(IOException e){
	System.out.print("发现异常"+e.getMessage());
}
//改正2,向外函数抛,假设在外函数是main
public static void main(String []args)
throws IOException
{
int c;
while(c=System.in.read()!=-1)
	System.out.print(...);
}
//改正3,定义自己的异常类,进行异常转换
public class MyException extends Exception{
...
}
public static void main(String []args)
throws MyException
{
	int c;
	try{
	while(c=System.in.read()!=-1)
		System.out.print(...);
	}catch(IOException e){
	throw new MyException();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K_K_Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值