WEB开发网
开发学院软件开发Java Why Java Sucks and C# Rocks(2):基础类型与面... 阅读

Why Java Sucks and C# Rocks(2):基础类型与面向对象

 2010-05-04 00:00:00 来源:WEB开发网   
核心提示: C#还提供了一些方便开发的特性,例如foreach,Why Java Sucks and C# Rocks(2):基础类型与面向对象(3),using,以及使用params定义可变长数组等等,自然,int类型没有成员,此外,C#还提供了事件(event)及属性(property)两种对象的成员类

C#还提供了一些方便开发的特性,例如foreach,using,以及使用params定义可变长数组等等。此外,C#还提供了事件(event)及属性(property)两种对象的成员类型。属性可以简单理解为带有读写器(也可以只读或只写)的字段。Java语言虽然不包含属性,但很早便形成了一个约定,会将getXyz/setXyz方法作为属性处理,许多开发工具和类库都会以这种方式进行处理。

C#语言的初衷是要成为优越于C++和Java的通用程序设计语言。经过多年的发展,C#在语言设计方面的确遥遥领先于Java语言,这也是我写这一系列文章的事实依据。

Java是个纯面向对象语言吗?

Java在诞生于面向对象理论在业界愈发普及和流行的时期(著名的GoF设计模式一书便出版于1994年),在当时Java声称自己是个“纯面向对象语言”,但事实果真如此吗?我不这么认为,因为有很明显的一点是,Java语言中的基础类型不是对象。

在Java中定义了一系列基础数据类型,例如int,double,boolean等等。这些类型不是对象,它们不包含成员,也不继承于公共基类Object,因此Java并不是一门纯面向对象语言。

不过,其实我关注的并不是“纯面向对象”这个称号,我更关注Java语言在设计时是如何对待这些类型的。从代码上看,这个特点的确造成了诸多不便:

ArrayList list = new ArrayList(); 
list.add(5); // cannot compile 
int i = (int)list.get(0); // cannot compile 
 
int hash = 3.hashCode(); // cannot compile

上面这行代码有三处会编译不通过。ArrayList是个用于保存Object类型对象的容器,可以存放任何类型的对象。不过由于int类型的数值 5不是对象,因此它无法被添加到ArrayList中。同样,在通过get方法获取到一个Object类型的对象后,我们也无法将其转换成int类型。自然,int类型没有成员,因此我们也无法通过它调用定义在Object类型上的hashCode方法。

上一页  1 2 3 4 5 6  下一页

Tags:Why Java Sucks

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接