JAVA中的异常

一、初始异常体系

异常定义在 java.lang.throwable下 分为 Error 和 Exception

error: 代表系统级别的错误(属于严重的错误),而我们开发人员不需要管他。

Exception: 叫做异常(是异常体系中最顶层的父类),代表程序可能出现的问题。我们通常会用Exception以及他的子类来封装程序出现的问题。

Exception又分为俩类: 运行时错误 和 编译时错误。

运行时错误:

RuntimeExceotion以及其子类,编译时不会出现异常提醒,运行时才会出现的错误。

编译时错误:

除了运行时错误的其他错误被称为编译时错误,编译阶段就会出现的错误。(作用在于提醒程序员)

二、异常的作用及底层默认处理方式

异常主要有俩个作用:

1、异常可以用来查看bug的关键参考信息

System.out.println(2/0);
//Exception in thread "main" java.lang.ArithmeticException: / by zero
    //at Tset1.tset.main(tset.java:5)
​

2、异常可以作为方法内部的一种特殊返回值,已通知调用者底层的执行情况

public void setName(String name) {
        int len = name.length();
        if(len<3||len>10){
            throw new NameFormatException("格式有误,长度应为:3-10");//将错误返回
        }
        this.name = name;
    }

JVM默认处理方式

1、把异常的名称,异常的原因及异常出现的位置等信息输出在控制台。

2、程序将停止运行,异常下面的代码就不会执行了。

三、异常的处理

一、捕获异常

格式

try{
    //可能出现错误的代码
}catch{
   //异常的处理代码
}
//一个try可以对应多个catch

示例

public class tset {
    public static void main(String[] args) {
        int arr[] = {1,2,3,4,5,6};
        try {
            System.out.println(arr[10]);
            /*此处出现了异常,程序就会在这里创建一个ArrayIndexOutOfBoundsException对象
            拿着这个对象到catch的小括号中对比,看括号中的变量是否可以接受
            如果被接受,就表示该异常被捕获,执行catch中的代码
            执行完之后,不会停止,会继续执行下面的代码
            */
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("索引越界了");//如何处理该异常
        }
        System.out.println("我也执行了")
    }
}
​

二、捕获异常的注意事项

1、如果try中没有遇到问题,则会把try中的所有代码执行完毕,而不会执行catch中的代码。

2、如果try中的代码可能出现多个问题,则需要写多个catch与错误相对应。(如果catch中的对象使用多态,则应将父类型放在子类型的下面,否则子类型将永远无法捕获异常)。

例如

int arr[] = {1,2,3,4,5,6};
        try {
            System.out.println(arr[10]);
            System.out.println(2/0);
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("索引越界了");//如何处理该异常
        }catch(RuntimeException e){
            System.out.println("666");      }//RuntimeExceptionArrayIndexOutOfBoundsException的父类,需要写在下面。

3、如果try中遇到了问题,下面的代码将不会在执行了。直接就去寻找与catch小括号中相对应的变量了。

4、如果try中的异常没有被catch捕获,则会交给JVM处理。

5、捕获处理异常相对比默认处理的好处

捕获处理不会立刻停止程序的运行,而默认处理会停止程序的运行。

Throwable中的成员方法

大部分的异常类都直接或间接的继承了Throwable类。

public String getMessage()//返回throwable的详细信息的字符串。
public String toSting()//返回此处可抛出的简短描述
public void printStackTrace()//把异常的错误信息输出在控制台上。  (该方法最为常见)  

抛出异常

throws关键字

写在方法的定义处,表示声明一个异常,告诉调用者,使用本方法可能会出现的问题。

public void 方法()throws 异常类名1,异常类名2...{
     ....
}

throw关键字

写在方法里面,结束方法,手动抛出异常,交给调用者。

(注意)方法中下面的方法将不会在执行。

public void 方法(){
    throw new NullPointerException();
}

注意:运行时异常一般可以不声明异常,而编译时异常必须声明异常

自定义异常类型

步骤:

1、定义异常类

2、写继承关系//一般继承RuntimeException

3、空参构造

4、带参构造//为了让控制台的报错信息更详细

示例

public class AgeOutofBoundsException extends RuntimeException{//写继承关系
    public AgeOutofBoundsException(String message) {
        super(message);
    }//带参构造
​
    public AgeOutofBoundsException() {
    }//空参构造
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呜呜。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值