认识异常 详细的异常处理

异常的概念与体系结构

异常的概念

在Java中,将程序执行过程中发生的不正常行为称为异常。就是说在使用计算机语言开发的过程中,尽管代码写的很完美 但在运行中还是会遇到一些问题 比如说 网络异常 用户输入数据的格式 等等

在写代码时经常遇到的异常

1.算术异常

public class Text {
    public static void main(String[] args) {
        //算术异常
        System.out.println(10/0);
    }
}

运行结果:
在这里插入图片描述

2.数组越界异常

public class Text {
    public static void main(String[] args) {
        //算术异常
        //System.out.println(10/0);
        int[] array = {1,2,3,4};
        System.out.println(array[5]);
    }
}

在这里插入图片描述
3.空指针异常

int[] array = null;
        System.out.println(array.length);

在这里插入图片描述
上面三种异常属于运行异常

异常也分为运行异常 和编译异常(受查异常)

下面来看看编译异常:

public class Text {
    public class Person{
        private String name;
        private String gender;
        int age;
        //想要该类支持深拷贝,重写Object类的clone方法即可

        public Person clone(){
            return (Person)super.clone();
        }
    }

在这里插入图片描述
下面来看看异常分类 :
在这里插入图片描述
在图片中可以得知:
1.Error:Java虚拟机无法解决的严重问题。如:
JVM的内部错误、资源耗尽等严重情况。典型代表:StackOverflowError(栈溢出)和OutMemoryError, 这种异常一般用代码是解决不了了。
2.Throwable:是异常体系的顶层类,它派生的两个子类分别是:Error和Exception
3.Exception:异常产生后程序员可以进行处理,让程序恢复运行。一般的编程错误导致的一般性问题。

异常的处理

在异常发生之后 ,你会怎么办呢 肯定不会不管吧 在我们Java中,提供了很多优秀的处理方法:
异常处理机制
异常处理机制能让程序出现异常时,按照代码的预先设定的异常处理逻辑,针对性地处理异常
处理异常的主要5个关键字:throw、try、catch、finally、throws

异常的抛出

在编写程序中,如果程序中出现错误,此时就需要将错误的信息告诉调用者,就是告诉报异常的原因。

代码实现:

 public static int getElement(int[] array,int index){
        if (array==null){
            throw new NullPointerException("传递的数组为null");
        }
        if (index<0||index>=array.length){
            throw new ArrayIndexOutOfBoundsException("传递的数组下标越界");
        }
        return array[index];
    }
    public static void main(String[] args) {
        int[] array = {1,2,3};
        getElement(array,3);

    }

注意事项:
1.throw必须写在方法体内部
2.抛出的对象必须是Exception或者Exception的子类对象
3.如果抛出的是RunTimeException或者它的子类,则可以不用处理,直接交给JVM处理。
4.如果抛出的是编译时异常,用户必须处理,否则无法通过编译
5.异常一旦抛出 后面的代码就不会执行。

异常的捕获

异常的捕获,也就是异常的具体处理方式,主要有两种:异常声明throws以及try-catch捕获处理。
语法格式:
修饰符 返回值类型 方法名(参数列表)throws异常类型1,异常类型2 ……{
}
注意事项:
1.throws必须跟在方法的参数列表之后
2.声明的异常必须是Exception 或者它的子类
3.方法内部如果抛出了多个异常类型,之后用逗号隔开,如果抛出的异常具有父子关系,直接声明父类即可。

4.调用声明抛出异常的方法时,调用者必须对该异常进行处理

try-catch捕获并处理

真正的异常处理就需要用到try-catch。
语法格式:

try{
//将可能出现异常的代码放在这里
}catch(要捕获的异常类型 e){
//如果try中的代码抛出异常了,此时catch捕获时异常类型与try中一致时,或者是try中抛出异常的基类时,就会被捕捉到
对异常就可以正常处理,处理完成后,就跳出try-catch结构,继续执行后续代码

}catch(}要捕获的异常类型 e){
//对异常进行处理
}finally{
//此处代码一定会被执行
}

throw是抛出异常 throws是声明异常
也可以自定义异常 但自定义异常一般要继承Exception或者RuntimeException

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值