现在的位置: 首页 > 综合 > 正文

从C++角度看Java

2013年06月09日 ⁄ 综合 ⁄ 共 3047字 ⁄ 字号 评论关闭
  最近感觉Java技术如日中天,招聘职位非常之多,而C++却相对黯然,身为C++的铁杆玩家的我也不得不心动去了解下Java,于是有了这篇文章,我暂时没打算深入学习Java,我仅仅是花了不到一天的时间阅读了一下Java的教程《Java2核心技术:卷I》,然后编译了几个小小例程,所以下面所描述的肯定有不妥之处,而我也只是站在我的角度去思考的,希望在行者通过留言来给出适当见解,谢谢!

 
1、Java是一种语言,也算是一种平台。
2、当前JAVA版本是2.0,从名字J2EE,J2ME,J2SE等都看得出来,其1.0版本已经过时。
3、微软的J++和Java有几乎一致的语法,但却使用不同的虚拟机,所以不算Java,况且J++已经被微软抛弃,不用再研究了。
4、Java语法大量借鉴了C++,它看起来像C++,主要不同可以归纳为:Java牺牲了C++部分强大的功能和灵活性来换取安全性和可移植性。下面很多地方将对此进行描述。
5、Java没有指针。
6、Java的字符数组不能等同于字符串,它有专门的字符串类。
7、Java的学习难度可以这样描述:从C++过来觉得它简单,而从VB过来觉得它困难。
8、JavaScript是网景公司而不是Sun公司的技术,除了名字像Java和语法类似之外,就没有什么联系了。
9、Java是解释执行的,理论上调试起来很快,但事实上对比VB不知道慢了多少。
10、在某些平台下Java能直接编译为机器码而不是中间的字节码来提高其运行速度,这样的提高无疑牺牲了其可移植性,真可谓鱼和熊掌不可兼得。它借助的编译方式叫JIT,但事实上即使这样做,速度还是很慢。
11、能运行在网页上的Java程序叫JavaApplet,需要Java Plug-in的支持,JavaApplet之所以不能广泛流行主要原因是其块头可能比较大,下载得很慢,对网页浏览有影响。
12、Java最早的设计初衷是:应用于嵌入开发领域的,一种能适用于各种平台,紧凑而小巧的语言工具。明显现在的Java和其初衷相迥异,既不紧凑又不小巧。
13、每个厂商都希望Java能成为各种平台上的统一语言,至少有这种倾向,但有一个厂商例外。(哪个厂商?那还用说?)
14、J2SE是Java2标准版最新最全的开发包。
15、Java号称纯面向对象编程,连程序入口的main函数(方法)都封装在类中,但我认为无论怎么个面向对象法,其方法的实现其实还是靠过程的,纯面向对象的说法没什么意义。
16、Java和C++一样,对大小写敏感。
17、Java和C++一样,使用强类型,各种变量,对象都得先定义。
18、Java没有统一的IDE,其最强有力的编辑工具就是文本编辑器,eclipse和NetBean也很流行。其实C++也没有统一的IDE,但Windows环境下基本都用VC++吧,谁还用C++ Builder?
19、命令行方式下:javac是用来编译Java程序的命令,java是用来运行Java程序的命令。.java是Java源程序的扩展名,.class是生成的字节码。
20、Java只有八种基本类型int、short、long、byte、float、double、char和boolean,其它类型都是类。
21、不像C语言那样,由于具体平台实现的不一致,int的长度可能不同,Java的int严格是32位。为安全性和可移植性都提供了保障,这点不错。
22、关键字final相当于C++的const,但并不完全等同,例如带有final前缀的类表示它不可被继承,当然,方法也可以final。
23、boolean的值只能是true和false,别指望拿它来和别的类型比较或者给它赋别的类型的值。强!这样就避免了C++经常出现的歧义。
24、Java支持++”“--运算符,但不推荐使用,因为容易出错。
25、Java虽然没有字符数组,却有String类,其使用上类似VB的String,可以用+号来连接数字,但令人纳闷的是竟然不能用==来比较两个String是否相等,从这点显露出Java并非严格一致,语法上称不上完美,甚至给人感觉并没有想象中的严格。
26、和C++不用,Java不用(也不能)手工动态分配内存空间,释放亦然,所以不用担心像C++那样由于编程疏忽,导致的内存泄露。
27、由于太过面向对象Java连控制输出格式都要使用不同的系统类及方法,对于记性不好的人是个严峻的挑战。
28、Java不允许嵌套块内定义与块外重名的变量,又一点比C++更为严格的体现。
29、Java的浮点数和别的语言一样,都是不精确的,最好别用==!=对其进行比较运算。
30、Java废除了一向争议颇大的goto语句,至于如何直接跳出多重循环,Java提供了另一种新的机制:循环体开头定义标签,用break <标签名>来代替break,即可跳出这个循环体。实际上标签可应用于任何块的开头,块中使用break <标签名>都可以直接跳出这个块。这个功能可以看作goto的弱化版本,挺不错。
31、Java不允许重载运算符。
32、Java没有#include,它的编译器会根据使用的类名自动去搜索源文件,嗯,比C++更简单易用了,但这个特性限制了文件的命名,也是很有两面性的。
33、Java需要记忆的内容比C++还多,无穷无尽的类使人晕头转向。
34、Java中所有的类的方法的定义都在类内部,这样总体来看可能结构更清晰,但是否意味着一个类的声明+定义会很长?
35、Java程序中的对象变量行为更偏向于C++的对象指针变量,而不是其它。这个特性对习惯了C++的程序员来说不太妙,经常会搞错。
36、Java的import和C++的#import没有任何共同点,它更偏向于C++的using namespace
37、Java使用关键字extend取代C++的:表示继承,public继承,Java没有protected和private继承,其实,C++的protected继承和private继承我从来没用过,也从来没见别人用过,Java将其抛弃是有道理的。
38、Java没有模板。
39、Java使用关键字implements来表示类对接口的实现。
40、对一个VC++的程序员来说,用Java写出的GUI无论从外观还是执行速度上都不敢恭维。但一次编写,到处运行的口号实在吸引人。
41、我认为用Java编写GUI的难度要小于Win32 API,大于MFC,大于大于VB及Delphi这种快速开发工具。
42、JavaApplet即使作为局域网BS程序的实现方法,对比微软的ActiveX技术也没有明显优势,当然,我指的是Windows平台下,所以目前使用少之又少。另外:我认为Applet这个设计思想还是相当不错的,它最大优点可能在于安全,但对比它,安全漏洞百出的ActiveX却大行其道,可见胜利并不总是属于优秀者。
43、剩下的问题就是记住大量的包和类,与日俱增的类……用我上家公司的头的一句话:感觉做C++像在做技术,而做Java像在用别人的产品。
 
在我发表这篇文章时候,我似乎又觉得C++需要记忆的东西其实也不少,C++需要使用的类库很多,而且调用非常复杂,如果做过DirectX开发或者驱动程序开发就能够理解这点,清一色的COM接口,一旦出错还难以捕捉,要是没有SDK,根本没法进行下去……

抱歉!评论已关闭.