java 异常处理

一 异常处理
Throwable(异常处理的父类)
1 Error ———————- 系统奔溃 数据库崩溃(与所写代码没关系)
2 Exception ——————–异常(与所写代码有关系)
RuntimeException——————运行时异常

出现异常 系统如何解决 (谁来解决)
main 解决的方式
1 main函数自己解决
2 把问题抛给上级去解决(谁调用了main 函数 谁去解决)
交给jvm虚拟机去解决
jvm虚拟机如何解决?给你报错
打印错误信息 错误发生在什么类的什么位置

我们下面来看看3个常见异常
1 角标越界异常

int[] array=new int[] {1,2,3,4,5};
System.out.println(array[5]);

这里写图片描述

2算术异常

int i= 0;
int z= 1;
int y = z/i;
System.out.println(y);

这里写图片描述

3空指针异常

int[] array=new int[] {1,2,3,4,5};
array= null;
System.out.println(array[0]);

这里写图片描述

二 解决异常方式
try —- catch —– finally —–
try 指测试这个异常
catch 指捕获这个异常
finall 指异常结束后做的事

捕获异常的流程
1 发生异常
2 根据发生的异常产生对应的异常对象
3 这个异常对象会返回给调用者
4 如果调用者处理了这个异常(添加try catch)
异常对象会跟catch进行匹配 匹配上执行catcch语句
程序会继续执行
5 如果调用者没有处理这个异常 默认交给jvm虚拟机处理
根据异常 打印错误信息

三 finally
finally(遗言)
记住 不管你异常有没有发生 有没有匹配到 都会执行

finally有什么作用?
可以关闭系统资源 避免资源的浪费
(例如 关闭输入流 和 关闭数据库)

思考
final finally finalize 有什么区别
雷锋和雷锋塔的区别 没什么联系 一点关系都没有
final 修饰属性 修饰方法
finally 中语句 一定会执行 (异常处理的语句)
finalize 基类Object类方法
所有java中对象都有这个方法
该方法中垃圾回收的时候 被系统自动调用
当一块内存空间 无人引用 这块内存就是垃圾

 try {
         System.out.println(10/1);
         return;
     }
     catch(ArithmeticException e) {
         System.out.println("除0 了");
     }
     finally {
        System.out.println("你看我执行了么");
    }
     System.out.println("我下面的语句");
}

这里写图片描述

我们下面给个需求
1 创建一个人类 有name 和 age
2 要求 人类年龄赋值时 要在 0 -120 之间

class People{
    private String  name;
    private int age;
    /**
     * 
     */
    public People() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
     * @param name
     * @param age
     */
    public People(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;
    }
    //如果这个方法 要抛出异常 给调用者
    //那么必须在方法的声明上 标示这个方法为异常方法
    //throws Exception 标示是抛出什么异常
    /**
     * throws 和 throw 区别
     * throws 抛出这个方法 可以抛出一个异常
     * (在方法的申明出现)
     * throw 抛出一个异常对象(在方法中出现)
     * 
     * @param age
     * @throws Exception
     */
    public void setAge(int age ) throws Exception {
        //加个年龄时间
        if (age>0 && age<120) {
            this.age = age;
        }
        else {
            //System.out.println("外星人");
            //抛出一个异常 告诉他 你赋值的年龄不对
            //throw  关键词 抛出一个异常对象
            //创建一个异常对象 把这个异常对象抛出去
            //抛给谁 谁用赋值抛给书
            //Exception exception = new Exception("年龄非法");
            //使用匿名对象抛出
            //throw new Exception();
            //使用自定义类处理异常
            AgeOutOfBoundException exception = new AgeOutOfBoundException("年龄非法");
            throw exception;

        }
    }
    @Override
    public String toString() {
        return "People [name=" + name + ", age=" + age + "]";
    }

}

//创建一个自定义的异常类(继承Exception)
// 在创建异常类时 需要直观让人知道这是什么异常
//所以类名 要 见名知意
class AgeOutOfBoundException extends Exception{
    /**
     * 序列化时 需要的id
     */
    private static final long serialVersionUID = 1L;


    //重写构造方法
    public AgeOutOfBoundException() {
        super();
        // TODO Auto-generated constructor stub
    }


    public AgeOutOfBoundException(String message) {
        super(message);
        // TODO Auto-generated constructor stub
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值