Exception异常认识

了解异常的概念和体系

异常就是代表程序出现的问题

  • Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来, 说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
  • Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的孩子来封装程序出现的问题。
    • 运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
    • 编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)

掌握异常处理方式try…catch

  • Java中处理异常的2种方式
    • try/catch处理异常, 负责任
      • try格式:try { 可能出现异常的代码;} catch(异常类名 变量名) { 异常的处理代码;}
    • throws处理异常, 不负责任(直接在方法名后面抛出异常)
public class ExceptionTest1 {
    public static void main(String[] args) throws ParseException{
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = sdf.parse("2028-11-11 10:24");
            System.out.println(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

/**
 * 目标:认识异常。
 */
public class ExceptionTest1 {
    public static void main(String[] args) throws ParseException{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse("2028-11-11 10:24");
        System.out.println(d);
    }
}

掌握finally代码块

  1. finally代码块作用
  • 有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的。
  • 在finally代码块中的代码一定会被执行
try {
   可能出现异常的代码;
} catch(异常类名 变量名) {
   异常的处理代码;
} finally {
   代码;
}

掌握异常处理方式2-throws

  1. 掌握异常处理方式2-throws
修饰符 返回值类型 方法名(参数) throws 异常类名1, 异常类名2 { 
} 

了解自定义异常和使用自定义异常

  • 为什么需要自定义异常类

JDK提供的异常虽然比较多,但是不一定符合我们的需求。

此时我们根据自己业务的异常情况来定义异常类,例如年龄负数问题,考试成绩负数问题

  1. 步骤

定义类继承Exception/RuntimeException

编写构造器

在对应的方法中抛出异常

// 1、必须让这个类继承自Exception,才能成为一个编译时异常类。
public class AgeIllegalException extends Exception{
    public AgeIllegalException() {
    }

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

public class ExceptionTest2 {
    public static void main(String[] args) {
        // 需求:保存一个合法的年
        try {
            saveAge2(225);
            System.out.println("saveAge2底层执行是成功的!");
        } catch (AgeIllegalException e) {
            e.printStackTrace();
            System.out.println("saveAge2底层执行是出现bug的!");
        }
    }

	//2、在方法中对age进行判断,不合法则抛出AgeIllegalException
    public static void saveAge(int age){
        if(age > 0 && age < 150){
            System.out.println("年龄被成功保存: " + age);
        }else {
            // 用一个异常对象封装这个问题
            // throw 抛出去这个异常对象
            throw new AgeIllegalRuntimeException("/age is illegal, your age is " + age);
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值