Posted on 2007-06-08 19:50
停留的風 閱讀(712)
評論(1) 編輯 收藏 所屬分類:
快速前進的Java
染色體 1:純對象導向語言
C# 和 Java 都是純對象導向語言,C++ 非純對象導向語言。
染色體 2:強制型態檢查
C# 和 Java 都強制進行型態檢查,C++ 則較寬松。
染色體 3:宏
C# 和 Java 都不支持宏,C++ 支持宏。
染色體 4:Template
C# 和 Java 都不支持 template,C++ 支持 template。
染色體 5:多重繼承
C# 和 Java 都不支持多重繼承,且都支持 interface,C++ 支持多重繼承。
染色體 6:指針
C# 和 Java 都不支持指針,C++ 支持指針。(不過,C# 允許在 unsafe code 內使用指針)
染色體 7:內存管理
C# 和 Java 都支持垃圾收集。C++ 不支持垃圾收集。
染色體 8:虛擬機器
C# 和 Java 都需要虛擬機器,C++ 不需要虛擬機器。Java 的執行檔是中間碼,叫做 bytecode,透過 Java Runtime Environment(即 JRE)來執行;C# 的執行檔也是中間碼,叫做 managed code,透過 NGWS Runtime 來執行。除了 Java,你也可以用其它程序語言(例如 Ada、Python)來作出 bytecode。除了 C#,你也可以用其它程序語言(例如 Visual Basic、C++)來作出 managed code。
染色體 9:Namespace
C# 和 Java 都支持階層式的 namespace,但 C++ 只支持單層的 namespace。Java 的 namespace 稱為 package,C# 的 namespace 就稱為 namespace。Java 和 C# 都使用「.」當作 namespace 的符號,而 C++ 使用「::」。
染色體 10:Platform-Independent Type
C# 和 Java 都使用 Platform-Independent Type,C++ 的 type 會受到平臺的影響。
染色體 11:使用 Wrapper 包裝基本型態
C# 和 Java 都支持將基本型態包裝成對象,在 Java 叫做 wrapper,在 C# 則是叫做 box。
染色體 12:boolean != integer
C# 和 Java 都不允許把整數當布爾值用,C++ 則允許。
染色體 13:access modifier
C# 和 Java 都支持四種等級的 access modifier,包括 public、protected、private、default/internal;C++ 只支持 public、protected、private。Java 的 default(不寫)指的就是只針對同一個 package 開放,正好就是 C# 的 internal。
染色體 14:變量初始化
C# 和 Java 都規定不可使用未初始化的變量,C++ 則完全沒有這方面的限制。Java 和 C# 的編譯器都會主動幫未初始化的 field/data member 設定初始值,C++ 則不然。
染色體 15:轉型
C# 和 Java 都規定基本型態和 reference 型態不能互轉。
染色體 16:數組邊界檢查
C# 和 Java 都會主動進行數組邊界檢查,C++ 則不然
染色體 17:呼叫 Native Code
C# 和 Java 都支持呼叫 native code。Java 透過 JNI(Java Native Interface);C# 透過 PInvoke(Platform Invocation Service)
染色體 18:Metadata
C# 和 Java 的中間碼都包含有類別的 metadata,而 C 語言則是獨立在 header file。
染色體 19:中間碼指令
C# 的 IL 中間碼指令和 Java 的 bytecode 指令非常類似,有的甚至一樣。
染色體 20:例外處理
C# 和 Java 都支持 try/catch/finally,但 C++ 只支持 try/catch。