国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C / C++的和Java的異常機制

2019-11-17 05:48:30
字體:
來源:轉載
供稿:網友
   程序總會出現異常的,需要我們去處理。C++和java都有自己異常機制,我們應該遵循著去處理異常。那它們的異常機制有何異同呢?    要注重一點:異常機制處理異常是要付出代價的,即異常處理的代碼比無異常處理的要慢好多倍。JAVA的異常機制    在面向對象的世界里,一切都是對象,JAVA的異常也不例外。API中異常類的“始祖”是 Throwable  類,有 Exception 類和 Error 類直接繼續Throwable  。Error是很嚴重的,是不可拯救的,我們一般是通過繼續Throwable  或Exception 來定義自己的異常類。    先看看API(這里是從1.5摘抄的)里的兩個異常類是怎樣的?
C / C++的和Java的異常機制(圖一)import  java.io.*;
C / C++的和Java的異常機制(圖二)C / C++的和Java的異常機制(圖三)public class Throwable implements Serializable ...{
C / C++的和Java的異常機制(圖四)C / C++的和Java的異常機制(圖五)    /** *//** use serialVersionUID from JDK 1.0.2 for interOperability */
C / C++的和Java的異常機制(圖六)    PRivate static final long serialVersionUID = -3042686055658047285L;
C / C++的和Java的異常機制(圖六)
C / C++的和Java的異常機制(圖四)C / C++的和Java的異常機制(圖五)    /** *//**
C / C++的和Java的異常機制(圖六)     * Native code saves some indication of the stack backtrace in this slot.
C / C++的和Java的異常機制(圖七)     */
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 synchronized Throwable initCause(Throwable cause) ...{
C / C++的和Java的異常機制(圖六)        if (this.cause != this)
C / C++的和Java的異常機制(圖六)            throw new IllegalStateException("Can't overwrite cause");
C / C++的和Java的異常機制(圖六)        if (cause == this)
C / C++的和Java的異常機制(圖六)            throw new IllegalArgumentException("Self-causation not permitted");
C / C++的和Java的異常機制(圖六)        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 synchronized StackTraceElement[] getOurStackTrace() ...{
C / C++的和Java的異常機制(圖六)        // 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 Exception extends Throwable {
    static final long serialVersionUID = -3387516993124229948L;

    public Exception() {
    super();
    }

    public Exception(String message) {
    super(message);
    }

    public Exception(String message, Throwable cause) {
        super(message, cause);
    }

    public Exception(Throwable cause) {
        super(cause);
    }
}
一個簡單例子:
C / C++的和Java的異常機制(圖一)public class MyException extends Exception
C / C++的和Java的異常機制(圖二)C / C++的和Java的異常機制(圖三)...{
C / C++的和Java的異常機制(圖六)MyException(String str)
C / C++的和Java的異常機制(圖四)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 MyException
C / C++的和Java的異常機制(圖四)C / C++的和Java的異常機制(圖五)    ...{
C / C++的和Java的異常機制(圖六)    throw new MyException("f() exception");
C / C++的和Java的異常機制(圖七)    }
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(MyException me)
C / C++的和Java的異常機制(圖四)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中捕捉 Throwable 類,因為其它所有異常類都是其子類,都可匹配。其中 finally塊是程序必然會執行的塊,除非JVM忽然退出了。C++的異常機制    在C的時候,錯誤處理要 setjmp() / longjmp() 通過。而C++里, setjmp() / longjmp() 已經不能用了。C++的異常可以是類,也可以是基本類型(如int)。在標準庫中,也存在exception類。但是,C++并沒有要求我們自定義的異常要繼續某個類。一個簡單例子:
C / C++的和Java的異常機制(圖一)#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 MyException
C / C++的和Java的異常機制(圖二)C / C++的和Java的異常機制(圖三)...{
C / C++的和Java的異常機制(圖六)      const char * const msg;
C / C++的和Java的異常機制(圖六)      public:
C / C++的和Java的異常機制(圖四)C / C++的和Java的異常機制(圖五)             MyException(const char* const _msg=NULL):msg(_msg)...{};
C / C++的和Java的異常機制(圖六)             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 MyException("something bad happened");
C / C++的和Java的異常機制(圖八)}
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(MyException me)
C / C++的和Java的異常機制(圖四)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的異常機制,就作個對比,寫個筆記。
QQread.com 推出游戲功略 http://www.qqread.com/netgame/game/index.Html 魔獸世界 跑跑卡丁車 街頭籃球 水滸Q傳 龍與地下城OL 征服  軒轅劍5 FIFA07 熱血江湖 大唐風云 夢幻西游 武林外傳

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 观塘区| 章丘市| 永宁县| 多伦县| 大石桥市| 吉木萨尔县| 北海市| 六安市| 成安县| 赣州市| 房产| 澄迈县| 保靖县| 蓬安县| 固原市| 北辰区| 庆阳市| 临邑县| 廊坊市| 夏河县| 襄城县| 无为县| 永州市| 高邑县| 若羌县| 临安市| 桃江县| 柞水县| 阿图什市| 中方县| 棋牌| 昂仁县| 株洲县| 宾川县| 阿拉善左旗| 福泉市| 手机| 江陵县| 蒲江县| 巴楚县| 东至县|