java22天

异常

这里写图片描述
除于零造成异常

概述:就是在程序运行时出现不正常情况

异常由来

问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象
其实也就是java对不正常情况进行描述后的对象体现。

问题的划分

严重问题,非严重的问题
* 严重:java通过Error类描述
对于Error一般不编写针对性的代码对其进行代理
* 非严重:java通过Exception类描述
对于Exception可以使用针对性的处理方式进行处理

无论Error或者Exception都具有一些共性内容。
比如:不正常情况的信息,引发原因等。
Throwable
Error
Exception
2.异常的处理
java提供了特有的语句进行处理
try
{
需要被检测的代码;
}
catch(异常类 变量)//异常类(Exception)
{
处理异常的代码:(处理方式)
}
finally
{
一定会执行的语句;
}
3.对捕获到的异常对象进行常见 方法 操作
* 变量名.getMessage());//异常信息
* 变量名.toString();//异常名称,异常信息
* 变量名.printStackTrace();//异常名称,异常信息,异常出现的位置。
* 其实jvm默认的异常处理机制,就是在调用printStackTrace方法。
打印异常的堆栈跟踪信息。
*在功能上通过throws的关键字声明了该功能有可能出现问题
这里写图片描述

class demo
{
    int div(int a,int b)throws Exception//告诉调用者有可能存在的异常
    {
        return a/b;
    }
}
class ExceptionDemo1
{
    public static void main(String[] args) throws Exception//将问题抛出,最后抛出到虚拟机
    {
        Demo d=new Demo();
        int x=d.div(4,0);
        System.out.printIn("x="+x);
        System.out.printIn("over");
    }
}

多异常的处理

* 声明异常时,建议声明更为具体的异常!,这样处理的可以更具体 *
建立在catch处理时,catch中一定要定义具体的处理方式

class demo
{
    int div(int a,int b)throws ArithmeticException,ArrayIndexOutBoundsException//告诉调用者有可能存在的异常
    {
        return a/b;
    }
}
  • 函数中一旦出现了异常就会跳出,不是每个catch(异常类 变量名)都会执行。
    throws 数量=catch数量
    声明几个异常=几个catch块
    如果多个catch块中的异常出现继承关系,父类异常catch块放下面。
    也不要简单地定义一句e.printStackTrace(),
    也不要简单的就书写一句输出语句,

自定义异常

  • 因为项目中会出现也有的问题,而这些问题并未被java所描述并封装对象。
    所以对于这些特有的问题可以按照java的对问题封装的思想。
    将特有的问题,进行自定义的异常封装。
    1.入伙
    继承
    class 自定义异常 extends Exception
    {

}
2.手动抛出

class Demo
{
    int div(int a,int b)throws 自定义异常//跳转到try catch
    {
        if(b<0)//定义抛出规则
        throw new 自定义异常();//手动抛出
    }
}

当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
要么在内部try catch处理
要么在函数上声明让调用者处理throws
一般情况下,函数内出现异常,函数内需要声明。
发现打印的结果只有异常的名称,却没有异常的信息,因为自定义的异常并未定义信息
因为父类中已经把异常信息的操作都完成了
所以子类只要在构造时,将异常信息传递给父类通过super语句。
那么就可以直接通过getMessage方法获取自定义的异常信息
自定义异常:必须是自定义类继承Exception
继承Exception的原因:
异常体系有一个特点:因为异常类异常对象都被抛出
他们都具有可抛型,这个可抛性是Throwable这个体系独有的特点
只有这个体系中的类和对象才可以被throws和throw
throws和throw的区别
throws使用在函数上
throw使用在函数内

throws后面跟的异常类,可以跟多个。用逗号隔开
throw后跟的异常对象

  • RuntimeException
    Exception爷爷
    RuntimeException爸爸
    ArithmeticException儿子

    RuntimeException是一个特殊的子类RuntimeException运行时异常
    如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
    如果在函数上声明了该异常。调用者编译可以不用进行处理,编译一样通过。
    之所以不用再函数上声明,是因为不需要让调用者处理,当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。
    自定义异常时:如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException

对于异常分两种
1、编译时被检测的异常
2、编译时不被检测的异常(运行时异常,RuntimeException以及其子类)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值