4.7-4.9学习总结

目录

异常处理

1.必要性

2.异常分类

3.异常类的继承体系

4.异常处理方式

1.try-catch-finally

2.throws +异常列表

5.自定义异常 

6.throw与throws


异常处理

1.必要性

  1. 人的考虑有限,异常情况总比考虑到的要多
  2. 异常处理代码和正常业务代码分离,代码更加优雅,程序更加健壮(不会因为一个异常而导致整个程序崩溃)

2.异常分类

         语法错误和逻辑错误不是异常

包括

  1. Error:JVM无法解决的严重问题
  2. Exception:其他因编程错误或偶然因素导致的一般性问题,可用针对性代码处理。包括Checked编译异常和Runtime运行异常。编译异常必须显示处理

3.异常类的继承体系

 ArithmeticException 数学运算异常

ClassCastException 类型转化异常

NumberFormatException数字格式不正确异常

4.异常处理方式

1.try-catch-finally

try{
    //可能出现异常的代码
    //若出现异常,不执行异常发生后的代码
}catch(Exception e){
    //捕获异常,将异常封装为Exception对象e,传给catch
    //在这里处理异常
    //没有捕获到异常不执行catch
}fianlly{
    //无论有没有捕获到异常,finally始终会执行
    //可用于释放资源,关闭连接
}

当try中有多个异常时,可用多个catch分别捕获不同的异常, 注意子类异常要放在父类前面。多个catch只有一个catch会捕获到异常

public class exception {
    public static void main(String[] args) {
        int x=1;
        int y=0;
        int[] arr={0,1,2,3,4};
        Person p=null;
        try{
            p.temp();
            System.out.println(x/y);
            System.out.println(arr[8]);
        }catch (ArithmeticException e){
            System.out.println(e.getMessage());
        }catch (NullPointerException e){
            System.out.println(e.getMessage());
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println(e.getMessage());//
        }
    }
}
class Person{
    void temp(){
        System.out.println(666);
    }
}

try-finally 不捕获异常,发生异常时,先执行finally,再崩程序。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n;
        String s;
        while(true){
            try{
                System.out.println("请输入一个整数");
                s=sc.next();
                n=Integer.parseInt(s);
                break;
            }catch (NumberFormatException e){
                System.out.println("请重新输入");
            }
        }
    }
}

2.throws +异常列表

        将异常抛出,交给调用者处理,最顶级的处理者为JVM

  1. JVM处理时,直接退出程序
  2. 没有显式处理异常时,默认throws
  3. 编译异常需要显式throws
  4. 规定子类重写父类方法时,抛出异常类型要么一致,要么为父类异常的子类

5.自定义异常 

        自定义异常类名 继承Exception或RuntimeException

        若继承Exception属于编译异常,需要显示处理

        若继承RuntimeException 属于运行异常

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n;
        String s;
        int age=200;
        try {
            if(!(age>=0&&age<=120)){
                throw new AgeException("年龄小于0或者大于120");
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
}
class AgeException extends RuntimeException{
    public AgeException(String massage){
        super(massage);
    }
}

6.throw与throws

throws是异常处理的一种方式,位于方法声明处,后跟异常列表

throw是用于手动生成异常对象的关键字,位于方法体中,后跟异常对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值