(轉貼) Java中最值得C++借鉴的特性s (C/C++) (Java)

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();
}

轉貼自 http://www.cppblog.com/sandy/archive/2006/01/25/3018.aspx

posted on 2007-02-17 23:26  真 OO无双  阅读(1038)  评论(1编辑  收藏  举报

导航