[zt] java中值得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();

最近 看高质量的程序设计中提到反射机制, C#中有这个机制,得深入了解一下.
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;
}

这个问题我也遇到过,要是C++能提供这个功能就更好了.

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();
}
恩,这个在资源释放中非常有作用.


Powered by ScribeFire.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值