zoukankan      html  css  js  c++  java
  • JAVA中的异常

    异常的概念: 程序在运行时,发生了我们没有预测的情况,它阻止了程序按照我们预期的效果执行 

    异常处理的机制 在程序在发生异常以后,还能按照我们预先设定好的逻辑,继续执行后续的代码!!

    package baseexception;
    /**
     * @2018年4月8日
     * @王 鸿
     * @Administrator
     */
    public class BaseAbnormal {
        public static void main(String[] args) {
            System.out.println("1");
            System.out.println("2");
            System.out.println("3");
            System.out.println("4");
            System.out.println(5 / 0);
            System.out.println("6");
            System.out.println("7");
            System.out.println("8");
            System.out.println("9");
            System.out.println("10");
        }
    }

     下面是这个代码的运行结果

    01 Exception in thread "main"                                   //发生异常的线程
    02 java.lang.ArithmeticException                                //发生异常的类型(只是其中的)
    03 / by zero                                     //除0 的异常 异常的原因
    04 at baseexception.BaseAbnormal.main(BaseAbnormal.java:14)                   //异常的抛出点
        baseexception 包名  
       BaseAbnormal 类名
        main  方法
    05 (BaseAbnormal.java:14)                             //异常发生的文件  "14" 表示异常发生的行号

    --------------------------------------------------------------------华丽而高贵的分割线--------------------------------------------------------------------------

    所有异常和错误的父类--Throwable;
    Throwable类是java异常类型的顶级父类,一个对象只有是Throwable类的(直接或者间接)实例,它才是一个异常对象,才能被异常处理机制识别.
    JDK中内建了一些常用的异常类,我们也可以自己定义异常
    根据编译器对异常的处理要求: 异常分为两类:
    1 运行时异常 (RuntimeException) 程序在运行时所产生的异常
    2 受查异常(编译异常)(checked Exception) 在程序编译期间产生的异常

    异常的5个关键字
    try,catch,finally,throw .throws;

    异常处理方式:
    01.try的使用
        try不能单独使用 必须和catch 或者finally中的 其中一个一起使用;
        try中放可能发生问题的代码
        如果我们的try代码块不出现异常,有finally的情况下先执行finally,之后执行finally之后的代码
        如果我们的try代码块出现异常,先去catch中匹配异常如果匹配成功执行对应的catch块.否则执行finally然后程序终止!!!!
    02.catch的使用
        每一个catch代码块都用于捕获并处理一个特定的异常或者是异常的子类
        catch (ArithmeticException ex); 定义了一个异常的类型;
        catch块可以出现多个 但是不能异常类型重复!!!!
        多个catch代码块中异常书写顺序,必须是从小到大. 
        在实际开发中异常尽量要写精确而不是直接使用顶级异常
        我们的异常会从多个代码块中找到一个最先匹配的 ,然后交给这个代码处理
        每个catch代码块中的变量都是独立的,别的代码块访问不了
        如果try中没有异常 所有的catch被忽略
        catch (ArithmeticException | Exception ex) 多个异常声明在一个catch中 这种写法只限于JDK1.7
    03.finally的使用
        无论什么异常finally块都会执行;
        如果try中没有异常,但是有return这时候会先执行finally之后再执行return
        System.exit(0):正常退出
        System.exit(1):非正常退出(一般放在catch块中)
        做一些清理工作,关闭流释放数据库的连接

    2 throw, throws

    001 throws的使用
       语法:方法名称  throws  异常类型1,异常类型2;
       01.thows声明在方法名称之后;
       02.throws可以声明多个异常类型,每个类型之间使用 '逗号' 隔开;
       03.throws声明表示当前方法可以不处理异常,而是由方法的调用者处理;
       04.如果在主函数中使用throws声明异常,则由JVM处理异常!
    002 throw的使用
       语法:throw  new  异常类型([异常提示语句]);
       01.异常类型可以是Exception或者其子类;
       02.一条throw语句只能抛出一个异常;
       03.throw语句只能出现在方法体中
       04.针对于thorw抛出的异常,有两种解决方式
      使用try...catch...finally代码块处理异常
      使用throws声明异常,把异常告诉调用者

     

    -------------------------------------------------------这一块理论有一点多也是异常的重点------------------------------------------------------

                     **异常不光只使用java里写好的也可以咱们自己创建**

    自定义异常

    1.异常类必须是Throwable的子类
    2.定义受查异常,建议继承Exception
    3.定义运行异常,建议继承RuntimeException
    语法
    class 自定义异常类 extend 异常类型

    package exceptionchain;
    
    /**
     * @2018年4月8日
     * @王 鸿
     * @Administrator
     */
    public class CustomerException extends Exception {
        public CustomerException() {
        }
    
        public CustomerException(String message) {
            super(message);
        }
    
    }
    -------------------------------------上面是自己创建的异常---------------------------------
    package exceptionchain;
    
    /**
     * @2018年4月8日
     * @王 鸿
     * @Administrator
     */
    
    /*
     * 
     * test1();抛出自己定义的异常 
     * test2(); 捕获这个异常并包装成运行时异常 继续抛出 main中
     * 
     * 调用test2()尝试捕获test()方法的抛出的异常
     */
    public class ChainTest {
        public static void main(String[] args) {
            ChainTest chainTest = new ChainTest();
            try {
                chainTest.test2();
            } catch (Exception e) {
                e.printStackTrace();
    
            }
    
        }
    
        public void test1() throws CustomerException {
            throw new CustomerException("自己创建的异常");
        }
    
        public void test2() {
            try {
                test1();
            } catch (CustomerException e) {
                // 包装成运行时异常
                RuntimeException runtimeException = new RuntimeException(
                        "自己包装的运行时异常");
                // 通过这个方法把捕获的异常传进去
                runtimeException.initCause(e);
                throw runtimeException;
            }
        }
    }

     

    这样我们就创建了一个属于自己的异常

    ----------------------------------------------------------------------------------------异常的使用原则(个人理解)----------------------------------------------------------------------------------------
    1.异常只能用于非正常情况
    2.为异常提供说明文档
    3.尽可能的避免异常,特别是运行时异常
    4.保持异常的原子性
    5.避免过于庞大的try代码块
    6.在catch中指定具体的异常类型
    7.不要在catch块中忽略捕获的异常

  • 相关阅读:
    require() 源码解读
    那些JS容易忽略的题
    javascript:void(0);与return false
    location.href
    IE CSS Bugs 列表和解决方法
    npm 常用命令
    移动开发不能不知道的事-meta
    Canvas介绍
    用CSS变形创建圆形导航
    一个传统行业互联网系统的架构演化(Week 4)
  • 原文地址:https://www.cnblogs.com/wh1520577322/p/8747285.html
Copyright © 2011-2022 走看看