【Java】疯狂Java基础(三)——异常处理

一、前言

      写代码的时候,异常处理是必不可少的。对异常处理的一些了解还是应该具备的,下面小编就从java的异常方面来说说

二、异常处理机制

      使用try … catch 捕获异常

try{
    //业务代码
    ...
}catch(Exception e){
    throw new Excepion;
    ...
}finally{
    ...
}

      java 的异常机制主要用到了try 、catch、finally、throw和throws五个关键字。其中try后面的{}中是业务代码,可能引发异常。chatch后面的{}放的是处理异常的代码。多个chatch后面可以跟放一个finally,用于回收try块中打开的物理资源,异常机制会保证finally块中总被执行。throws用于放在方法签名上,用于声明该方法可能抛出的异常,throw用于抛出一个实际的异常。

三、异常类

      java 把非正常情况分成了两类:异常(Exception)和错误(Error)。

这里写图片描述

Error错误

      一般与虚拟机相关的问题。如系统崩溃、虚拟机错误、动态链接失败等。这种错误无法恢复或者不可能捕捉,将导致应用程序中断。

      因为应用程序是存放在虚拟机,系统中的。如果系统崩溃了,应用程序是无法处理这些错误的,不是本身的错误。所以使用catch来捕捉是不可以的。

Exception

      java 的异常分为两大类:Checked异常和Runtime异常。所有的RunntimeException类及其子类的实例被称为Runtime异常;不是RuntimeException类及其子类的异常被称为Checked异常。

      对比:

Checked Runtime
异常发现阶段 编译阶段 运行阶段
是否强制

       checked 异常也就是我们经常遇到的 IO 异常,以及 SQL 异常都是这种异常。 对于这种异常, JAVA 编译器强制要求我们必需对出现的这些异常进行 catch 。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆 catch 块去处理可能的异常。

      但是另外一种异常: runtime exception ,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机 接管。比如:我们从来没有人去处理过 NullPointerException 异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

常见的运行时异常

      1)IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数

      2)NullPointerException当应用程序试图在需要对象的地方使用 null 时,抛出该异常

      3)ArrayIndexOutOfBoundsException当使用的数组下标超出数组允许范围时,抛出该异常

      4)ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常

      5)NumberFormatException当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

四、自定义异常

      通常情况下,程序员很少自行抛出系统异常,因为异常的类名通常也包含了异常的有用信息。所以在选择抛出异常时候,应该选择合适的异常类,从而可以明确的描述该异常情况。 这样就引出了自定义异常

      自定义异常都继承Exception类,如果需要自定义runtime类,应该继承runtimeException类。

package com.dmsdbj.itoo.tool.itooexception;

import java.io.Serializable;

public class ItooRuntimeException extends RuntimeException implements Serializable {
    public ItooRuntimeException() {
    }

    public ItooRuntimeException(String message) {
        super(message);
    }

    public ItooRuntimeException(String message, Throwable cause) {
        super(message, cause);
    }

    public ItooRuntimeException(Throwable cause) {
        super(cause);
    }
}

五、小结

      异常处理是为了我们更快的解决问题,所以要细致,从小的异常开始捕捉。

猜你喜欢

转载自blog.csdn.net/kisscatforever/article/details/79755240