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,我们也可以自己加的。

    异常类族

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

  • 相关阅读:
    从Mono 4.0观C# 6.0部分新特性
    (译文)Python中的staticmethod与classmethod
    ubuntu中mysql中文乱码及用python3.x调用
    tornado学习 TCPClient 实现聊天功能
    tornado学习 TCPServer 实现聊天功能
    java基础知识3
    java基础知识5
    JSTL常用标签6
    Java基础知识2
    java基础知识4
  • 原文地址:https://www.cnblogs.com/deliver/p/4645334.html
Copyright © 2011-2022 走看看