Java的异常机制

1.什么是异常?

代码正常运行不会出问题,但是遇到意外,参数变量,不符合要求,发生意外,代码终止运行
代码中的异常处理好了,代码就可以顺利的继续运行!
异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。

Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。

     1.try:它里面放置可能引发异常的代码

     2.catch:后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。

     3.finally:主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件),异常机制总是保证finally块总是被执行。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者   throw等终止方法的语句,则就不会跳回执行,直接停止。

     4.throw:用于抛出一个实际的异常,可以单独作为语句使用,抛出一个具体的异常对象。

     5.throws:用在方法签名中,用于声明该方法可能抛出的异常。

Java的异常分为两种,checked异常(编译时异常)和Runtime异常(运行时异常)

  1.   java认为checked异常都是可以再编译阶段被处理的异常,所以它强制程序处理所有的checked异常,而Runtime异常无须处理,java程序必须显式处理checked异常,如果程序没有处理,则在编译时会发生错误,无法通过编译。
    
  2.   checked异常体现了java设计哲学:没有完善处理的代码根本不会被执行,体现了java的严谨性,
    

    对于构造大型、健壮、可维护的应用系统而言,错误处理是整个应用需要考虑的重要方面。Java异常处理机制,在程序运行出现意外时,系统会生成一个Exception对象,来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。

    如果执行try块里的业务逻辑代码时出现异常,系统会自动生成一个异常对象,该异常对象被提交给运行环境,这个过程被称为抛出(throw)异常。Java环境收到异常对象时,会寻找合适的catch块,如果找不到,java运行环境就会终止,java程序将退出。

    不同的catch块,视为了针对不同的异常类,提供不同的处理方法。

对于错误处理机制,主要有如下的两个缺点:

1.无法穷举所有异常情况:因为人类的知识是有限的,异常情况总比可以考虑到的情况多,总有漏网之鱼

2.错误处理代码和业务实现代码混杂严重影响程序的可读性,会增加程序维护的难度。

1.使用try…catch捕获异常

java提出了一种假设,如果程序可以顺利完成,那么一切正常,把系统的业务实现代码放在try块中定义,所有的异常处理逻辑放在catch块中进行处理。

即:try{

//业务实现代码

}

catch(Exception e){

输入不合法

}

上面的格式中try块和catch块后的{…}都是不可以省略的!

执行步骤:

1.如果执行try块中的业务逻辑代码时出现异常,系统自动生成一个异常对象,该异常对象被提交给java运行环境,这个过程称为抛出(throw)异常。

2.当java运行环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的cathc块并把该异常对象交给catch块处理,那这个过程称为捕获(catch)异常;如果java运行时环境找不到捕获异常的catch块,则运行时环境终止,jav程序也将退出。

注意1:不管程序代码块是否处于try块中,甚至包括catch块中代码,只要执行该代码时出现了异常,系统都会自动生成一个异常对象,如果程序没有为这段代码定义任何catch块,java运行环境肯定找不到处理该异常的catch块,程序肯定在此退出。

注意2:try块后可以有多个catch块,try块后使用多个catch块是为了针对不同异常类提供的不同的异常处理方式。当系统发生不同意外情况时,系统会生成不同的异常对象,java运行时就会根据该异常对象所属的异常类来决定使用哪个catch块来处理该异常。

注意3:通常情况下,如果try块被执行一次,则try块后只有一个catch块会被执行,绝不可能有多个catch块被执行,除非在循环中使用类continue开始下一次循环,下一次循环又重新运行了try块,这才可能导致多个catch块被执行。

注意4:进行异常捕获时,一定要记住先捕获小的异常,再捕获大的异常。

Java的异常类,以及他们的继承关系:

java把所有非正常情况分成两种:异常(Exception)和错误(Error),都是继承自Throwable父类。

Error错误:一般是指虚拟机相关的问题,如系统崩溃,虚拟机出错误等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常不处理。

     Throwable():Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。

     1.Error(错误):一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误,因此应用程序不应该捕获Error对象,也无须在其throws子句中声明该方法抛出任何Error或其子类。

     2.Exception:Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件

     (1). SQLException:该异常提供关于数据库访问错误或其他错误的信息。

     (2). RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类

     (3).IOException:此类为异常的通用类,它是由失败的或中断的 I/O 操作生成的。

捕获异常

try{
	可能出错的代码
}catch{
	异常的处理代码
}finally{
	以上的代码是否报错都会执行此处代码
}

抛异常:
	在方法的后面 throws 异常类型  
	本质就是在本方法中不处理异常

throw  throws
throw:抛出一个异常对象---写在方法的内部
throws:本方法中不处理异常给调用者--写在方法上面的

前面见过的异常:
1.NullPointerException:空指针异常—当一个空的对象调用方法或字段
2.ArrayIndexOutOfBoundsException:数组越界 —用非法索引访问数组时抛出的异常
3.ArithmeticException:算术异常
4.NumberFormatException:

   异常体系的认识:
  	Throwable
   		|--Error:程序员/程序无能为力
   		|--Exception
  			|--RuntimeException:运行是异常
 				|--非运行时异常
 
自定义异常:
	自己写一个类,继承 Exception 或者 RuntimeException
	
	提供两个构造方法 调用父类的构造方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值