IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java异常之自定义异常类详解和代码举例 -> 正文阅读

[Java知识库]Java异常之自定义异常类详解和代码举例

Java语言的异常

异常处理机制

  1. Java中的异常概念
    1. 异常是程序在运行过程中由于算法问或软件设计等问题导致的程序异常事件。
    2. 异常的前提是可以识别并被捕获的。
    3. Java以面向对象的方法来处理异常的;Java提供了各种类型的异常类。
    4. Java允许自定义异常类。
  2. Java异常的产生过程
    1. 程序运行若发生异常,就会触发能被监听器捕获的异常事件,该事件的处理程 序会生成一个对应的
    异常对象并交给JVM,由 JVM查找相应的代码处理该异 常。
    2. 生成异常对象并将其交给JVM的过程称为捕获异常。
    3. 常本身作为一个对象,即产生一个异常就是产生一个异常对象;异常对象可 能由应用程序本身产
    生,也可能由JVM产生,这取决于异常的种类。
  3. 异常的本质
    1 .每个异常类都代表一种运行错误,类中包含错误信息及错误处理的方法等内容。
    2. 异常本质上是一个程序运行时发生的事件,该事件将导致程序的运行中断;尽 管如此,在处理异常
    的代码中可以调整程序运行的方向,使程序仍可继续执行。
  4. 异常的处理
    1. 程序产生异常,系统捕获异常,程序员编写异常处理程序。

异常处理类

  • 在 Java 中,Throwable 类是 Java 语言中所有错误或异常的超类,它有两个直接子类:Error和Exception。
  • Error类及其子类代表了程序运行时Java系统内部的错误,程序设计者无能为力,程序也不能从Error中恢复,因此不必处理它们,从技术上讲Error不是异常。
  • Exception类及其子类代表了用户程序能够捕捉到的异常,因此应该是程序设计者要关心的、尽可能要处理的部分。

异常的处理

在 Java 中,通常用 trycatchfinally 捕捉并处理异常,用 throw是方法里面抛、throws是在方法上抛出异常。

   使用try-catch-finally捕获和处理异常 语法结构: 
 	try{   
 		要检查的语句序列:可能要抛出异常的代码 
 	}catch(异常类名 形参对象名){   
 		异常发生时处理的语句序列 
 	}finally{   
 		无论是否产生异常,都要执行这部分语句 
 	} 

例如:

Scanner scn=new Scanner(System.in);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
System.out.println("请输入出生日期(yyyy-MM-dd):");
String strBirth=scn.next();
try {
    Date birth=sdf.parse(strBirth);
    System.out.println("生日:"+birth);
}catch(ParseException pe) {
    System.out.println("生日错误!");
    pe.printStackTrace();
}finally {
    System.out.println("程序执行finally块!");
        }

多异常的处理

  • 多异常需要程序设计者熟悉各类异常。初学者在不熟悉各种异常类的情况下可 以使用Exception类。
  • 多异常的处理思想与switch-case结构非常类似。

抛出异常

  • 1.在捕获异常之前,必须有一段代码生成并抛出一个异常对象。
  • 2.异常类型不同,抛出异常的方法也不同,分为:系统自动抛出的异常指定方法抛出的异常
  • 3.系统定义的异常由系统抛出;指定方法抛出的异常需使用关键字throwthrows

我们主要讨论由方法抛出的异常用法。

  • 抛出异常的方法与调用方法处理异常
    1.异常的产生和处理可以在一个方法内进行;
    2.异常的产生和处理也可以不在一个方法中,即一个方法产生异常,由该方法的调用者去处理异常 相对应地,异常有关的方法就有两个:有抛出异常的方法 和处理异常的方法。

  • 抛出异常的方法
    1.在方法体内使用throw抛出异常:throw 由异常类产生的对象;
    2.在方法头部添加throws抛出异常
    [修饰符] 返回值类型 方法名([参数列表]) throws 异常列表{
    … …
    }
    由上述两种方式抛出异常,在该方法内就不必提供 try-catch-finally块去处理异常,有调用者的程序处理。

  • 处理异常的方法
    1.如果程序设计者调用了一个会抛出异常的方法,要么try-catch处理这个异常,要么将异常继续抛出。

样例:
1.直接抛

package Test.javawork.hextodecString;


/**
 * @author : xjszsd
 * @date : 2022-05-05 16:29
 */
public class HexString{

    public static String hexToDecString(String hexString) throws HexFormatException {
        String regex="^[A-Fa-f0-9]+$";
        if(!hexString.matches(regex))
        throw new HexFormatException(hexString+"不是16进制");//在方法里面抛异常,但不处理,由方法体抛出,调用者去处理
        return "是16进制";
    }

    public static void main(String[] args) {

        String s = null;
        try {
            s = HexString.hexToDecString("123we");
        } catch (HexFormatException e) {
            e.printStackTrace();
        }
        System.out.println(s);
    }
}

2.直接处理。

package Test.javawork.hextodecString;


/**
 * @author : xjszsd
 * @date : 2022-05-05 16:29
 */
public class HexString{

    public static String hexToDecString(String hexString) {
        String regex="^[A-Fa-f0-9]+$";
        if(!hexString.matches(regex))
            try {
                throw new HexFormatException(hexString+"不是16进制");//在方法里面抛异常,但不处理,由方法体抛出,调用者去处理
            } catch (HexFormatException e) {
                e.printStackTrace();
            }
        return "是16进制";
    }

    public static void main(String[] args) {

        String s = HexString.hexToDecString("123we");
        System.out.println(s);

    }
}
  • 注意直接抛是不会运行后面的程序的直接就停止了。直接处理的话,处理完之后就会继续运行接下面的程序。

自定义异常类

java提供的异常类,不够我们使用,需要我们自己定义一些异常类
格式:

public class XXXXException extends Exception 或者RuntimeException{
          添加一个空参构造方法
          添加一个带异常信息的构造方法
  }

注意:

  • 自定义异常类一般都是以Exception结尾,说明该类是个异常类
  • 自定义异常类,必须继承Exception 或者RuntimeException继承Exception的话:那么自定义的异常类就是一个编译期异常,如果方法内部抛出了编译器异常,就必须处理这个异常,要么Try()。。。。catch或者throws
    继承RuntimeException的话:那么这个自定义的异常类就是一个运行期异常,无需处理,直接抛,直接交给虚拟机处理(中断处理)

例自定义类:

package Test.javawork.hextodecString;

/**
 * @author : xjszsd
 * @date : 2022-05-05 16:29
 */
public class HexFormatException extends Exception{

    public HexFormatException(String message) {
        super(message);

    }

}
package Test.javawork.hextodecString;


public class HexString{
    
    public static String hexToDecString(String hexString) throws HexFormatException {

        String regex="^[A-Fa-f0-9]+$";
        if(!hexString.matches(regex))
        throw new HexFormatException(hexString+"不是16进制");

        return "是16进制";
    }

    public static void main(String[] args) {

        String s = null;
        try {
            s = HexString.hexToDecString("123we");
        } catch (HexFormatException e) {
            e.printStackTrace();
        }
        System.out.println(s);

    }
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:02:36  更:2022-05-07 11:04:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:30:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码