Java中的异常类总结

简介: Java中的异常类总结

一 异常概述

异常是指程序在执行过程中出现非正常的情况,最终会导致JVM的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误。如果语法错了,则编译不通过,也不会产生字节码文件,根本不能运行。

在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable 类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错 误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。

Throwable类常用方法

public string getMessage():返回异常发生时的详细信息

public string toString():返回异常发生时的简要描述

public string getLocalizedMessage():返回异常对象的本地化信息。使 用Throwable的子类覆盖这个方法,可以声称本地化信息。如果子类没 有覆盖该方法,则该方法返回的信息与getMessage()返回的结果相同

public void printStackTrace():在控制台上打印Throwable对象封装的 异常信息

二 异常分类

根据编译时出现的异常还是运行时出现的异常

1、运行时异常

指所有的RuntimeException类以及子类(编译时不报错运行时候就会出现错误)

  • RuntimeException类常见的异常子类有:
  • ArithmeticException(试图除数为0时)
  • NullPointerException(当程序访问一个空对象的成员变量或方法,访问一个空数组的成员时发生。)
  • ClassCastException
  • ArrayIndexOutOfBoundsException访问的元素下表超过数组长度 分析jvm是如何处理异常的过程
  • NumberFormatException数字格式异常!

2、编译时异常

编译异常指的是那些必须处理的异常(运行之前程序就报错)

三 异常过程分析

四 异常处理

1、为什么要进行异常处理?

观察下面代码

public class Demo {
  public static void main(String[] args) {
    System.out.println("程序开始执行");
    System.out.println("打印结果:"+10/0);
    System.out.println("程序终止执行");
  }
}

运行结果

程序开始执行
Exception in thread "main" java.lang.ArithmeticException: / by zero
  at ExceptionDemo.Demo.main(Demo.java:6)

可以发现如果程序没有正确的处理存在异常,当程序运行发生异常时程序会终止运行,为了让程序发生异常时候也能正常运行,必须引入异常处理语句来完善代码编写。

2、处理异常的方式?

方法一try-catch-finally捕获异常

try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch 块,则必须跟一个finally块。

catch 块:用于处理try捕获到的异常。同时使用多个catch块处理多个异常,并且捕获多个异常时范围小的要放在范围大的异常之前处理

finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。 当在try块或catch块中遇到return语句时,finally语句块将在方法返回 之前被执行。

在以下4种特殊情况下,finally块不会被执行:

1. 在finally语句块中发生了异常。

2. 在前面的代码中用了System.exit()退出程序。 3. 程序所在的线程死亡。 4. 关闭CPU。

方法二使用throw在代码块中抛出异常

方法三使用throws在方法上往上级抛出

public class Demo {
  public static void main(String[] args) {
    try {
      getSum(1, 2, 0);//调用者需要处理抛出的异常
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public static int getSum(int a,int b,int c)throws Exception {
    return (a+b)/c;
  }
}

五 自定义异常

实际开发中,jdk为我们提供的异常类不能满足我们需求,比如我们需要一个登陆异常类,就得我们自定义登陆异常类

如何定义

1.自定义一个编译时异常:

自定义类 并继承于 java.lang.Exception 。

2.自定义一个运行时异常

自定义类 并继承于 java.lang.RuntimeException


相关文章
|
20小时前
|
安全 Java API
滚雪球学Java(44):掌握Java编程的关键:深入解析System类
【5月更文挑战第19天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
8 0
滚雪球学Java(44):掌握Java编程的关键:深入解析System类
|
1天前
|
编解码 安全 算法
Java多线程基础-18:线程安全的集合类与ConcurrentHashMap
如果这些单线程中的集合类确实需要在多线程中使用,该怎么办呢?思路有两个: 最直接的方式:使用锁,手动保证。如多个线程修改ArrayList对象,此时就可能有问题,就可以给修改操作进行加锁。但手动加锁的方式并不是很方便,因此标准库还提供了一些线程安全的集合类。
16 4
|
1天前
|
Java 程序员 数据库
|
1天前
|
安全 Java 容器
Java 多线程系列Ⅶ(线程安全集合类)
Java 多线程系列Ⅶ(线程安全集合类)
|
1天前
|
Java 程序员
Java中的多线程编程:理解并应用Thread类和Runnable接口
【5月更文挑战第28天】在Java中,多线程编程是一个重要的概念,它允许同时执行多个任务。本文将深入探讨Java的多线程编程,包括Thread类和Runnable接口的使用,以及如何在实际项目中应用这些知识。我们将通过实例来理解这些概念,并讨论多线程编程的优点和可能的挑战。
|
1天前
|
存储 Java 程序员
滚雪球学Java(43):探究 Java 中的 Class 类:透视类的本质和实现原理
【5月更文挑战第18天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
4 0
滚雪球学Java(43):探究 Java 中的 Class 类:透视类的本质和实现原理
|
2天前
|
Java 程序员 数据库连接
|
2天前
|
存储 Java 编译器
『Java』类和对象
『Java』类和对象
|
2天前
|
Java Linux API
Java多线程基础-4:详解Thread类及其基本用法 (一)
Java 中的 `Thread` 类是用来管理线程的,每个线程都是通过 `Thread` 类的对象来描述。
18 0
|
2天前
|
Java 编译器
<Java> 类和对象专题大汇总.(学不会包退)
<Java> 类和对象专题大汇总
12 0