日期:2014-05-20  浏览次数:20750 次

java 命令会和刚执行的 javac 命令有关吗?
若在   one.java   中有   Test   类。在two.java   中也有   Test   类。java   Test   是解释哪个类?

demo:

若先   javac   one.java   再   java   Test   。是解释   one   文件中的   Test   类。

若先   javac   two.java   再   java   Test   。是解释   two   文件中的   Test   类。

但   javac   是编译器,把   .java   文件编译成   .class   文件   ;而   java   是解释器,解释的是类,并不是解释   .class   文件。那为什么   java   命令会和刚执行的   javac   命令有关?

------解决方案--------------------
楼主对javac和java的理解稍微有点问题。

java命令是编译没错,它会把.java文件编译成class文件,一个java文件中每个class和interface的定义都会分别转换为一个.class文件。
如一个java文件中包含两个类的定义,A和B,则编译之后会生成A.class和B.class

java命令是解释执行“类”,这个“类”就是指.class文件。比如java Test,实际上会去找Test.class文件,如果找不到就会出错。

如果两个文件中都包含Test类的定义,那么肯定不能编译在同一个文件夹下。想一想,操作系统允许在同一个文件夹下放置两个名都为Test.class的文件吗?
------解决方案--------------------
而 java 是解释器,解释的是类,并不是解释 .class 文件
=======================================================
那解释什么?java就去执行.class,java这个命令不会管你的.java文件的
------解决方案--------------------
不好意思,写错了,应该是:
javac one.java //生成两个文件:one.class Test.class
javac two.java //生成两个文件:two.class Test.class(文件名相同,把上一个覆盖掉了)
java Test //当然执行的是two文件中的Test。

------解决方案--------------------
在java中要产生一个.class文件,如果文件已经存在,则会覆盖掉原文件!

你可以对比 one.java 和 two.java 在 编译以后的Test.java 文件(用 UE看)就会明白,