Java中异常Exception和捕获以及自定义异常详解

yizhihongxing

Java中的异常是指程序中发生的错误,这些错误分为两种:一种是编译时异常,一种是运行时异常。在Java中,异常通过Exception类来处理。本文将详细介绍Java中异常Exception以及Java中如何捕获和处理异常,并提供两个示例帮助理解。

Exception类

Exception类是Java中所有异常类的基类,在Java中,异常类被组织成了一个继承体系,Exception类是这个继承体系的顶层类,在Exception类的下面分别有两个分支:RuntimeException和IOException。其中RuntimeException和其子类为运行时异常,IOException及其子类为编译时异常。

在Java中,如果没有做任何异常处理,程序会直接停止运行并输出错误信息。因此,很重要的一项任务是捕获和处理异常。

异常的捕获

捕获异常的语法:

try {
   //代码块
} catch (ExceptionType e) {
   //catch块
} finally {
   //finally块
}

其中,try块中包含需要捕获异常的代码,catch块中处理捕获到的异常,finally块中的代码无论try块中是否抛出异常,都会被执行。

还可以使用多个catch块来捕获不同类型的异常,语法如下:

try {
   //代码块
} catch (ExceptionType1 e1) {
   //catch块
} catch (ExceptionType2 e2) {
   //catch块
} finally {
   //finally块
}

如果有多个catch块,程序将首先检查第一个catch块是否捕获到异常,如果没有,则会检查第二个catch块,以此类推。

自定义异常

除了从Exception类派生出新的异常类之外,Java还允许用户创建自己的异常类。自定义异常类需要继承Exception或其子类,并实现父类的构造方法。通常建议添加一个没有参数的构造方法,使异常类同样可以像其它Exception类一样使用.

自定义异常类的示例:

class MyException extends Exception{
    public MyException(){
        super();
    }

    public MyException(String message){
        super(message);
    }
}

在上面的示例中,异常类MyException继承于Exception类,并实现了两个构造方法,使得可以自定义异常信息。

下面给出两个使用异常类的示例:

  1. 运行时异常的示例
public class NumberNullException extends RuntimeException{
   public NumberNullException(String message){
      super(message);
   }
}

public class TestRunTimeException {
   private static double divide(double a, double b){
      if(b == 0.0){
         throw new NumberNullException("The second value cannot be 0!");
      }
      return a / b;
   }

   public static void main(String[] args) {
      try{
         double result = divide(4.0, 0.0);
      }catch(NumberNullException e){
         System.out.println(e.getMessage());
         e.printStackTrace();
      }
   }
}

在上面的示例中,定义了一个叫做NumberNullException的自定义异常,该异常继承于RuntimeException类。在divide函数中,如果第二个参数b等于0,则会抛出数学异常。在主函数中,通过try-catch块来捕获该异常,并输出相应的错误信息。

  1. 编译时异常的示例
public class MyFileReader{
   public String readFile(String fileName) throws IOException{
      FileReader fileReader = new FileReader(fileName);
      BufferedReader bufferedReader = new BufferedReader(fileReader);
      StringBuffer stringBuffer = new StringBuffer();
      String line;

      while((line = bufferedReader.readLine()) != null){
         stringBuffer.append(line);
         stringBuffer.append("\n");
      }

      fileReader.close();
      bufferedReader.close();

      return stringBuffer.toString();
   }

   public void writeFile(String data, String fileName) throws IOException{
      FileWriter fileWriter = new FileWriter(fileName);
      BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

      bufferedWriter.write(data);

      bufferedWriter.close();
      fileWriter.close();
   }
}

