异常

异常小结

异常体系结构呈树状,如图所示:

一、Error是程序中无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,java虚拟机(JVM)一般会选择线程终止。

Exception是程序本身可以处理的异常,它分为运行时异常和非运行时异常,也成为可检查异常(Checked Exception)和不可检查异常(Unchecked Exception)。

1、运行时异常都是RuntimeException类及其子类异常。这些异常是不可检查异常,程序中可以选择捕获处理,也可以不处理。这一般有程序逻辑错误引起的。应尽量避免发生。

2、非运行时异常是RuntimeException以外的异常。类型上都属于Exception类及其子类。必须要处理,不处理的话,编译就不会通过

try{  
}catch(异常类型 异常的变量名){  
//可能会出现的异常
}finally{  
//异常不管是否发生,方法返回之前,总是要执行的代码,释放资源。
}  
 //可能会产生异常的程序代码  
//处理异常代码  
try{
}finally{
}
//不处理异常

1、try语句块中的代码受到异常监控,如果try中的某条语句出现异常,则程序直接进入catch块进行匹配。

2、try块中出现异常而不处理则之后的所有语句不会再执行。

3、可以同时出现过个catch语句块,用来处理不同的异常。 使用多个catch块是,一定要注意,先捕获子类,后捕获父类。匹配一个之后,后面的就不进行匹配了。

4、catch语句带一个Throwable类型的参数。

5、finally语句块总是会在方法返回前执行,这个语句总是会执行的。

二、throw 关键字,用于手动的抛出异常,用于方法体内部,用来抛出一个Throwable类型的异常。

申明非RuntimeException类型的异常要再在方法上抛出,或者使用try-catch处理。

public static void test3() throws Exception{  
    //抛出一个检查异常  
    throw new Exception("方法test3中的Exception");  



RuntimeException e = new RuntimeException("你输入的不正确");
throw e;

三、throws关键字,用于方法体的外部,用来申明可能出现的异常,。

在方法上申明异常,申明之后该方法不用处理异常,调用该方法的程序处理异常。

四、自定义异常

1、定义一个类继承RuntimeException或者Exception。实现其中的构造方法。

2、项目开发时,不建议使用自定义异常。因为可读性差,而且java提供的异常已经基本够使用了。

五、Throwable类中的常用方法 

getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。 

getMessage():返回异常的消息信息。 

printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。 

六、 异常处理的一般原则 

1、 能处理就早处理,抛出不去还不能处理的就想法消化掉或者转换为RuntimeException处理。 

因为对于一个应用系统来说,抛出大量异常是有问题的,应该从程序开发角度尽可能的控制异常发生的可能。 

2、 对于检查异常,如果不能行之有效的处理,还不如转换为RuntimeException抛出。 

这样也让上层的代码有选择的余地――可处理也可不处理。 

3、 对于一个应用系统来说,应该有自己的一套异常处理框架,这样当异常发生时,也能得到统一的处理风格, 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值