(轉貼) 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

你可能感兴趣的:((轉貼) Java中最值得C++借鉴的特性s (C/C++) (Java))