public class TestCompileTimeException {
   public static void main(String[] args){
      MyFileReader fileReader = new MyFileReader();

      try {
         String content = fileReader.readFile("example.txt");
         fileReader.writeFile(content,"output.txt");
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

在上面的示例中,自定义了一个类叫做MyFileReader,在MyFileReader类中定义了读取和写入文件的方法。在main函数中,通过创建MyFileReader类的对象,调用该对象内的方法完成文件操作,我们对该操作进行了异常处理。在try块中,我们调用readFile方法并将返回值存入变量content,如果该方法的执行中有文件读取错误,则会抛出IOException异常,在catch块中,我们将该异常捕获并进行处理。

通过以上两个示例,我们可以更好地理解异常Exception和捕获以及自定义异常的相关知识。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中异常Exception和捕获以及自定义异常详解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++ ofstream和ifstream详细用法

    C++ ofstream和ifstream详细用法 简介 C++ 标准库中的 ofstream 和 ifstream 是用来读写文件的流类。ofstream 用于写入文件,ifstream 用于读取文件。它们都是从 ostream 和 istream 继承而来。 ofstream 使用 ofstream 写入文件的基本流程如下: 头文件引入: #includ…

    C 2023年5月23日
    00
  • C++入门(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for)

    下面我将详细讲解 C++ 入门的几个重要知识点:命名空间、缺省参数、函数重载、引用、内联函数、auto、范围 for。 命名空间 命名空间可以理解为一种管理代码作用域的方式,它将变量、函数、类等标识符组织在一个作用域中,避免了不同命名空间的标识符之间的命名冲突。例如: #include<iostream> using namespace std;…

    C 2023年5月23日
    00
  • Qt数据库应用之实现通用数据库分页

    一、引言 Qt是一款非常成熟和强大的GUI开源框架,有着丰富的组件库和强大的跨平台特性。作为一名Qt开发者,我们常常需要涉及数据库操作,而数据库分页是许多应用的常见需求。因此,本文将带领读者实现通用数据库分页的功能。 二、实现思路 在实现通用数据库分页功能,我们需要考虑以下几个问题: 如何统计数据库表的总记录数? 如何在Qt中实现查询特定记录范围的功能? 如…

    C 2023年5月22日
    00
  • Win10打开软件报错“应用程序无法正常启动0xc0150002”解决方法图文教程

    以下是详细的攻略: 问题描述 当尝试打开某些软件时,可能会出现以下错误提示: 应用程序无法正常启动0xc0150002。 该错误通常由缺失或损坏的Microsoft Visual C++ 等可视化库文件引起。 解决方法 为了解决这个问题,我们可以尝试以下几种方法。 方法一:重新安装Microsoft Visual C++运行库 打开控制面板,并进入“程序和功…

    C 2023年5月23日
    00
  • C/C++ 宏详细解析

    C/C++ 宏详细解析 什么是宏? 宏是C/C++中的一种预处理器指令,它是一种简单的文本替换机制。在编译程序之前,预处理器将源代码中的宏替换为预定的文本,并将这个结果传递给编译器,编译器再将其编译成二进制代码。 宏定义语法格式为: #define 常量 表达式 常量和表达式之间要留有空格,常量名通常用大写字母表示,并且不需要加分号。 如何使用宏? 示例一:…

    C 2023年5月23日
    00
  • C语言中递增和递减运算符的区别

    下面详细讲解C语言中递增和递减运算符的区别。 什么是递增和递减运算符 在C语言中,递增运算符++和递减运算符–分别可以将变量的值增加或者减少1。它们可以作用于整型、浮点型、字符型等基本数据类型的变量。 递增和递减运算符可以在变量前面或者后面使用,使用的方式决定了它们的执行顺序,也影响了最终计算出的结果。 前置和后置运算符的区别 递增和递减运算符可以前置(放…

    C 2023年5月10日
    00
  • Win7旗舰版系统提示应用程序错误代码0xc0000409的故障原因及解决方法

    Win7旗舰版系统提示应用程序错误代码0xc0000409的故障原因及解决方法 问题表现 在 Win7 旗舰版系统中运行某些程序时,可能会遇到应用程序错误,错误代码为 0xc0000409。这时程序会崩溃或无法运行,给用户带来不便。 故障原因 应用程序错误代码 0xc0000409 通常与系统文件中的损坏或错误有关。这可能是由于电脑不正常关机或磁盘损坏等原因…

    C 2023年5月23日
    00
  • C if else if ladder

    C 语言中的 if else if 梯形结构又被称作 if else if ladder,它是多个条件语句的嵌套,可以用来实现复杂的条件判断。以下是 if else if ladder 的完整使用攻略: 梯形结构语法格式 if (condition1) { statement1; } else if (condition2) { statement2; } …

    C 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部