(轉貼) Java中最值得C++借鉴的特性s (C/C++) (Java)
1995年出现的Java语言确实是一门伟大的语言,尽管它也不是完美的语言,而C++是一门比较"古老"的预言了,Java中有很多值得C++借鉴的东西。不知道未来的C++ 0x标准出来以后,C++会变成怎样?
1.强大的反射机制和RTTI特性
这个特性是当前流行的J2EE framework的基础,如Spring,Hibernate,无不利用了Java强大的反射机制。
Java可以在运行期动态创建class,并且invoke某一个方法。
2.内建对多线程的支持和synchronized关键字
C++标准本没有提供比如创建thread的方法,不过现在出现了boost::thread应该是将来的C++标准。Java中有synchronized这个关键字,这是一种很简单,安全的锁机制。多线程编程很重要,但是也很复杂。希望新的C++ 0x标准能支持。
3.匿名类
匿名类可以有效的减少类的数目,是一种很有用的语言特性
4.final关键字
final使得更有效的表达设计者不希望被继承的意图。Java里面的final不等于C++的const。final用于class前面表示class不希望被继承,用于成员函数之前表示不希望被覆盖。这对于类库的设计是很重要的。毕竟不是每个类都为被继承做好了准备。
5.构造函数可以互相调用
这个特性使得写构造函数更加方便
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,但是毕竟不是很方便。
轉貼自 http://www.cppblog.com/sandy/archive/2006/01/25/3018.aspx
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;
}
}
if (!loaded) {
load();
loaded = true;
}
}
3.匿名类
匿名类可以有效的减少类的数目,是一种很有用的语言特性
new Thread(new Runnable() {
public void run() {
downloader.download();
}
}).start();
上面是启动一个新的thread来执行下载任务public void run() {
downloader.download();
}
}).start();
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;
}
{
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();
}
openConnection();
}
catch(ConnectionException e){
e.printStackTrace();
}
finally{
closeConnection();
}
轉貼自 http://www.cppblog.com/sandy/archive/2006/01/25/3018.aspx