若在 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 命令有关?

解决方案 »

  1.   

    楼主对javac和java的理解稍微有点问题。java命令是编译没错,它会把.java文件编译成class文件,一个java文件中每个class和interface的定义都会分别转换为一个.class文件。
    如一个java文件中包含两个类的定义,A和B,则编译之后会生成A.class和B.classjava命令是解释执行“类”,这个“类”就是指.class文件。比如java Test,实际上会去找Test.class文件,如果找不到就会出错。如果两个文件中都包含Test类的定义,那么肯定不能编译在同一个文件夹下。想一想,操作系统允许在同一个文件夹下放置两个名都为Test.class的文件吗?
      

  2.   

    而 java 是解释器,解释的是类,并不是解释 .class 文件
    =======================================================
    那解释什么?java就去执行.class,java这个命令不会管你的.java文件的
      

  3.   

    javac one.java //生成两个文件:one.java Test.java
    javac two.java //生成两个文件:two.java Test.java(文件名相同,把上一个覆盖掉了)
    java Test //当然执行的是two文件中的Test。
      

  4.   

    不好意思,写错了,应该是:
    javac one.java //生成两个文件:one.class Test.class
    javac two.java //生成两个文件:two.class Test.class(文件名相同,把上一个覆盖掉了)
    java Test //当然执行的是two文件中的Test。
      

  5.   

    在java中要产生一个.class文件,如果文件已经存在,则会覆盖掉原文件!你可以对比 one.java 和 two.java 在 编译以后的Test.java 文件(用 UE看)就会明白,