java学习笔记46:异常机制、异常分类、Error异常、Exception异常

一、异常:写程序时,经常遇到例外的情况,我们称之为异常

在实际工作中,我们遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求;你的程序要打开某个文件,这个文件可能不存在或者文件格式不对;你要读取数据库的数据,数据可能是空的;我们的程序再运行着,但是内存或硬盘可能满了等等。
  软件程序在运行过程中,非常可能遇到刚刚提到的这些问题,我们称之为异常,英文是:Exception,意思是例外。
  如果我们要拷贝一个文件,在没有异常机制的情况下,我们需要考虑各种异常情况,伪代码如下:

public class Test1 {
    public static void main(String[] args) {
        //将d:/a.txt复制到e:/a.txt
        if("d:/a.txt"这个文件存在){
            if(e盘的空间大于a.txt文件长度){
                if(文件复制一半IO流断掉){
                    停止copy,输出:IO流出问题!
                }else{
                    copyFile("d:/a.txt","e:/a.txt");
                }
            }else{
                System.out.println("e盘空间不够存放a.txt!");
            }
        }else{
            System.out.println("a.txt不存在!");
        }
    }
}

这种方式,有两个坏处:

  1. 逻辑代码和错误处理代码放一起!

  2. 程序员本身需要考虑的例外情况较复杂,对程序员本身要求较高!

那么,我们如何解决应对异常情况呢?
  Java的异常机制给我们提供了方便的处理方式。如上情况,如果是用Java的异常机制来处理,示意代码如下(仅限示意,不能运行):

try {
    copyFile("d:/a.txt","e:/a.txt");
} catch (Exception e) {
    e.printStackTrace();
}

异常机制本质: 就是当程序出现错误,程序安全退出的机制。

二、异常的概念

异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。
  在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。
  所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。
  我们开始看我们的第一个异常对象,并分析一下异常机制是如何工作的。

示例:异常的分析

public class Test2 {
    public static void main(String[] args) {
        int i=1/0;  //除数为0
        System.out.println(i);
    }
}

运行结果:
在这里插入图片描述
Java是采用面向对象的方式来处理异常的。处理过程:

  1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。

  2.  捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。

三、异常的分类

JDK 中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。
  Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception。Java异常类的层次结构如下图所示。
  在这里插入图片描述
    1) Error 错误(不需要自己管)
    2) Runtime Exception 运行时异常(不需要检查的异常 Unchecked Exception)
     (不需要编译器处理)
    3) Checked Exception 需要检查的异常(需要编译器处理)

四、Error异常和Exception异常

1、Error异常

Error是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
  Error表明系统JVM已经处于不可恢复的崩溃状态中。我们不需要管它。

java.lang包中的Error类
在这里插入图片描述
Error与Exception的区别

  1. 我开着车走在路上,一头猪冲在路中间,我刹车。这叫一个异常。

  2.  我开着车在路上,发动机坏了,我停车,这叫错误。系统处于不可恢复的崩溃状态。
      发动机什么时候坏?我们普通司机能管吗?不能。发动机什么时候坏是汽车厂发动机制造商的事。
2、Exception异常

Exception是程序本身能够处理的异常,如:空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、类型转换异常(ClassCastException)、算术异常(ArithmeticException)等。
  
  Exception类是所有异常类的父类,其子类对应了各种各样可能出现的异常事件。
  通常Java的异常可分为:
  1、RuntimeException 运行时异常
  2、CheckedException 已检查异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值