8、异常机制---- 8.1 Error和Exception

8、异常机制

8.1 Error和Exception

  1. 什么是异常
    • 在实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序正在运行,内存或硬盘可能满了。等等
    • 程序软件在运行过程中,非常可能遇到刚刚提到的这些异常问题,我们称之为异常,英文是Exception,意思是是例外。这些例外的情况称之为异常,异常能让我们写的程序做出合理的处理。而不至于程序崩溃。
    • 异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。
    • 异常发生在程序运行期间,它影响了正常的程序执行流程

错误示例:递归调用

package com.baidu.www.exception;

public class Demo01 {
    public static void main(String[] args) {
        new Demo01().a();
    }
    public void a(){
        b();
    }
    public void b(){
        a();
    }
}
/**
 * Exception in thread "main" java.lang.StackOverflowError
 * 	at com.baidu.www.exception.Demo01.a(Demo01.java:8)
 * 	at com.baidu.www.exception.Demo01.b(Demo01.java:11)
 * 	at com.baidu.www.exception.Demo01.a(Demo01.java:8)
 * 	at com.baidu.www.exception.Demo01.b(Demo01.java:11)
 *
 * Process finished with exit code 1
 */

异常示例

package com.baidu.www.exception;

public class Demo01 {
    public static void main(String[] args) {
        System.out.println(11/0);
    }
}
/**
 * Exception in thread "main" java.lang.ArithmeticException: / by zero
 * 	at com.baidu.www.exception.Demo01.main(Demo01.java:5)
 *
 * Process finished with exit code 1
 */
/
  1. 异常简单的分类

    Java异常主要掌握一下三种类型的异常

    1. 检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常(比如用户输入错误,这也是很多公司有测试人员这个职位的原因,专门站在用户的角度来找程序的各种bug),这是程序员无法预见的。例如用户要打开一个不存在的文件时(这个时候程序员无法去处理,因为用户要做什么事情程序员根本不知道),一个异常就发生了,这些异常在编译时不能被简单地忽略。
    2. 运行时异常:(比如递归调用,在我们写程序的时候并没有报错,但是在程序运行时就会报错,这种异常是程序员最容易避免的异常,因为程序是自己编写的,知道程序那里会出现问题)运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
    3. 错误ERROR:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,他们在编译也检查不到的。
  2. 异常体系结构

    异常处理框架:所有的异常都可以用一个异常类表示

    Java把异常作为对象来处理,并定义一个基类java.long.Throwable作为所有异常的超类。

    在java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。

    从图中我们可以看出所有的错误和异常都是Throwable的子类,Error主要是虚拟机错误和AWT错误(GUI编程即图形界面化编程遇到的错误)

    8、异常机制---- 8.1 Error和Exception_第1张图片

    Error与Exception一些简单的区别

    Error

    1. Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
    2. Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
    3. 还有发生在虚拟机试图执行应用时,如类定义错误(NoClassDefFoundError)、链接错误(LinkageError)。这些错误是不可查的,因为他们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。

    Exception

    1. 在Exception分支中有一个非常重要的子分支(子类)RuntimeException(运行时异常)

      1. ArrayIndexOutOfBoundsException(数组下标越界)
      2. NullPointerException(空指针异常)
      3. ArithmeticException(算术异常)
      4. MissingResourceException(丢失资源)
      5. ClassNotFoundException(找不到类)等异常

      这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理,这些异常百分之百与程序员有关系,一般情况下我们把除了运行时异常之外的异常都成为非运行时异常

    2. 这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

    3. Error和Exception的区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;Exception通常情况下是可以被程序处理的,并且在程序中尽可能的去处理这些异常。

  3. Java异常处理机制

  4. 处理异常

  5. 自定义异常

  6. 总结

你可能感兴趣的:(Java学习,java,开发语言)