小明思考

高性能服务器端计算
posts - 70, comments - 428, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Java中最值得C++借鉴的特性s

Posted on 2006-01-25 11:40 小明 阅读(4056) 评论(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();
}



Feedback

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-01-26 11:31 by Becky
终于写了一点偶能看得懂的文章了。

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-01-27 11:17 by cyt
想法是好,但太不了解C++了。

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-01-27 13:33 by 思春贴调查员(Khan)
c++中也有匿名对象吧,只是由于匿名对象通常产生在栈中,很难保证被安全释放
早些年也用java做过东西

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-01-27 14:09 by huangyi
强大的反射机制 应该不会有 需要运行时的标准 制定标准估计太复杂 毕竟c++不是java 不过rtti肯定会有所加强

内建对多线程的支持和synchronized关键字 同意

匿名类 匿名函数这些东西 也同意 虽然不认为很有必要 应用性强的代码可以用python等脚本配合

final关键字 同意

构造函数可以互相调用 貌似有了吧

package的概念 我觉得是对源代码结构的限制 不喜欢

finally关键字 同意

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-02-09 12:08 by mis98zb
不能
namespace A::B::C::D{
.
.
.
}
让人觉得很不爽!!!!!!!!

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-02-11 16:36 by 3×7=51
union Test
{
  struct
  {
    short low;
    short high;
  };
  int content;
};

里面的struct即为匿名类,不过和java的匿名类不是一个东西。怎么说了各有所长。其实.net里面可以指定结构成员layout的的特性也蛮不错的,我特喜欢,不过最近很久没玩.net了。

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-02-17 16:31 by 晓晓
有朋友能告诉我在MFC中用socket的具体方法吗?

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-03-04 20:25 by hsen
C++中不能被继承可以这样写,

class T{
private:
T(){}
public:
virtual ~(){}
T* Create(){return new T;}
}

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-03-28 22:36 by redriver
C++中也有finally一样的特性不过要通过一些代码来实现而已。
我认为c++是一个基础,而java看起来更象一个高阶的接口。

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-05-01 16:35 by 含笑半步癫
第一条c++要是不伤筋动骨,面目全非的话,估计是很难。

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-05-08 16:10 by x
另外C++构造函数互相调用是可以的 对rtti也提供了有限的支持 比如typeid type_info关键字

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-05-15 22:03 by ray
强大的反射机制和RTTI特性,C++也可以实现,不过是需要自己实现一个基础类而已。很多脚本引擎都实现了这一点。虽然实现方法不一样,不过感觉目的和效果是一样的

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-06-27 17:13 by etppc
c++ 要走模板编程这条路,在编译期静态解决

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2006-08-09 10:49 by 四海
有道理

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2007-09-01 23:23 by 蚂蚁终结者
有一些道理
不过最后一条我个人认为是因为Java没有C++中的析构函数才有了finally
C++有析构函数还要finally干什么?

# re: Java中最值得C++借鉴的特性s  回复  更多评论   

2009-08-17 10:02 by Meteor.Z
Java 里面最让 C++ 不能借鉴的东西 : 稀里糊涂的就这么好了。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理