经验 167 分贝 0 家园分 372 在线时间: 2 小时 最后登录: 2009-2-21 帖子: 56 精华: 0 注册时间: 2007-11-10 UID: 194779
注册:2007-11-10
发表于 2007-12-2 16:33:00
| 显示全部楼层
用C++ 有十几年了, 自认对C++已经很熟悉了, 很想对C++, Java 做一个深入的对比.
所以需要补一补Java的课, 也算是边学边比吧:
1) Java文件主类名与文件名要相同并区分大小写.C++没有这个限制, 应该源与Java 虚拟机
对于类加载器的约束. 当然也是为了安全起见. unix 上的规则如此, Sun的Java JDK 很多
情况下继承了Sun的一些一贯作风.
2)JDK1.4后不需要设置CLASSPATH , 为何?
3) 编译时-g会选择是否要加调试信息. 默认是有调试信息的,但不是全部. 加上-g会将全部加上
调试信息产生在class类中.
4) 通过在编译时加上-verbose 可以打出编译的整个过程.
5) 通过分析,整个编译过程是:
1)parse. [parsing started HelloWorld.java]
2)loading
[loading D:\j2sdk1.4.2_16\jre\lib\rt.jar(java/lang/Object.class)]
[loading D:\j2sdk1.4.2_16\jre\lib\rt.jar(java/lang/String.class)]
3)checking
[checking HelloWorld]
4)load
[loading D:\j2sdk1.4.2_16\jre\lib\rt.jar(java/lang/System.class)]
[loading D:\j2sdk1.4.2_16\jre\lib\rt.jar(java/io/PrintStream.class)]
[loading D:\j2sdk1.4.2_16\jre\lib\rt.jar(java/io/FilterOutputStream.class)]
[loading D:\j2sdk1.4.2_16\jre\lib\rt.jar(java/io/OutputStream.class)]
5)wrote
[wrote HelloWorld.class]
6) Javap反编译不错, 可以看出class 的类实现.
7) javadoc 指定源文件可以产生相应的help文档很强. 从结构上来看, Java 要优于C++
8) jdb 是一个命令行的调试工具, 类似与unix上的dbx.
9) 如果main 函数不是static的编译没有问题,但是运行会出现异常Exception in thread "main" java.lang.NoSuchMethodError: main
.同样如果不是public则在运行时出:
Main method not public. 如果不是void 而是int.
10)println 相当于print("***\n");
11) 对于Applet 小程序必须显示的说明是从extends Applet 否则运行会失败.可以用appletviewer来看.