异常处理

即使代码写的尽善尽美,但是在系统运行过程中还是会遇到各种各样的问题,比如:客户输入数据的格式、读取的文件不存在,网络是否畅通

 

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

ERROR:java虚拟机无法解决的严重问题,jvm系统内部问题,资源耗尽等严重问题,一般不编写针对性的代码进行处理

Exception:因编程错误或者其它偶然外在因素导致的一般性问题,可以使用针对性的问题进行处理。如:空指针访问、试图读取不存在的文件

  对于这些问题,一般有两种解决办法:

    1、一旦遇到这些错误,程序就终止运行,

    2、程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理

 

 

运行时异常:

  编译器不强制要求处理的异常,一般是指编译时候的逻辑错误,对于这类异常,可以不做处理,这类异常很普遍,若全部处理,可能会对程序的可读性和运行效率产生影响

编译时异常:

    编译器要求必须处理的异常,即程序运行时候由于外界的异常因素造成的异常,对于这类异常,如果不处理,可能会带来意想不到的结果

java提供的异常处理是抓抛模型

java程序运行时候如果出现异常,会生成一个异常处理类对象,该异常对象会交给java运行时系统,这个过程称为抛出异常

异常对象的生成:

  1、有java虚拟机自动生成,程序运行过程中,虚拟机检测到程序发生了问题,如果在当前的代码中没有找到相应的处理程序,就会在后天自动创建一个对应的异常类实例并抛出

  2、有开发人员手动创建,创建好的异常对象如果不抛出,对程序没有任何影响

如果一个方法内抛出异常,该异常对象会抛给方法的调用者,如果方法调用者在程序中没有处理,它将继续向上抛出,直到异常被处理

  如果一个异常回到main方法,并且main方法也没有处理,则程序终止运行

无论在try代码块中是否发生了异常,catch语句是否执行,catch语句中是否异常,catch是否有return语句,finally中的语句都会执行

声明抛出异常:

  如果方法中可能生产某种异常,但是并不能确定如何处理这种异常,则此方法应显示的声明抛出异常,表明该方法不对异常做处理,由该方法的调用者处理

在方法声明中用throws语句可以声明异常的列表,throws后面的异常方法可以是方法中产生的异常类型,也可以是它的父类

java异常类对象在程序执行过程中出现的异常可以由系统自动抛出,也可以根据需要人工创建并抛出

首先生产异常类对象,然后通过throw语句实现抛出操作(提交给java运行环境),可以抛出的异常是Throwable或子类

 捕获异常最理想是在编译期间,但有的错误只在运行时才会发生

创建自定义异常类

一般的:用户自定义类都是RuntimeException的子类

自定义类都需要编写几个重载的构造器

自定义的异常类通过throw抛出

自定义类最重要的是异常类的名称,当异常出现时候,可以根据异常判断异常的类型

原文地址:https://www.cnblogs.com/lzb0803/p/8964979.html