zoukankan      html  css  js  c++  java
  • 异常使用原理--异常的正确打开方式

           今天在编写项目时突然明白异常的作用,于是就写下了这一篇。

           异常是一个面向对象,或者说代码结构上的概念。下面用java示例,但异常的理念在各种语言中都是通用的。

    异常语法总结

    具体的语法就不再细说了,异常主要有以下的几部分语法:

    1 try-catch-finally的语法结构

    2理解异常的抛出过程(栈展开)

    3 throw new excepttion(""),自主抛出异常。利用这一点可以有,异常重新抛出

    try{

    ...

    }catch(Exception e){

    throw new excepttion("");

    }

    4 抛出异常的函数声明

    private String checkState() throws Exception{}

    异常的作用

           异常是用来干什么的?非常定性的说法是,“异常是用于处理错误”。笔者曾经非常天真的认为,比如当输入的参数不合理时,异常就会做一些处理,来修复这种不合理。也没几个人像我这么天真了~~~实际上异常就是用来“提示错误”的。

           回想一下我们刚编程时提示错误的方法:

    public class Test{
    
        public void process(String param1, String param2, String param3){
    
            String result="";
    
            result=process1(param1);
    
            result=process2(param2);
    
            result=process3(param3);
    
            //把处理结果写入到日志
    
            Log.write(result);
    
           
    
        }
    
        private String process1(String param1){
    
            if(param1==null) return "param1 is not right";
    
            String result=process11(param1);
    
        }
    
        private String process11(String param1){
    
            if(param1.indexOf("wwww")<0) return "param1 don't have www";
    
            return "";
    
        }
    
        private String process2(String param2){
    
            if(param2==null) return "param2 is not right";
    
            return "";
    
        }
    
        private String process3(String param3){
    
            if(param3==null) return "param3 is not right";
    
            return "";
    
        }
    
    }

    这里有几个问题:

    1使用了返回值存放错误提示,当函数本来就需要返回值时行不通

    2当类里面层级结构更复杂(比如说上面的process11),有4,5层调用时,这种层层传递的错误提示比较难维护。

    3上面并没有保证出第一个问题时就停止执行,而且报告第一个错误。如果要实现这一点就要写很多if语句,在层次复杂时更难维护。

    用了异常可以这样写:

    public class Test{
    
        public void process(String param1, String param2, String param3){
    
            String result="";
    
            try{
    
                _process(param1,param2,param3);
    
            }
    
            catch(Exception e){
    
                result=e.getMessage();
    
            }
    
            //把处理结果写入到日志
    
            Log.write(result);
    
        }
    
        private void _process(String param1, String param2, String param3) throws Exception{
    
            process1(param1);
    
            process2(param2);
    
            process3(param3);
    
        }
    
        private void process1(String param1) throws Exception{ 
    
            if(param1==null) throw new Exception("param1 is not right");
    
        }
    
        private void process11(String param1) throws Exception{
    
            if(param1.indexOf("wwww")<0) throw new Exception("param1 don't have www");
    
        }
    
        private void process2(String param2) throws Exception{
    
            if(param2==null) throw new Exception("param2 is not right");
    
        }
    
        private void process3(String param3) throws Exception{
    
            if(param3==null) throw new Exception("param3 is not right");
    
        }
    
    }

    怎么处理异常

          处理异常就是try,catch住异常,之后处理它。

          异常的处理不是解决错误,而是错误提示或错误汇报,可以有以下的处理方式:

          1提示到专门的用户界面,比如console,或者网页中的错误提示页

          2写入日志

          3完全不处理,忽视异常,任由系统down掉

          4打印异常栈,供调试。

          等等

    什么时候处理异常

          软件系统中类层次那么复杂,什么时候处理异常呢?

          如果是封装类给别人用,那就不用处理异常;

          一般在界面层才处理异常,但具体的这条界线怎么界定,还是要做了项目后才有体验。

    异常不是异类

          异常不是异类,不要恐惧异常。异常不光是给程序员调试用的,程序员不需要保证软件在具体执行时没有异常。相反地,应该用好异常来完成错误的提示和汇报。

    运行时异常和非运行时异常

          在函数中有异常上名的异常叫非运行时异常。

          实际运行中出现的问题,如空对象调用,除以0等,不加函数异常声明eclipse不会提示错误的,叫做运行时异常。

          我提到这一点是为了说明,即使eclipse不叫我们加try-catch,我们也可以自己加的。

    异常类族

          编写一组类的时候,常常也要附带一组异常。因为没有实际操作过,所以还不太清楚。

  • 相关阅读:
    Android中Context具体解释 ---- 你所不知道的Context
    JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明
    matplotlib 可视化 —— 定制 matplotlib
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    指数函数的研究
    指数函数的研究
    指数分布的研究
  • 原文地址:https://www.cnblogs.com/deliver/p/4645334.html
Copyright © 2011-2022 走看看