异常

作者: 咸鱼有梦想呀 | 来源:发表于2017-11-06 21:24 被阅读0次

1.异常
异常:在运行时发生的错误
异常类:描述不正常的情况的类
在Java中将异常按照面向对象的思想将问题封装成了对象,用异常类对其进行描述。以对象抛出的形式体现。

2.体系
由于问题很多,也就说描述的类也很多。
将其共性进行向上抽取,形成了异常体系。

Throwable(可抛出)

  • 一般不可处理的(Error)
    特点:是由jvm(虚拟机)抛出的严重性的问题
    不处理,直接修改程序
  • 可以处理的(Exception)

无论是error还是exception,问题发生就应该可以抛出,而这个体系的特点就在于throwable及其所有的子类都具有可抛性。

异常声明抛出
可抛性的体现:通过throws和throw两个关键字体现。
凡是可以被这两个关键字所操作的类和对象都具有可抛性。

函数内出现异常,需要在函数外申明;调用了发生异常的函数或者申明异常的函数,处理方式就是抛出

throws和throw的区别:
1.throws使用在函数上
throw使用在函数内
2.throws抛出的是异常类,可以抛出多个,用逗号隔开
throw抛出的是异常对象。

3.异常的分类

  • 编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系
  • 编译时不检测异常(运行时异常):就是Exception中的RuntimeException和其子类。

自定义异常时,要么继承Exception,要么继承RuntimeException。

4.异常捕捉trycatch
这是可以对异常进行针对性处理的方式

具体格式:

try
{
//需要被检测异常的代码。
}
catch(异常类 变量)//变量:用于接收发生的异常对象
{
//处理异常的代码。
}
finally
{
//一定会被执行的代码。
}

举个栗子
数组角标越界

class FuShuIndexException extends Exception
{
    FuShuIndexException()
    {}
    FuShuIndexException(String msg)
    {
        super(msg);
    }
}

class Demo9
{
    public int method(int[] arr,int index)throws FuShuIndexException
    {
        if(index<0)
            throw new FuShuIndexException("角标变成负数了");
            return arr[index];
    }
}
public class ExceptionDemo {

    public static void main(String[] args) {
        int[] arr = new int[3];
        Demo9 d = new Demo9();
        try
        {
            int num = d.method(arr, -30);
            System.out.println("num="+num);
        }
        catch (FuShuIndexException e)
        {
            System.out.println("负数角标异常");
        }
        System.out.println("over");
    }

}
运行结果

多catch情况
一个try对象多个catch,有几个异常捕获几个。

多catch父类的catch放在最下面

finally代码块
一定会执行的代码。
但是,当退出jvm时不执行(System.exit(0);)

  • finally的作用
    通常用于关闭(释放)资源。

  • try catch finally 代码块组合特点:

    • try catch(多个)
      当没有必要资源需要释放时,可以不用定义finally。
    • try finally
      异常无法之间catch处理,但是资源需要关闭

5.异常处理原则

  • 函数内容如果抛出需要检测的异常,那么函数上必须要申明。否则必须在函数内用try catch捕捉。
  • 如果调用到了声明异常的函数,要么try catch要么throws。
  • 功能内容可以解决,用catch
    解决不了,用throws声明抛出
  • 一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。内部有几个需要检测的异常,就抛几个异常,抛出几个就catch几个。

6.异常的注意事项

  • 子类在覆盖父类的方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类。
  • 如果父类抛出多个异常,那么子类只能抛出父类异常的子集。
  • 如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛。只能try不能抛。

相关文章

  • 异常和模块

    异常 目标 了解异常 捕获异常 异常的else 异常finally 异常的传递 自定义异常 一. 了解异常 当检测...

  • python多线程

    异常基础知识 -异常简介: 运行时错误 -异常类: 异常数据 异常名称,异常数据,异常类型 -自定义异常 clas...

  • dart 异常

    dart中的异常 异常处理 抛出异常 异常捕获

  • Java基础之异常

    Java基础之异常 目录 异常简单介绍 ThrowableErrorException 异常分类 如何处理异常异常...

  • python核心编程-错误与异常

    本章主题:什么是异常Python中的异常探测和处理异常上下文管理引发异常断言标准异常创建异常相关模块 什么是异常 ...

  • motan(RPC)系统梳理知识点

    异常分类: 业务异常(bizException) 服务异常(serviceException) 框架异常(fram...

  • 异常

    Java异常体系 异常的分类 Java的异常分为两大类:Checked异常和Runtime异常(运行时异常)。所有...

  • 从零构架个人博客网站(二)-全局异常处理

    中间件的异常 全局异常中间件全局异常监听定义异常的返回结果定义常见的异常状态开发环境 异常查看 对于异常,我们可以...

  • Node.js异常处理

    Node.js异常分类: 变量异常 函数异常 调用异常 变量异常 未定义变量 未包含对象 变量类型错误 函数异常 ...

  • python 异常

    异常 目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释...

网友评论

      本文标题:异常

      本文链接:https://www.haomeiwen.com/subject/tpbgpxtx.html