JAVA基础:异常处理

来源:互联网 发布:今天美国钻井平台数据 编辑:程序博客网 时间:2024/05/19 12:14
    * 异常处理     * Throwable(异常处理的父类)     * 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;        }    }     * 多catch的捕获异常     * 异常处理的作用:帮助你来完善代码让出现的错误更容易找到     *      * java     * 安卓开发:客户端开发,发生异常的时候,一般直接用Exception接收就可以了     * javaEE开发     * 服务器开发,处理异常,打印错误信息,代码的错误会被隐藏掉.     * 一般会做日志处理(记录程序被访问的日志)log4j     *      */    public class Demo03 {        public static void main(String[] args) {            int[] array = {1,2,3,4};            try {                //测试代码一场                System.out.println(array[10/0]);                //产生 new ArithmeticException,之后就去匹配                //匹配成功后,程序继续向下执行                System.out.println(array[10]);            }catch(ArithmeticException e) {                /*                 * 注意:如果使用Exception直接匹配异常                 * 多个catch同时捕获的时候,需要写在最后,                 * 写前面,后面的catch相当于白写了                 */                System.out.println("病治了,除数为0了");            }   catch (ArrayIndexOutOfBoundsException e) {                //如果发生多个异常需要匹配多个catch                System.out.println("别放弃,数组越界了");            }   catch (Exception e) {                System.out.println("你出错了");// TODO: handle exception            }            System.out.println("猜猜我执行了吗");        }    }     * finally(遗言)     * 记住:不管你异常有没有发生,有没有被匹配到都会执行     *      * finally有什么作用?     * 可以关闭系统资源,避免资源的浪费.     * (例如:关闭输入流和关闭数据库)     *      * 思考:     * final  finally  findlize 有什么区别     * 雷锋和雷峰塔的区别,没什么联系.     * final 修饰类 修饰方法 修饰属性     * finally 中的语句一定会执行(异常处理的语句)     * finalize 基类object中的方法,所有java中的对象都有这个方法     * 该方法在垃圾回收时候被系统自动调用     * 当一块内从空间无人引用,这块内从就是垃圾     */    public class Demo04 {        public static void main(String[] args) {            try {                System.out.println(10/1);                return;            } catch (ArithmeticException e) {                System.out.println("除0了");// TODO: handle exception            }finally {                System.out.println("你看我就行了吗?");            }            System.out.println("我是下面的语句");        }    }    * 运行时异常和编译时异常     * 除了运行时异常;就是编译时异常     * 出现运行时异常----是代码问题(程序员犯的错误)     * 出现编译时异常----问题的提前预警,强制你去处理     *                不处理编译不通过     *      */    public class Demo05 {        public static void main(String[] args) throws FileNotFoundException {            //编译时异常            //系统这时候不知道到底有没有这个文件            //相当于系统问你,要是没有这个文件该如何进行            //系统这时会强制要求你对这个问题做出解释            //这就是编译时异常(相当于对问题的一种提前准备)            /*             * 解决异常有两种方式             * 1.自己处理try..catch             *  (想让程序继续执行就try)             * 2.把异常抛出去(谁调用我,抛给谁,谁去处理)             *  (想让程序遇到错误就停止就抛)             *              */            /*            try {                FileInputStream fileInputStream = new FileInputStream("wlxxxx.txt");            } catch (Exception e) {                System.out.println("读取文件没找到");            }            */            FileInputStream fileInputStream = new FileInputStream("wlxxxx.txt");        }    }    * 需求创建一个人类有name和age     * 要求:人类的年龄赋值时,要在0到120岁之前     * 不用异常     */    public class Demo06 {        public static void main(String[] args) throws Exception {            Person person = new Person();            //赋值年龄            person.setAge(-16);            System.out.println(person.getAge());    //      System.out.println("请输入你的年龄");    //      Scanner scanner = new Scanner(System.in);    //          //      if () {    //              //      }    //          //      String string = scanner.nextLine();        }    }    //创建一个自定义的异常类(继承Exception)    //在创建异常类时,需要直观让人知道这是什么异常    //所以类名要见名知意     class AgeOutOfBoudsException extends Exception{        /**         * 序列化时需要Id         */        //重写构造方法        public AgeOutOfBoudsException() {            super();        }        public AgeOutOfBoudsException(String message) {            super(message);        }           }    * Throwable中的方法     *      */    public class Demo07 {        public static void main(String[] args) {            Exception e = new Exception("我是异常信息");            //调用异常类中的toString方法            //打印的异常的类名和异常信息            //System.out.println(e);            //只打印异常信息            //System.out.println(e.getMessage());            //打印的是异常类名信息加出现的位置            //jvm虚拟机默认就是打印这个方法            e.printStackTrace();        }    }    public class Demo08 {        public static void main(String[] args) {            //无限输入整数,存放在集合中,打印输入quit停止            //希望在输入字符串的时候让程序也能继续运行.            System.out.println("请输入整数");            Scanner scanner = new Scanner(System.in);            ArrayList<Integer> list = new ArrayList<>();            while (true) {                //接收输入的字符串                String string = scanner.nextLine();                //判断                if (string.equals("quit")) {                    //break跳出本层循环                    //return结束这个方法                    break;                }                //自己处理这个异常                try {                    //字符串转数字                    int num = Integer.parseInt(string);                    //添加进数组中                    list.add(num);                } catch (NumberFormatException e) {                    System.out.println("输入错误,请重新输入或者quit");                             }            }            //遍历集合打印            for (Integer integer : list) {                System.out.println(integer);            }        }    }
阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 津泊湾 南泊湾 泊心湾 圣采泊尚 广州泊雅湾 泊雅湾房价 鸥鹏泊雅湾怎么样 愉景雅苑 诗臻泊 诗臻泊化妆品怎么样 诗泊莱祛斑效果 泊诗 润泊莱 泊蒂化妆品 泊雅诗美容院 泊雅诗美容美体养生馆 泌乳素高原因 泌乳素高的危害 泌乳素高危害 高泌乳素血症 泌乳素正常值 泌乳素高的症状 泌乳素高症状 泌乳素是什么 血清泌乳素 泌乳素高吃什么药 泌乳素低 男性泌乳素 泌乳素偏高 泌乳素高怎么办 泌乳素高 发热 查泌乳素 泌乳素高怎么降低 泌乳素有点高 泌乳素的作用 泌乳素怎么检查 泌乳素偏高的原因 什么是泌乳素高 泌乳素高会怎么样 泌乳素高什么症状 女性泌乳素高