JavaSE 第十一章 异常

1、异常概述与体现结构

异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。 (开发过程中的语法错误和逻 辑错误不是异常)

Java程序在执行过程中所发生的异常事件可分为两类:

1>Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比 如:StackOverflowError和OOM。一般不编写针对性的代码进行处理。

2>Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行 处理。例如:空指针异常,数组下标越界异常。

3>Exception下异常又可以分为 运行时异常 和 编译时异常

1)运行时异常是指编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该 积极避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。对于这类异 常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。

2)是指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。编译 器要求Java程序必须捕获或声明所有编译时异常。对于这类异常,如果程序不处理,可能会带来意想不 到的结果。

2、异常处理机制

Java采用的异常处理机制,是将异常处理的程序代码集中在一起,与正常的程序代码分开,使得 程序简洁、优雅,并易于维护

1>捕获异常 try-catch-finally:如果一个方法内抛出异常,该异常对象会被抛给调用者方法中处 理。如果异常没有在调用者方法中处理,它继续被抛给这个调用方法的上层方法。这个过程将一直继续 下去,直到异常被处理。这一过程称为捕获(catch)异常。 如果一个异常回到main()方法,并且main()也 不处理,则程序运行终止。 程序员通常只能处理Exception,而对Error无能为力。

try捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块 中。

catch (Exceptiontype e)在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随 一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

捕获异常的有关信息:与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。

getMessage() 获取异常信息,返回字符串

printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

finally 捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到 程序的其它部分以前,能够对程序的状态作统一的管理。

不论在try代码块中是否发生了异常事件,catch语句是否执行,catch语句是否有异常,catch语句 中是否有return,finally块中的语句都会被执行。finally语句和catch语句是任选的。

前面使用的异常都是RuntimeException类或是它的子类,这些类的异常的特点是:即使没有使用try 和catch捕获,Java自己也能捕获,并且编译通过( 但运行时会发生异常使得程序运行终止 )。

如果抛出的异常是IOException等类型的非运行时异常,则必须捕获,否则编译错误。也就是说,我 们必须处理编译时异常,将异常进行捕捉,转化为运行时异常

1.正常情况

2.异常情况

3.异常类型不匹配

4.finally:在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能 被执行.

2>声明异常:声明抛出异常是Java中处理异常的第二种方式。

如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法 应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。在方法 声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型, 也可以是它的父类。

3>抛出异常Java程序的执行过程中如出现异常,会生成一个异常类对象,该异常对象将被提交给 Java运行时系统,这个过程称为抛出(throw)异常。

3、自定义异常一般地,用户自定义异常类都是RuntimeException的子类。 自定义异常类通常需要 编写几个重载的构造器。 自定义异常需要提供serialVersionUID 自定义的异常通过throw抛出。 自定义 异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值