Posted on 2006-01-25 11:40
小明 閱讀(4089)
評論(16) 編輯 收藏 引用 所屬分類:
C/C++
1995年出現的Java語言確實是一門偉大的語言,盡管它也不是完美的語言,而C++是一門比較"古老"的預言了,Java中有很多值得C++借鑒的東西。不知道未來的C++ 0x標準出來以后,C++會變成怎樣?
1.強大的反射機制和RTTI特性這個特性是當前流行的J2EE framework的基礎,如Spring,Hibernate,無不利用了Java強大的反射機制。
Java可以在運行期動態創建class,并且invoke某一個方法。
MyClass helper = (MyClass) Class.forName(className).newInstance();
2.內建對多線程的支持和synchronized關鍵字
C++標準本沒有提供比如創建thread的方法,不過現在出現了boost::thread應該是將來的C++標準。Java中有synchronized這個關鍵字,這是一種很簡單,安全的鎖機制。多線程編程很重要,但是也很復雜。希望新的C++ 0x標準能支持。
synchronized void initConfig() {
if (!loaded) {
load();
loaded = true;
}
}
3.匿名類匿名類可以有效的減少類的數目,是一種很有用的語言特性
new Thread(new Runnable() {
public void run() {
downloader.download();
}
}).start();
上面是啟動一個新的thread來執行下載任務
4.final關鍵字final使得更有效的表達設計者不希望被繼承的意圖。Java里面的final不等于C++的const。final用于class前面表示class不希望被繼承,用于成員函數之前表示不希望被覆蓋。這對于類庫的設計是很重要的。畢竟不是每個類都為被繼承做好了準備。
5.構造函數可以互相調用
這個特性使得寫構造函數更加方便
class Test
{
public Test()
{
this(1);
}
public Test(int i)
{
this.i = i;
}
private int i;
}
6.package的概念
package不但有比C++ namespace更加強大避免沖突的功能,而且提供了一種更清晰的源代碼結構。
比如java中
package com.cppblog.io.*;
C++要實現這樣的,必須
namespace com
{
namespace cppblog
{
namespace io
{
}
}
}
7.finally關鍵字
finally使得exception設計更加完備.很遺憾,C++里面只有try catch,雖然可以通過一些方法來work around,但是畢竟不是很方便。
try{
openConnection();
}
catch(ConnectionException e){
e.printStackTrace();
}
finally{
closeConnection();
}