异常知识梳理

Throwable主要分为两大类,Error和Exception

Error(错误),代表JVM本身的错误,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等,不能被程序员所编写的代码处理,结果只有一个,那就是退出程序,无法处理

Exception(异常),表示程序可以处理的异常,可以捕获且可能恢复,分为两大类,运行时异常(RuntimeException)和编译时异常。

常见的运行时异常:

ClassCastException: 类型转换异常,当试图将对象强制转换为不是实例的子类时,抛出该异常;
ArrayIndexOutOfBoundsException: 数组下标越界异常,当你使用不合法的索引访问数组时会抛出该异常;
NullPointerException: 空指针异常,需要对象的地方使用null会抛出该异常;
ArithmeticException: 算术运算异常,比如除数为0,抛出该异常;
NumberFormatException: 数字转换异常,当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常;

处理异常的两种方式:

异常在发生时,就会生成(new)一个异常类对象,并抛出,如果没有被捕获,就会一直向上抛

1.try...catch...

try {
    
} catch (Exception e) {
    e.printStackTrace();

    //getMessage() 返回异常信息(String类型)
	//printStackTrace() 追踪堆栈异常信息,打印异常类名和异常信息,以及异常出现在程序中的位置。返回值void

}finally{
    //....
}

1) try不管有没有发生异常,都会去执行finally

2)可以将多个异常声明在一个catch中  

try{  //要求父类异常在后,子类异常在前
}catch(Exception1){
}catch(Exception2){
}


try{
}   //jdk8新特性,要求父类异常在后,子类异常在前
catch(Exception1 | Exception2 | Exception3 e) {
}

3)finally是必须执行的(只要try执行,finally就执行)且必须是最后执行的 ,下面是关于return和finally的两种情况

try{
    int i = 0;
    i += 100;
    return i;
}catch{
}finally{
    i += 9;
}
//return 109

try{
    int j = 0;
    j += 100;
    return j;
}catch{
}finally{
    j += 9;
    return 0;  //如果finally中也有return,则finally的return会覆盖上面的return
}
// return 0

只有一种情况可以不去执行finally,那就是System.exit(0);

 try {
        System.out.println("try...");
         // 退出JVM
        System.exit(0); // 退出JVM之后,finally语句中的代码就不执行了!
     } finally {
        System.out.println("finally...");
     }

2.throws

直接抛给方法的调用者 ,自己不具备处理异常

3.自定义异常:throw

首先,编写一个类继承 Exception (编译异常)或者 RuntimeException (运行异常)。然后创建两个构造器,一个有String参 , 一个无参

public class Test000 {
    public static void main(String[] args) {
        int age = 800;
        if(age>120||age<0)
            throw new AgeException("年龄错误");
        System.out.println("年龄正确");
    }
}
class AgeException extends RuntimeException {
    public AgeException () {

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


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值