敬业的IT人 >> 编程开发 >> C/C++ >> C / C++的和Java的异常机制

C / C++的和Java的异常机制

敬业的IT人 互联网 佚名 2008-1-3 20:33:25
   程序总会出现异常的,需要我们去处理。C++和JAVA都有自己异常机制,我们应该遵循着去处理异常。那它们的异常机制有何异同呢?

    要注意一点:异常机制处理异常是要付出代价的,即异常处理的代码比无异常处理的要慢好多倍。

import  java.io.*;
C / C++的和Java的异常机制(图二)C / C++的和Java的异常机制(图三)public class Throwable implements Serializable ...{
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    /** *//** use serialVersiborder="0" align="top" alt="C / C++的和Java的异常机制(图六)" width="11" height="16" />    private static final lborder="0" align="top" alt="C / C++的和Java的异常机制(图六)" width="11" height="16" />
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    /** *//**
C / C++的和Java的异常机制(图六)     * Native code saves some indicatiborder="0" align="top" alt="C / C++的和Java的异常机制(图七)" width="11" height="16" />     */
C / C++的和Java的异常机制(图六)    private transient Object backtrace; 
C / C++的和Java的异常机制(图六)    private String detailMessage;
C / C++的和Java的异常机制(图六)    private Throwable cause = this;
C / C++的和Java的异常机制(图六)    private StackTraceElement[] stackTrace;
C / C++的和Java的异常机制(图六)    
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    public Throwable() ...{
C / C++的和Java的异常机制(图六)        fillInStackTrace();
C / C++的和Java的异常机制(图七)    }
C / C++的和Java的异常机制(图六)
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    public Throwable(String message) ...{
C / C++的和Java的异常机制(图六)        fillInStackTrace();
C / C++的和Java的异常机制(图六)        detailMessage = message;
C / C++的和Java的异常机制(图七)    }
C / C++的和Java的异常机制(图六)
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    public Throwable(String message, Throwable cause) ...{
C / C++的和Java的异常机制(图六)        fillInStackTrace();
C / C++的和Java的异常机制(图六)        detailMessage = message;
C / C++的和Java的异常机制(图六)        this.cause = cause;
C / C++的和Java的异常机制(图七)    }
C / C++的和Java的异常机制(图六)
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    public String getLocalizedMessage() ...{
C / C++的和Java的异常机制(图六)        return getMessage();
C / C++的和Java的异常机制(图七)    }
C / C++的和Java的异常机制(图六)
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    public Throwable getCause() ...{
C / C++的和Java的异常机制(图六)        return (cause==this ? null : cause);
C / C++的和Java的异常机制(图七)    }
C / C++的和Java的异常机制(图六)
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    public synchrborder="0" align="top" alt="C / C++的和Java的异常机制(图六)" width="11" height="16" />        if (this.cause != this)
C / C++的和Java的异常机制(图六)            throw new IllegalStateExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图六)" width="11" height="16" />        if (cause == this)
C / C++的和Java的异常机制(图六)            throw new IllegalArgumentExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图六)" width="11" height="16" />        this.cause = cause;
C / C++的和Java的异常机制(图六)        return this;
C / C++的和Java的异常机制(图七)    }
C / C++的和Java的异常机制(图六)
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    public String toString() ...{
C / C++的和Java的异常机制(图六)        String s = getClass().getName();
C / C++的和Java的异常机制(图六)        String message = getLocalizedMessage();
C / C++的和Java的异常机制(图六)        return (message != null) ? (s + ": " + message) : s;
C / C++的和Java的异常机制(图七)    }
C / C++的和Java的异常机制(图六)
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    private synchrborder="0" align="top" alt="C / C++的和Java的异常机制(图六)" width="11" height="16" />        // Initialize stack trace if this is the first call to this method
C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)        if (stackTrace == null) ...{
C / C++的和Java的异常机制(图六)            int depth = getStackTraceDepth();
C / C++的和Java的异常机制(图六)            stackTrace = new StackTraceElement[depth];
C / C++的和Java的异常机制(图六)            for (int i=0; i < depth; i++)
C / C++的和Java的异常机制(图六)                stackTrace[i] = getStackTraceElement(i);
C / C++的和Java的异常机制(图七)        }
C / C++的和Java的异常机制(图六)        return stackTrace;
C / C++的和Java的异常机制(图七)    }
C / C++的和Java的异常机制(图六)//......省略了一些
C / C++的和Java的异常机制(图八)}
C / C++的和Java的异常机制(图一)

注意一点:异常类是可串行化的。

