【Java基础】——深入理解Java异常

1- 什么是异常概述(What、Why)

1-1 什么是异常(What)

基本概念

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

执行过程中的异常可以分为两类

  • Error(错误):Java 虚拟机无法解决的严重问题。比如 JVM 系统内部错误、资源耗尽等情况。比如:StackOverflowError(栈溢出)和 OOM(out of memory),Error 是严重的错误,程序会崩溃。
  • Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等。
    • Exception分为两大类:运行时异常(程序运行时,发生的异常)和 编译时异常(编译时,编译器检查出来的异常)。

通过一个例子,引出异常

public class Exception1 {
   
   

    public static void main(String[] args) {
   
   
        int num1 = 10;
        int num2 = 0;
        // 执行到这部分的时候,程序会不出现(抛出异常) ArithmeticException
        // 当抛出异常之后,程序就退出崩溃了,下面的代码就不再执行
        int res = num1/num2;
        System.out.println("程序继续运行...");
    }
}

  • 针对上述问题,执行到 int res = num1/num2;代码的时候,会出现异常。
  • 问题在于出现了一个不算致命的问题,但会导致整个系统崩溃。因此 Java 设计者提供了 异常处理机制来解决这个问题。

1-2 为什么要有异常处理机制(Why)

  • 如果程序员任务一段代码可能出现异常/问题,可以使用 try-catch 异常处理机制来解决。从而保证代码的健壮性。如果进行了异常处理,即使出现了异常,程序可以继续执行。
  • 常见的异常处理机制如下:
public class Exception1 {
   
   

    public static void main(String[] args) {
   
   
        int num1 = 10;
        int num2 = 0;

        try{
   
   
            int res = num1/num2;
        }catch (Exception e){
   
   
//            e.printStackTrace();
            System.out.println(e.getMessage()); // 输出异常信息
        }

        System.out.println("程序继续运行...");
    }
}

2- ⭐异常体系结构图-总览

2-1 分类

  • 下图的内容需要记忆

  • 编译异常(Checked 受检异常):是在 Java源程序 经过 javac.exe 转为字节码文件阶段遇到的异常。
  • 运行异常(Unchecked 非受检异常):是在字节码文件在内存中加载、运行时类的时候出现的异常。

在这里插入图片描述

2-2 异常体系结构小结

异常分为两大类,运行时异常和编译时异常:

  • 运行时异常(Unchecked 非受检异常):编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常对于运行时异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。
    • 举例:(比如除法操作,nums1 = 10nums2 = 0nums1/nums2 可得到运行时异常)
  • 编译时异常(Checked 受检异常):是在 Java源程序 经过 javac.exe 转为字节码文件阶段遇到的异常。
// 编译时异常举例 
public class Exception02 {
   
   
    public static void main(String[] args) {
   
   
        // Throwable
        FileInputStream fis;
        try {
   
   
            fis = new FileInputStream("d:\\aa.jpg");
            int len;
            while ((len = fis.read()) != -1) {
   
   
                System.out.println(len);
            }
            fis.close();
        } catch (IOException e) {
   
   
            e.printStackTrace();
        }
    }
}
  • 在上述代码中,FileInputStream会报编译时异常,也就是 IDEA 工具会报错,必须立即处理的异常。

3- 五大运行时异常

常见的运行时异常包括

  • NullPointerException :空指针异常
  • ArithmeticException:数学运算异常
  • ArrayIndexOutOfBoundsException:数组下标越界异常
  • ClassCastException:类型转换异常
  • NumberFormatException:数字格式不正确异常

3-1 NullPointerException 空指针异常

NullPointerException 空指针异常

  • 当应用程序试图在需要对象的地方使用 null 时,抛出该异常,看案例演示。
public class NullPointerException_ {
   
   
    public static void main(String[] args) {
   
   
        String name = null;
        // 在输出的时候会报空指针异常
        System.out.println(name.length()); 
    }
}

3-2 ArithmeticException 算数异常

  • 比如出现 除以 0 的操作的时候就会出现算数异常
public class Exception1 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值