你不知道的Java笔记10--异常处理

一、异常处理定义
1、异常是程序运行过程中非正常情况下出现的问题,没法预测的,但是能被处理的。
2、异常是程序运行期间出现的错误,而不是编译时的语法错误。
3、Java异常处理是Java独有的处理异常的方法。
4、程序在出现异常时会终止程序的运行,而异常处理目的就是在出现出现异常时,程序也能继续运行。
5、子类的异常可以通过对父类的异常进行解决。

二、异常的分类

(一)Error:虚拟机内部的异常

(二)Exception:程序在运行的过程中出现的异常

1、RuntimeException:运行时异常(非检查异常)
程序在执行出现的非正常现象:
(1)数组越界

这里写图片描述

(2)空指针

这里写图片描述

2、IOException:非运行时异常(检查异常)
程序在编译时必须处理的非正常现象

三、异常处理机制(方式)

(一)、异常产生过程
在Java程序执行过程中如果出现异常事件,系统会发出异常报告,这时系统将生成一个异常类对象,异常类对象封装了异常事件的信息并将其提交给Java运行时系统。

(二)异常的处理过程

这里写图片描述

(三)、异常处理的方法

1、自动处理
将可能引发异常的语句放入在try块内,而异常的相应语句则放入在catch块内。

try…catch语句
(1)catch块,是用来捕获并处理try块抛出的异常的代码块。没有try块,catch块不能单独存在。我们可以有多个catch块,以捕获不同类型的异常。
(2)如果程序抛出多个不同类型的异常,我们需要多个catch()语句来处理。
(3)特殊异常类相关联的catch()块必须写在普通异常类相关联catch()之前。即后面的catch()语句块捕获的异常类型必须大于前面的catch()语句块的异常类型。
(4)try{…}catch( ){…}之间不可以添加任何代码
(5)当不知道抛出什么异常是可以用catch(Exception e),但是阅读性不好,不能清楚在哪里抛出什么异常。

finally语句
(1) finally主要作用:释放资源 如:关闭打开文件、删除临时文件…
(2) 不管抛不抛出异常,finally都会执行。
(3)对应finally代码中的语句,即时try代码块和catch代码块中使用return语句退出当前方法或用break跳出某个循环,相关的finally代码块都会执行。
(4)当try或catch代码块中执行了System.exit(0)时,finally代码块中的内容不被执行

/

/捕获到异常立即执行catch,不会再执行出现异常后面的语句
    try
    {
        //可能会出现的异常的代码
    }
    //只会在try捕获到异常时才会执行。
    //如果出现异常将会去捕获,并把异常放入到形参e中
    catch(Exception e) //Exception:出现异常的类型,不知道那个异常的可以填写其父类的类型或者是异常的根父类Exception
    {
        //对异常的处理的代码:打印异常信息

        /*
         * 1、获取异常信息,打印的只是出错的序列号,不是真正的错误信息。
         * e.getMessage();
         */

        /*
         * 2、打印异常的堆栈信息,能准确找出出错的位置,方便程序员快速找出错误,解决问题。
         * e.printStackTrace();
         */
    }
    finally
    {
        //代码
    }

多异常处理实例

异常:://被除数不能为0; //数据越界

/*
 * 利用try...catch进行多异常的处理
 */
package com;
public class TestException {
    public static void main(String[] args) {
        //定义三个常量m,n,result
        int m=10,n=0;
        int result;

        //定义一个数组arry
        int arry []={10,20,30,40};

        //求m/n的值
        result=m/n; //被除数不能为0

        //打印数组的元素
        for(int i=0;i<5;i++) //数据越界
        {
            System.out.println(arry[i]); 
        }
    }
}

利用try…catch进行多异常的处理

package com;
public class TestException {
    public static void main(String[] args) {
        //定义三个常量m,n,result
        int m=10,n=0;
        int result;

        //定义一个数组arry
        int arry []={10,20,30,40};

        //利用try...catch...finally处理多异常
        try{
            //求m/n的值
            result=m/n; //被除数不能为0

            //打印数组的元素
            for(int i=0;i<5;i++) //数据越界
            {
                System.out.println(arry[i]); 
            }

        }
        catch(ArithmeticException e)
        {
            //打印异常的堆栈信息,方便程序员处理异常
            e.printStackTrace();
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
            //打印异常的堆栈信息,方便程序员处理异常
            e.printStackTrace();
        }
        finally
        {
            System.out.println("程序执行结束...");
        }
    }
}

捕获异常1:被除数不能为0。根据提示修改代码—-》》把n=0修改为n=非零值

这里写图片描述

捕获异常2:数组越界。根据提示修改代码—-》》把i<5修改为i<4

这里写图片描述

处理异常后运行程序

这里写图片描述

2、回避异常(手动抛出异常)
(1)、在方法声明中包含throws子句,通知潜在调用者,如果发生了异常,必须由调用者处理。
(2)、自己处理不了,往上级抛出,上级处理该方法体中抛出的异常
(3)、用throws声明方法抛出异常,不进行处理。谁调用谁负责处理。

public class Test {
    public static void main(String[] args) throws Exception {
        //方法体
    }
}

四、自定义异常类
如果Java提供的异常类型不能满足程序设计的需要,我们可以定义自己的异常类型。
用户自定义的异常类应为Exception类(或者Exception类的子类)的子类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值