public class Exceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图一)" width="11" height="16" />
    ·C / C++的和Java的异常机制(图三)...{
    C / C++的和Java的异常机制(图六)MyExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图四)" width="11" height="16" />C / C++的和Java的异常机制(图五)    ...{
    C / C++的和Java的异常机制(图六)    super(str);
    C / C++的和Java的异常机制(图七)    }
    C / C++的和Java的异常机制(图八)}
    C / C++的和Java的异常机制(图一)
    C / C++的和Java的异常机制(图一)public  class MyTest
    C / C++的和Java的异常机制(图二)C / C++的和Java的异常机制(图三)...{
    C / C++的和Java的异常机制(图六)public void f()throws MyExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图四)" width="11" height="16" />C / C++的和Java的异常机制(图五)    ...{
    C / C++的和Java的异常机制(图六)    throw new MyExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图七)" width="11" height="16" />    }
    C / C++的和Java的异常机制(图八)}
    C / C++的和Java的异常机制(图一)public class Main
    C / C++的和Java的异常机制(图二)C / C++的和Java的异常机制(图三)...{
    C / C++的和Java的异常机制(图六)    public static void main(String[]args)
    C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    ...{
    C / C++的和Java的异常机制(图六)        try
    C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)        ...{
    C / C++的和Java的异常机制(图六)            new MyTest().f();
    C / C++的和Java的异常机制(图七)        }catch(MyExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图四)" width="11" height="16" />C / C++的和Java的异常机制(图五)        ...{
    C / C++的和Java的异常机制(图六)            System.out.println(me);
    C / C++的和Java的异常机制(图七)        }finally
    C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)        ...{System.out.println("finally");
    C / C++的和Java的异常机制(图七)        }
    C / C++的和Java的异常机制(图七)    }
    C / C++的和Java的异常机制(图八)}

        如果可能发生多种异常时,可用多个catch语句捕捉不同类型的异常,从第一个catch开始匹配异常,如果异常是该类或该类的子类,则匹配。如果要匹配所有的异常,则在catch中捕捉 #include<iostream>
    C / C++的和Java的异常机制(图一)using namespace std;
    C / C++的和Java的异常机制(图一)
    C / C++的和Java的异常机制(图一)#ifndef NULL
    C / C++的和Java的异常机制(图一)#define NULL 0
    C / C++的和Java的异常机制(图一)#endif
    C / C++的和Java的异常机制(图一)class MyExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图二)" width="11" height="16" />C / C++的和Java的异常机制(图三)...{
    C / C++的和Java的异常机制(图六)      cborder="0" align="top" alt="C / C++的和Java的异常机制(图六)" width="11" height="16" />      public:
    C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)             MyExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图六)" width="11" height="16" />             void print()
    C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)             ...{
    C / C++的和Java的异常机制(图六)                  cout<<msg<<endl;
    C / C++的和Java的异常机制(图七)             }
    C / C++的和Java的异常机制(图八)};
    C / C++的和Java的异常机制(图一)void f()
    C / C++的和Java的异常机制(图二)C / C++的和Java的异常机制(图三)...{
    C / C++的和Java的异常机制(图六)     throw MyExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图八)" width="11" height="16" />}
    C / C++的和Java的异常机制(图一)
    C / C++的和Java的异常机制(图一)int main()
    C / C++的和Java的异常机制(图二)C / C++的和Java的异常机制(图三)...{
    C / C++的和Java的异常机制(图六)    try
    C / C++的和Java的异常机制(图四)C / C++的和Java的异常机制(图五)    ...{
    C / C++的和Java的异常机制(图六)    f();
    C / C++的和Java的异常机制(图七)    }catch(MyExceptiborder="0" align="top" alt="C / C++的和Java的异常机制(图四)" width="11" height="16" />C / C++的和Java的异常机制(图五)    ...{
    C / C++的和Java的异常机制(图六)    me.print();
    C / C++的和Java的异常机制(图七)    }
    C / C++的和Java的异常机制(图六)  system("pause");
    C / C++的和Java的异常机制(图六)  return 0;
    C / C++的和Java的异常机制(图八)}

        C++的异常捕捉匹配和JAVA的基本相同,只是C++没有 finally 块。要捕捉所有异常的方法是用 catch(...) 语句。

        以上所述都只是JAVA和C++的异常机制的皮毛。对JAVA的异常,觉得自己理解得还可以,懂得什么是捕捉,什么是抛出异常、传播异常和包装异常等。但是对C++的异常,可以说是刚刚接触,刚才看了 Thinking in C++  异常处理的一章。想起JAVA的异常机制,就作个对比,写个笔记。

粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com