若在 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看)就会明白,