java异常处理

1.使用try-catch-finally处理异常

try{
    //执行可能会发生异常的代码
}catch(异常类型 e){
    //捕获异常进行处理
}finally{
    //一定会执行的语句
}

try-catch-finally 程序块的流程大致分为两种情况:

  1. 如果try块中所有语句正常执行完毕,那么finally块就会被执行。

  2. 如果try语句在执行过程中碰到异常,无论这种异常能否被catch块捕获到,都将执行finally块中的代码。

try-catch-finally结构中try块是必须有的,catch和finally块为可选,但两者至少必须出现其中之一。

  • try—catch-catch-finally(多重catch块)

            try{
    
            }catch (异常类型 e) {
    
            }catch (异常类型 e) {
    
            }finally{
    
            }

如果try...catch...finally...语句块中包含 return 那么先执行完finally在执行return,return语句会等finally执行完之后在执行

  • 除非System.exit(1);强制关闭虚拟机,不会执行return

  • 如果System.exit(1)在finally之前,finally也不会执行

catch输出异常信息方法

  1. getMessage() 返回异常描述字符串

  2. printStackTrace() 输出异常的堆栈信息 报错行

  3. System.err.println();这种输出方式可以输出错误的消息,在控制台呈现红色。

2.使用throw、throws抛出异常

  • 若是某个方法可能发生异常,但不想在当前方法中处理这个异常,则可以使用throws、throw关键字在方法中抛出异常。

  • throws通常用在声明方法时,用来制指定可能抛出的异常。多个异常可以使用逗号分隔。

    public void method() throws ArrayIndexOutOfBoundsException,NullPointerException,NumberFormatException,Exception{
            
        }

  • throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法的声明中指明要抛出的异常;如果要捕获throw抛出的异常,则必须使用try-catch语句块

    private void test() {
            try {
                method();
            } catch (RuntimeException e) {
                e.printStackTrace();
            }
    
    
        }
    
    private void method() throws RuntimeException{
            throw new RuntimeException("message");
        }
  • 如果调用的下级方法往上抛异常,如果不想捕捉异常可以用throws继续往上抛异常

3.自定义异常

 创建自定义异常需要继承Exception

public class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

4.常见异常

  • java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。

  • java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。

  • java.lang.SecurityException 安全性异常

  • java.lang.IllegalArgumentException 非法参数异常

  • java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常

  • java.lang.NegativeArraySizeException 数组长度为负异常

  • java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。

  • IOException 操作输入流和输出流时可能出现的异常

  • EOFException 文件已结束异常

  • FileNotFoundException 文件未找到异常

  • java.io.NotSerializableException 对象不支持序列化 参与序列化和反序列化对象必须实现Serializable接口

  • java.io.StreamCorruptedException 当从对象流中读取的控制信息与内部一致性检查相冲突时,抛出此异常。

  • ClassCastException 类型转换异常类

  • ArrayStoreException 数组中包含不兼容的值抛出的异常

  • SQLException 操作数据库异常类

  • NoSuchFieldException 字段未找到异常

  • NoSuchMethodException 方法未找到抛出的异常

  • NumberFormatException 字符串转换为数字抛出的异常

  • StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常

  • IllegalAccessException 不允许访问某类异常

  • InputMismatchException 输入格式不匹配异常

  • InstantiationException 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常

  • java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

  • ConcurrentModificationException 是基于java集合中的 快速失败(fail-fast) 机制产生的,在使用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了增删改,就会抛出该异常。快速失败机制使得java的集合类不能在多线程下并发修改,也不能在迭代过程中被修改。

  • java.lang.InterruptedException 线程被打断异常

  • IllegalThreadStateException 如果该线程处于活动状态。

  • SecurityException 如果当前线程无法修改该线程。

  • java.lang.ClassCastException 强制转换异常

  • IllegalFormatConversionException 使用不匹配转换和相应参数类构造此类的实例。

  • java.util.NoSuchElementException 没有这样的元素异常

  • RedisConnectionFailureException redis缓存连接失败异常

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值