第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) 编辑 收藏
Feedback
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2008-11-03 08:33 |
大哥,这些争论已经过时啦。
现在使用C++的领域越来越少啦。
2008-11-03 08:52 |
写底层程序, 除了C/C++,别无他法。
JAVA太高深,不会。
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2008-11-03 16:40 |
“…… 在Java中,所有函数都是某些类的成员函数 ……”
我觉得这是很没必要的,用一个静态成员变量来行驶全局变量的做法除了多写几个字我实在是看不出有其他什么好处。
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2008-11-04 11:24 |
鹏哥开博了!
2008-11-04 16:52 |
哟, 被你看到了。
其实半年前就申请到了 …… 一直没时间弄 ……
现在终于闲一点了 ……
歪酷那个也不想搞了 …… 这个更C++味道一点 嘿嘿
2008-11-07 03:07 |
大哥,这些争论已经过时啦。
现在使用C++的领域越来越少啦。
---------------------------
可能我叫你大哥比较合适 -_-
1. 争论过时吗?
可以说过时, 原本是来自半年前的一件事。
一个学长给我说有一本很有趣的Java书, 上面每写一段就有一个“C++注释”来鄙视C++。然后他给我翻看了几部分,恰好又是对C++评价很不公的几部分。
半年后, 仔细看了看这本书的“C++注释”, 发现大部分是比较中肯的, 小部分存在对C++的不公正评价。 所以记下来。
2. C++的应用领域
确实, 越来越少。
哪又怎样呢? 只要C++没有退出历史舞台(我们有生之年可以看到哪天吗?), 这文章就有必要放在这里。
我是打算写一个系列, 把我认为对C++的误解一一纠正。
写它的目的, 稍后我会写到另外一篇文章中。
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2008-11-27 12:01 |
我们现在好多软件都是c++跟jave一起组合开发的
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2008-12-03 10:19 |
《JAVA2核心技术》
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2008-12-05 11:34 |
哈哈
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2008-12-15 13:49 |
sdgre
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2008-12-23 14:02 |
好的 啊
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-01-06 13:28 |
yumhjio
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-02-03 09:18 |
sfdsf
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-02-26 14:29 |
留个脚印
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-03-03 15:00 |
c++这种真是学问
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-03-03 15:00 |
学习一下,
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-03-03 15:01 |
资源共享,我喜欢,继续支持
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-03-03 15:01 |
机械自动化如此强大,,
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-03-04 13:22 |
路过留下我的足迹,-_-
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-04-14 15:25 |
严重反对一楼观点
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-07-29 09:25 |
高手不凡啊,,真是
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-10-15 10:18 |
增长见识.
# re: 为C++平反!—— 来自《JAVA2核心技术》的误会
2009-10-15 10:19 |
如此的想法,不错的.