【异常的抛出和抓取】

1.throw和throws的区别

在这里插入图片描述

2.编译时异常和运行时异常

运行时异常:就是RuntimeException异常以及它的所有子类异常
在这里插入图片描述

编译时异常:就是除了RutimeException及其子类异常之外的所有异常

在这里插入图片描述

3.异常处理

在这里插入图片描述

4.代码演示

Student类

package Exception;

public class Student {

    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {

            this.name = name;

    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age>=18&&age<=30){
        this.age = age;
        }else {
            //这里直接使用自定义的异常类,它继承了RuntimeException运行时异常
            throw new OutOfAgeBoundsException("请输入符合要求的年龄");
        }
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

自定义异常类

package Exception;

/**
 * 自定义异常类,继承运行时异常类,并且有自己的无参和有参构造
 */
public class OutOfAgeBoundsException extends RuntimeException{

    public OutOfAgeBoundsException() {
    }

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

异常处理测试类ExceptionTryCatch

/*
异常总结:
1.抛出异常:
throws:只是声明异常,而没有创建异常类对象
格式:在方法()后面加 throws 异常类名
throw:就会创建异常类对象,也可以说是创建了异常
格式:throw new 异常类名() 这里使用new 关键字创建了对象
注意:抛出异常就会默认交给虚拟机处理,虚拟机就会打印异常信息,并且结束本程序,出现异常行的后面的代码都执行不了
2.抓异常:
使用try…catch处理异常
注意:抓取异常与只抛出异常的最大区别就是:抓取到异常后,执行完catch里面的代码,程序不会马上结束,会继续执行catch后面的代码
*/

package Exception;

import java.util.Scanner;
public class ExceptionTryCatch {

   public static void main(String[] args) throws Exception {
       Student s1 = new Student();

       Scanner sc = new Scanner(System.in);
       System.out.println("请输入姓名:");
       String name = sc.nextLine();
       s1.setName(name);

       while (true) {
           try {
               System.out.println("请输入年龄:");
               String s = sc.nextLine();
       //1.这里在接收键盘输入年龄的值的时候可能会输入非整数型数据,因为Integer.parseInt()方法只能将"123"的字符串转换为整型数据
       // 如果是"abc"这样的字符串就会出现数据格式异常
               //2.注意catch中如果这里出现了异常那么会直接跳到catch中执行,而不会执行出现异常行的后面的代码
               int age = Integer.parseInt(s);
               s1.setAge(age);
               break;
           } catch (NumberFormatException e) {
               //注意如果有多个catch的话,如果多个catch中的异常类存在子父类关系,需要将子类写在父类前面
               //如果将父类写在前面的话,后面的子类就执行不到,因为父类引用可以接收所有的子类对象,这里就会形成多态,后面的子类就执行不到了
               System.out.println("年龄应该是整数,请重新输入:");
               continue;
           } catch (OutOfAgeBoundsException e) {
               System.out.println("请输入一个符合年龄范围的数字");
               continue;
           }

       }

       System.out.println(s1);

   }

}

使用try … catch的好处

package Exception;

public class ExceptionTest {

    public static void main(String[] args)  {
        int [] arr =new int[]{1,2,3,4,5};
        arr=null;
        try {
            getNum(arr);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("try catch的好处:处理异常后面的代码,还可以执行,不会直接结束程序,");
    }

    private static int getNum(int[] arr) throws Exception{
        if (arr==null){
            //这里就是制造了一个编译时异常,在getNum()方法中制造了一个编译时异常,那么在编译器就会报错,就需要在方法使用处throws抛出异常
            //throw new Exception("参数不能为null");
            throw  new NumberFormatException();
        }else {
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
        return 0;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值