异常

异常

一、概念

异常指的是程序员运行时发生的非正常情况。我们能处理的异常一般都发生在编译期。
异常的类层次
.在这里插入图片描述

二、异常的处理结构

Java中异常处理通常离不开五个关键字: try,catch,finally,throw,throws。
java中异常处理的方式有两种:捕获异常、声明抛出异常。
捕获异常:就地解决,并让程序继续执行。
try:将所有有可能发生异常的语句均放入到try{ }块中。
catch(必有):用于处理try块代码中所生成的异常事件,catch语句只需要一个形式参数指明它所能够捕获的异常类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的异常对象传递给catch块。在catch块中是对异常对象进行处理的代码,与访问其他对象一样,可以访问一个异常对象的数据成员或调用它的方法。
catch语句的顺序):捕获异常的顺序和catch语句的顺序有关,当捕获到一个异常时,剩下的catch语句的就不再进行匹配,因此,在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。
finally(可无):通过finally语句为异常提供一个统一的出口,使得在控制流转到程序其他部分以前,能够对程序的状态作统一的管理。不论在try块中是否发生异常,finally中的语句都会被执行
注意

  • 一个try块对应一个/多个catch,只对应一个finally
  • 如果try块中包含return,并且finally块中也包含return,则从finally块中return退出
  • 若当前try块中存在多条可能发生异常的A、B、C三条代码,若A异常,此时后边的B、C均不会被执行。这是为了避免try块的嵌套。
try{
//可发生异常的代码
}catch(Exception e){
e.printStackTrace();//Null空值异常
}

抛出异常:在java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。生成的异常对象将传递给java运行时系统,这一异常的产生和提交过程称为抛出异常。抛出异常是产生异常对象的过程,首先要生成异常对象,异常或者由虚拟机生成,或由某些类的实例生成,也可在程序中产生,在方法中,抛出异常对象是通过throw语句实现的
声明抛出异常:将异常向外转移,即将异常抛出方法之外,由调用该方法的环境去处理。一个方法不处理它产生的异常,而是沿着调用层次向上传递,由调用它的方法来处理这些异常,声明抛出异常是一种消极的异常处理机制。
例如

Exception e=new Exception();
throw e;

注意

  • throw子句中同时指明多个异常,之间由逗号隔开。
  • 对Error类或其子类的对象,RuntimeException类或其子类,程序员可以不进行处理。
  • 除此之外的异常,程序员都应该在程序中进行处理。处理方式分为以下几种:
    1)用try-catch-finally进行捕获处理
    2)明确表示不处理从而声明抛出异常
    3)先捕获处理后再次抛出
  • 不能过分细分异常
  • throws扔的是异常类,throw扔的是异常对象

三、自定义异常

自定义异常类设计
在程序中,可以创建自定义类的异常类。用户定义的异常必须继承自Throwable或Exception类,建议用Exception类。
抛出异常
例如

//自定义异常类
class MyException extends Exception{
String id;//异常标识
public MyException(String str){
id=str;
}
public String toString(){
return("异常:"+id);
}
}
public static void main(String[]args){
try{
throw new MyException("一个测试异常!");
}catch(MyException e){
System.out.println(e);
}
}
}

运行结果

异常:一个测试异常!

方法的异常声明方法

修饰符  返回类型 方法名(参数列表) throws 异常类名列表{
...
throw 异常类名;
...
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值