java 异常处理
来源:互联网 发布:网络安全法 个人信息 编辑:程序博客网 时间:2024/05/29 09:22
一 异常处理
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 }}