常用类的API——Exception异常

异常

异常指的是程序在编译或者运行时出现不正常的现象。 Java语言的设计者,把一些常见的问题封装了异常类,有些异常是有共性的,所以就有了异常体系。

Throwable:异常体系的根类
	--Error: 严重的错误
	--Exception: 异常
		--RuntimeException及其子类: 运行时异常
		--非RuntimeException及其子类: 编译时异常

虚拟机默认处理异常

当程序出现的异常,虚拟机默认停止程序运行,并且把异常信息打印在控制台。

异常信息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 3
	at com.itheima.demo3.ExceptionDemo1.main(ExceptionDemo1.java:6)

throws声明异常

在写一个方法的时候,考虑到这个方法当中的代码可能会出现问题,在方法上使用throws声明一个异常,告诉调用者调用这个方法的时候,注意这个问题。

//别人调用该方法时,如果参数传错了就会出现ParseException异常
public static void method2(String birday) throws ParseException {
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    Date date = sdf.parse(birday);
    System.out.println(date);
}

try…catch处理异常

当调用别人定义好的方法,你担心出现异常。可以把这些代码用try…catch包裹起来,一旦出现异常就会被catch捕获到并处理,代码可以继续执行。

 try {
     有可能出现异常的代码
 } catch (异常类名1 e){
    如果出现异常,就会执行catch对应语句
 } catch (异常类名2 e){
    如果出现异常,就会执行catch对应语句
 }

【注意:如果多个catch语句中的异常有继承关系,较大的异常需要写在下面】

自定义异常

当API中的异常名称,不足以描述程序中的问题时,可以自己写一个异常类。只需要继承Exception或者RuntimeException即可。

如下自定义一个异常类,用来描述年龄不正确异常。

public class AgeFalseExecption extends RuntimeException {
    public AgeFalseExecption() {
    }

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

异常的练习

public class Student {
    private int age;
    private String name;
  	
    //要求:只有年龄在18~25岁之间,才可以赋值
    public void setAge(int age) {
        //先考虑不合法的情况,在不合法的情况下产生异常
        if (age > 25 || age < 18) {
            throw new AgeFalseExecption("年龄不合法");
        }
        this.age = age; 
    }
	
    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' + 
                '}';
    }
}
public class ExceptionDemo3 {
    public static void main(String[] args) {
        Student stu = new Student();

        Scanner sc = new Scanner(System.in);
        System.out.println("键盘录入学生的姓名:");
        String name = sc.next();

        while (true) {
            try {
                System.out.println("键盘录入学生的年龄:");
                String ageStr = sc.next();
                //如果年龄不是纯数字,会出现格式不正确异常NumberFormatException
                int age = Integer.parseInt(ageStr); 
                stu.setName(name);
                //如果年龄不在18~25范围内,会出现AgeFalseException异常
                stu.setAge(age);
                break; //跳出循环
            } catch (NumberFormatException e) {
                e.printStackTrace();
                System.out.println("输入的格式不对");
                continue;
            } catch (AgeFalseExecption e) {
                e.printStackTrace();
                System.out.println("年龄的范围不对");
                continue;
            }
        }

        System.out.println(stu);
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值