Java异常处理方法汇总

 更新时间:2021年12月13日 11:54:54   作者:zekelove  
这篇文章主要介绍了Java异常处理方法汇总,我们在软件开发的过程中,任何语言的开发过程中都离不开异常处理。下面下小编加来给大家分享各种异常处理,希望对大家有所帮助,需要的朋友可以参考一下

前言:

我们在软件开发的过程中,任何语言的开发过程中都离不开异常处理。如果不处理异常,将会导致软件异常中断,崩溃,退出,严重影响用户的使用和体验。如果合理的应用异常处理那将会减少软件出现的错误,可以友好的提示用户,提升用户的体验。

一、异常是什么

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。如:用户输入非法数据,做除法运算的时候除数为0,语句少写分号,打开的文件不存在,内存溢出,网络中断等。

异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。

二、异常类型

Java中所有的异常类是从 java.lang.Exception 类继承的子类。Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。

检查性异常:用户错误或问题引起的异常,这是程序员无法预见的。除了Error 和 RuntimeException的其它异常。

运行时异常: 运行时异常是可能被程序员避免的异常。Error 和 RuntimeException 以及他们的子类。

错误: 错误不是异常,而是脱离程序员控制的问题。通常的做法是通知用户并中止程序的执行。

三、常见异常

输入输出异常:IOException

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

文件未找到异常:FileNotFoundException

数组下标越界异常:ArrayIndexOutOfBoundsException

数组负下标异常:NegativeArrayException

文件已结束异常:EOFException

字符串转换为数字异常:NumberFormatException

方法未找到异常:NoSuchMethodException

操作数据库异常:SQLException

四、常用异常方法

getMessage:获取异常的详细信息。

toString:使用getMessage()的结果返回类的串级名字。

printStackTrace:错误输出流。

五、异常处理

对检查异常处理的方式:使用 try…catch…finally 语句块处理;在函数定义中使用 throws 声明。

语法:

try{
    // try 块中放可能发生异常的代码。
}catch(ArithmeticException arithexception){
    // 1.每一个 catch 块用于捕获并处理一个特定的异常,或者异常类型的子类。
    // 2.catch 后面括号中定义了异常类型和异常参数。
    // 3.在 catch 块中可以使用这个块的异常参数来获取异常的相关信息。
    // 4.如果 try 块中发生的异常在所有catch中都没捕获到,则去执行finally,然后到这个函数的外部 caller 中去匹配异常处理器。
    // 5.如果 try 中没有发生异常,则所有的catch块都不执行。
}catch(Exception exception){
    // 捕获异常
}finally{
    // 1.finally 块是可选的。
    // 2.无论异常是否发生,finally 都会执行。
    // 3.一个 try 至少要有一个 catch 块,或者至少要有一个 finally 块。
    // 4.finally 块主要做一些关闭清理工作,如关闭文件,关闭数据库连接等。 
}


示例

package com.exception;
public class test {
 public static void main(String[] args) {
  // TODO 自动生成的方法存根
  compute();
 }

 public static void compute() {
  try {
   double num = 10 / 0;
   System.out.println(num); 
  }catch(ArithmeticException exp){
   System.out.println(exp.getMessage().toString());
  }finally {
   System.out.println("执行finally块");
  }
 }
}

六、关键字 throws/throw

如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明,throws 关键字放在定义方法的尾部。

也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

throws 语法:

修饰符 返回值类型 方法名(参数) throws 异常类名1, 异常类名2, ... { 代码块 }

package com.exception;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class test {

 public static void main(String[] args) throws FileNotFoundException {
  // TODO 自动生成的方法存根
  readFile();
 }
 
 public static  void readFile() throws FileNotFoundException {
        InputStream file = new FileInputStream("E:/test.txt");
    }
}

throw 语法:

throw new xxxException();

其中 xxxException 必须是 Exception 的派生类。

注意:throw 出的是1个异常对象,所以 new 不能省略。

七、自定义异常

除了JDK定义好的异常类外,我们可以根据自身业务情况自定义异常处理类。

编写自定义异常类注意点:

  • 1.所有异常都必须是 Throwable 的子类。
  • 2.如果写一个检查性异常类,则需要继承 Exception 类。
  • 3.如果写一个运行时异常类,则需要继承 RuntimeException 类。

语法:修饰符 class 类名 extends Exception { 代码块 }

package com.exception;
/**
 * 自定义异常类
 * 登录失败异常信息类
*/
public class LoginFailException extends RuntimeException {
 public LoginFailException() {
        super();
    }
    public LoginFailException(String message) {
        super(message);
    }
    public void printStackTrace(){ 
     //overwrite  
        super.printStackTrace();  
        System.out.printf("This is a LoginFailException excetpion\n");    
    }  
}
public class test {

 public static void main(String[] args){
  // TODO 自动生成的方法存根
  Boolean isLogin = false;
  if(!isLogin) {
            // 登录失败,抛出异常
   throw new LoginFailException("Login is fail");
  }
 }
}

到此这篇关于Java异常处理方法汇总的文章就介绍到这了,更多相关Java异常处理方法 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java使用poi导出ppt文件的实现代码

    Java使用poi导出ppt文件的实现代码

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java对Microsoft Office格式档案读和写的功能。本文给大家介绍Java使用poi导出ppt文件的实现代码,需要的朋友参考下吧
    2021-06-06
  • @Scheduled 如何读取动态配置文件

    @Scheduled 如何读取动态配置文件

    这篇文章主要介绍了@Scheduled 如何读取动态配置文件的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Spring AOP实现多数据源动态切换

    Spring AOP实现多数据源动态切换

    本文主要介绍了Spring AOP实现多数据源动态切换,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)

    Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)

    下面小编就为大家带来一篇Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Java如何导出zip压缩文件

    Java如何导出zip压缩文件

    这篇文章主要介绍了Java如何导出zip压缩文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java实现的DES加密解密工具类实例

    Java实现的DES加密解密工具类实例

    这篇文章主要介绍了Java实现的DES加密解密工具类,结合具体实例形式分析了Java实现的DES加密解密工具类定义与使用方法,需要的朋友可以参考下
    2017-09-09
  • SpringBoot通过Nginx代理获取真实IP

    SpringBoot通过Nginx代理获取真实IP

    springboot作为后台代码,获取到的登录IP是前台的代理服务器地址,并不是用户的真实IP地址,本文主要介绍了SpringBoot通过Nginx代理获取真实IP,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Java原生服务器接收上传文件 不使用MultipartFile类

    Java原生服务器接收上传文件 不使用MultipartFile类

    这篇文章主要为大家详细介绍了Java原生服务器接收上传文件,不使用MultipartFile类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • SpringBoot中间件ORM框架实现案例详解(Mybatis)

    SpringBoot中间件ORM框架实现案例详解(Mybatis)

    这篇文章主要介绍了SpringBoot中间件ORM框架实现案例详解(Mybatis),本篇文章提炼出mybatis最经典、最精简、最核心的代码设计,来实现一个mini-mybatis,从而熟悉并掌握ORM框架的涉及实现,需要的朋友可以参考下
    2023-07-07
  • 浅谈Java中生产者与消费者问题的演变

    浅谈Java中生产者与消费者问题的演变

    这篇文章主要介绍了浅谈Java中生产者与消费者问题的演变,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10

最新评论