java -- 异常处理

来源:互联网 发布:联想授权数据恢复中心 编辑:程序博客网 时间:2024/05/21 17:33

异常处理:
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException 的异常。

所有的异常市场从java.lang.Excepion类继承的子类, Exception类是Throwable类的子类 .处了Exception类外, Throwable 还有一个字累Error. java成功需通常捕获错误. 错误一般发生再严重故障是, 它们在java程序处理的范畴之外. Error用来指示运行时环境发生的错误. Exception中主要有IOException 和 RunTimeException

Error 系统崩溃 数据库崩溃(和程序代码无关)
Exception 异常(和程序代码有关系)

这里写图片描述

异常处理的作用:简单来说就是帮你来完善代码 让出现的错误容易找到

RuntimeException 运行时异常

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

解决异常方式
try … catch … finally
try 指测试这个异常
catch 指捕获这个异常
finally 指异常结束后做的事

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

例:

public class Demo02 {public static void main(String[] args) {    TestException test = new TestException();    try {        //  可能发生异常的代码        int num = test.fun(10, 0);        //  相当于这块返回了异常对象        //  new ArithmeticException("/ by zero");        System.out.println(num);    } catch (ArithmeticException e) {        //  捕获异常  该怎么办        //  catch  如何就能捕获异常?        //  ArithmeticException e = new ArithmeticException("/ by zero");        //  catch会匹配这个异常对象        //  如果匹配上了就执行catch语句        //  补货异常后 程序会继续执行        System.out.println("吃药了没? 除数为0了!");    }    System.out.println("你猜我执行了吗?");}}class TestException{//报异常的方法public int fun(int a, int b) {    /*     * 这里发生了算数异常  相当于产生了一个异常对象     * new ArithmeticException("/ by zero");     * 一旦发生异常  系统会产生一个对应异常对象     * 发生空指针     * new NullPointerException();     * 发生异常后 谁调用我 这个异常就给谁     * 处理不了 就给JVM虚拟机去处理     * JVM默认处理方法: 根据异常对象的类型 去打印对应错误信息     * 打印完 会结束你的程序     */    return a / b;

// ArithmeticException arithmeticException = new ArithmeticException(“/ by zero”);
}
}

多catch的捕获异常

public static void main(String[] args) {    int[] array = {1,2,3,4};    try {        //  测试代码异常        System.out.println(10/0);        //  产生new ArithmeticException之后  就去匹配        //  匹配成功后 程序继续向下执行        System.out.println(array[10]);    } catch (ArithmeticException e) {        /*         * 注意:如果使用exception直接匹配异常         *      多个catch同时捕获时 需要写在最后         *      写前边  后面的catch相当于白写了         */        System.out.println("病了治  除数为零了");    } catch (ArrayIndexOutOfBoundsException e) {        //  如果发生多个一唱歌需要匹配多个catch        System.out.println("别放弃 数组越界了");    } catch (Exception e) {        System.out.println("你出错了");    }    System.out.println("你猜我执行了吗?");}

finally — 不管异常有没有发生 有没有匹配到 都会执行

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

例如:

public static void main(String[] args) {    try {        System.out.println(10 / 1);        return;    } catch (ArithmeticException e) {        System.out.println("除0了");    }finally {        System.out.println("我是finally");    }    System.out.println("我是下面的语句");}

这里的finally不论如何 都会执行

运行时异常 和 编译时异常
除了运行时异常 就是 编译时异常
出现运行时异常 —- 就是代码的问题(程序员犯得错误)
出现编译时异常 —- 问题的提前预警 强制你去处理, 不处理编译不通过

public static void main(String[] args) throws FileNotFoundException {    //  编译时异常    //  系统这时候  不知道你到底有没有这个文件    //  相当于系统问你  要是没有这个文件咋整??    //  系统这时会强制  要求你对这个问题作出解释    //  这就是编译时异常(相当于对问题的 一种提前准备)    /*         * 解决异常有两种方式         *  1.自己处理  try...catch         *      (想让程序继续执行就try)         *  2.把异常抛出去(谁调用我 抛给谁 谁去处理)         *      (想让程序遇到错误就停止  就抛)         *///      try {//          FileInputStream fileInputStream = new FileInputStream("wl.txt");//      } catch (Exception e) {//          System.out.println("读入文件  没找到");//      }    FileInputStream fStream = new FileInputStream("wl.txt");    }}例:package com.lanou3g;/* * 需求: *  创建一个人类  有name  age *  要求  人类的年龄赋值时  要在 0 到 120 之间 *  * 不用异常 */public class Demo06 {public static void main(String[] args) throws Exception {    Person person = new Person();    person.setAge(170);    System.out.println(person.getAge());}}class Person{private String name;private int age;public Person() {    // TODO Auto-generated constructor stub}public Person(String name, int age) {    super();    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   抛出一个异常对象(方法中出现) */public void setAge(int age) throws Exception {    if (age > 0 && age < 120) {        this.age = age;    }else {//          System.out.println("输入有误");        //  抛出一个异常 告诉他 你赋值的年龄不对        //  throw  关键词  抛出一个异常对象        //  创建一个异常对象        //Exception exception = new Exception("年龄非法");        //  把这个异常对象 抛出去        //  抛给谁?  ---   谁用给谁        //  使用匿名对象抛出异常        //  使用自定义类处理异常        AgeOutOfBoundsException aException = new AgeOutOfBoundsException("年龄非法");        throw aException;     }}@Overridepublic String toString() {    return "Person [name=" + name + ", age=" + age + "]";}}//  创建一个自定义的异常类(继承exception)//  在创建异常类时  需要直观让人知道这是什么异常//  所以类名要见名知意class AgeOutOfBoundsException extends Exception{/** *   序列化时 需要id */private static final long serialVersionUID = 1L;//  重写构造方法public AgeOutOfBoundsException() {    super();    // TODO Auto-generated constructor stub}public AgeOutOfBoundsException(String message) {    super(message);    // TODO Auto-generated constructor stub}/* * Throwable中的方法 */public class Demo07 {    public static void main(String[] args) {        Exception exception = new Exception("我是异常信息");        //  调用异常中toString方法        //  打印的 异常的类名 和 异常信息//      System.out.println(exception);        //只打印 异常信息//      System.out.println(exception.getMessage());        //  打印的事异常类名 信息 加 出现的位置        //  JVM虚拟机默认就是打印这个方法             exception.printStackTrace();    }}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 打起手鼓唱起歌原唱 手鼓的打法口诀 非洲手鼓哪个牌子好 安和桥手鼓鼓谱图 歌曲打起手鼓唱起歌 丽江手鼓小宝贝 我的小宝贝手鼓 丽江夏夏手鼓 丽江手鼓的基本打法图解 云南手鼓歌曲 手鼓店的歌曲大全 打起手鼓唱起歌伴奏 手鼓是哪个民族的乐器 小宝贝 丽江夏夏 一瞬间 丽江小倩手鼓 扌字旁的字 扌怎么读 扌的字 扌字旁的字有哪些组词 带有扌字旁的字 扌手旁的字 扌加偏旁 扌字旁的字一二年级 扌手旁的字有哪些 扌字旁的字有哪些字 扌的字有哪些 扌字旁的字大全 扌旁的字 扌字旁的字有哪些 青年才俊 才俊 躁狂抑郁多才俊 书法家夏才俊 怎么才算尿无力 食不饱力不足才美不外现 杀伤力 助力 力为 理解力