posts - 9,  comments - 142,  trackbacks - 0
公告
<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

留言簿(3)

随笔档案

文章档案

相册

搜索

最新评论

阅读排行榜

评论排行榜

第1章 Java简介

1.1 Java作为编程语言

Java“白皮书”的定义

可移植的

“不像C和C++,在Java语言规范中没有“与具体实现有关”之类的描述 ……”

—— 与具体实现有关的内容Java能逃避吗? 不能,只是将其推迟。有可能隐藏在JVM的规范中,或者更低的层次下。



高效率的

—— 完全扯谈!
为什么这部分作者不加一个“C++注释”? 因为他不敢。
难道要他诚实的加上 “C++注释: Java程序的运行效率通常只有C++程序的1/5到1/20”?




第三章 Java基本编程结构
3.1一个非常简单的Java程序
C++注释:“…… 在Java中,所有函数都是某些类的成员函数 ……” (p35)


—— Java一切都是Object的思想真的正确?
使用Java写下一个
class Help {
public static void Method1() {}
public static void Method2() {}
public static ...
} 憋屈不?

Math.abs(-1212); Math.max(326,86); 憋屈不?!

不是所有操作都可以区分始动被动
世间万物并不都是OO!
编程范式也不止OO!
Java要坚持OO, 为什么除了Integer还要有int?为什么又要加一个玩具似的generic programming?
Java不坚持OO, 为什么不加入plain function?



C++注释:在C++中,从形式上区分修改对象的转化操作和只访问对象的访问操作是非常重要的。后者需倍说明为const操作。这在Java中是不需要的。 (p75)

——这句话可以换个说法: …… 这在Java中是不被支持的。
不了解const重要含义的同学可以参考 《C++编程规范》 15条, 积极使用const
曾问过室友一个问题: Java没有const, 并且传入的都是引用, 也就是指针,我怎么知道调用的函数是否会修改我的参数?
答曰: 复制一份副本再传递。
我不想多说什么了~~


C++注释: …… 在C++里,“静态”一词没有意义 …… (p86)

——是翻译的错误吗?
语言中的词汇经过发展后, 拥有多个词意的例子太多,  他们是不是全都没有意义?!


C++注释:……然后,没有办法阻止派生类覆盖成员函数。在C++中,可以编写出不能再被派生的类,但这需要很难的技巧,并且这样做也没什么道理可讲。(p107)

——大哥, 你终于说到关键了…… 是的,C++没有final方法 ……
编写不能被派生的类,难,不是初学者能干的事对不对? 但同样的,Java初学者能体会final的价值么?
并且,你自己也说了,“这样做也没什么道理可讲” ……
合格的C++程序员更了解哪些类可以被继承, 哪些方法可以被覆盖。


C++注释:Java和C++的异常机制是相似的。……(p114)

——这里没有什么误会, 只是隐约记得有本什么Java的经典书籍里说, C++没有异常机制 ……
先记下来, 等翻到那书了, 再去抨击那个没责任心的作者。

C++注释:C++里没有原始根类,也不需要。因为模板适合于通用编程。但Java里没有模板,因此必须用公共祖先类完成通用编程。(p122)

——公道话, 难得难得 ^_^

C++注释: …… C++的type_info只能给出类名字符串,而不能创建此类型的新对象 (p125) 

——如果你了解C++的设计理念 —— 最小的运行时支持, 就知道他为什么不存在JVM以及那套动态加载机制。
C++程序员可以加入, 并且做得更好。 见Loki::Factroy。

更好的含义可以用这个注释上的一行代码加以说明:
Manager m = (Manager)Class.forName(s).newInstance();
注意这个转型, Java的动态加载机制得到的是Object, 通常都需要向下转型。
这个调用失败有三种可能:
1. 内存不足、 构造失败、 或者别的原因
2. 不存在s 表示的类。
3. s表示的类存在, 但是不是Manager的子类。
C++可以在编译时解决第3种错误, Java的这种加载机制不能。

从这里也可以看出, Java吹嘘的“更容易写出无错代码”并不能在所有方面能站得住脚。
它将一部分原本应该在编译时检查的错误,留到了运行时。

注释:…… (p288)
C++                                  1.53秒
Java(JDK no JIT) 59.93秒
Java(Caf(JIT))    5.97秒
VB4                               65.69秒


——显然的事。 Java的设计理念决定了其运行效率是无法和C++相比的。
Java的设计理念部分有其道理, 由此付出代价也许是值得的。 并不是系统所有部分都是效率瓶颈, 都需要用C++做。
但是, 任何“Java运行效率可超越C++”的观点都是非常滑稽的 ^_^
说这种话的人, 要么别有居心, 要么愚不可及。


C++注释:Java的枚举与C++标准模板库中的迭代类基本相同,或者更准确地说,类似于前向迭代。 …… (p297)

——唔 …… Java如何quick sort?


栈类是从向量派生的。从概念上看,这有点令人难以置信。 (p318)

——Java类库的设计丑闻……  据说已经改掉……

C++注释:C++与Java的异常处理有着根本的差别。Java没有构造函数;所以没有像C++中那样的退栈工作。即Java程序员必须手工回收资源的代码放在finally块中。当然,由于Java进行自动垃圾回收,因此没有多少资源需要被手工回收。 (p336)

——怀疑这里是印刷错误, 应该是Java没有析构函数
因为没有 栈变量+析构函数+退栈工作=RAII , 伟大的Java,有垃圾回收的Java,更容易写出无错代码的Java, 也不得不做点手工活^_^ 不得不引入finally

真的没有多少资源需要被手工回收吗? 有没写过嵌套try catch finally的Java程序员吗? 真的没有吗?
为了减少嵌套, 而采用单入口单出口的风格, 已经将异常的巨大好处抛弃得淋漓尽致, 同时还抛弃了支持该风格的goto ……
矛盾的Java ……

posted on 2008-11-03 05:33 OwnWaterloo 阅读(3067) 评论(29)  编辑 收藏
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]