JAVA异常小结

异常的定义和分类

定义:顾名思义,异常就是不正常,你的程序没有达到你预期的结果,你想让程序输出hello world,它直接没跑通或者啥也没输出,这就是产生异常了,我们其实已经见过好多异常了(下面会有具体例子)
分类
人犯错都有个严重程度,同样的计算机也有,先看一下这张异常体系图。
在这里插入图片描述
JAVA在异常这方面有个老祖宗是Throwable类,两个儿子就是Exception和Error。Error是那个不争气的儿子,一出现说明直接就没救了,属于非受查异常,(可能因为再检查也没救了吧)Exception的儿子比较多,RuntimException是程序在运行时出现的异常,属于受查异常,其他三个是非运行时的异常,属于受查异常,这些在使用时要先处理异常,使用throws或try catch捕获。

几种常见的异常

java几种常见的异常:
运行时异常:
1,java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
2,ArithmeticException 算术错误情形,如以零作除数,算术条件异常。
3 java.lang.SecurityException 安全性异常
4,IllegalArgumentException 方法接收到非法参数,非法参数异常!
5,java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常
6,java.lang.NegativeArraySizeException 数组长度为负异常
7 java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。
8 java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
9,java.lang.NumberFormatException(数字格式转换异常)
10,java.lang.ClassCastException(强制类型转换异常)

IOException
1, IOException 操作输入流和输出流时可能出现的异常
2, EOFException 文件已结束异常
3, FileNotFoundException 文件未找到异常

异常的捕获

捕获基本语法

tr{
有可能出现异常的语句 ;
}[catch (异常类型 异常对象) {
}] [finally { 异常的出口 }
]
解释
①、try 代码块中放的是可能出现异常的代码.
②、catch 代码块中放的是出现异常后的处理行为.
③、finally 代码块中的代码用于处理善后工作, 会在最后执行.,其中 catch 和 finally 都可以根据情况选择加或者不加.

public class Example {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        try {System.out.println("before");
            System.out.println(arr[100]);//明显这里一定会出错
            System.out.println("after");
        }
        catch (ArrayIndexOutOfBoundsException e)
        { // 打印出现异常的调用栈
            e.printStackTrace();
        }
        System.out.println("after try catch");
    }
}

运行结果显示
在这里插入图片描述
try中出现异常后,try代码块就不会再执行了,而是跳到catch中,catch执行完后会继续往下执行。

catch只能捕获对应种类的异常

public class Example {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        try {System.out.println("before");
            arr=null;
            System.out.println(arr[100]);//明显这里一定会出错
            System.out.println("after");
        }
        catch (ArrayIndexOutOfBoundsException e)
        { // 打印出现异常的调用栈
            e.printStackTrace();
        }
        System.out.println("after try catch");
    }
}

运行结果:
在这里插入图片描述
catch的种类是数据越界,而错误是空指针,所以没法捕获。要想捕获就在加一个catch,即catch可以有多个或者用一个catch,把它的类型定义为Exception.

异常的处理流程:经常在选择里面会用
1、try中没有抛出异常,则catch语句不执行,如果有finally语句,则接着执行finally语句,继而执行finally之后的语句
2、try中抛出异常,有匹配的catch语句,则catch语句捕获,如果catch中有return语句,则要在finally执行后再执行。
3、finally不管有没有异常都会执行。

手动抛出异常

除了 Java 内置的类会抛出一些异常之外, 程序猿也可以手动抛出某个异常. 使用 throw 关键字完成这个操作.

public class Example {
    public static void main(String[] args) {
        System.out.println(div(10,0));

    }
    public static int div(int x,int y){
        if(y==0){
            throw new ArithmeticException("抛出除0异常");
        }
        return x/y;
    }
}

在这个代码中, 我们可以根据实际情况来抛出需要的异常. 在构造异常对象同时可以指定一些描述性信息.

自定义异常

当java内置类的异常不能明确说明异常情况时,
1、自定义异常通常会继承自 Exception 或者 RuntimeException
继承自 Exception 的异常默认是受查异常
继承自 RuntimeException 的异常默认是非受查异常.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值