服务于区块链开拓者

www.zhidnet.com

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于java中一次编译多个源文件时的编译顺序的问题

2006-11-16 23:35
提问者: 咏春新手 | 浏览次数:3572次|检举
为了节省回答者的时间我先把问题提出来,再针对问题案例作详细说明。如果能不用看问题案例就回答出来当然省时。我的问题是java里面,用命令行提示符环境编译源文件的时候,加上*通配符,
如javac -d .Test*.java的形式,这种情况下编译器将选择怎样的顺序编译文件名里含有Test字段的多个源文件?是不是从Test开始?我已经试验过了,结果是不一定。希望回答者针对自己的答案给我拿出来让我信服的证据,有理想答案的话我会追加可观的积分,希望各路英雄小驻帮忙,谢了。

案例源文件如下:
程序清单1Test.java

package org.it315;
import org.it315.example.*;
public class Test
{
 public static void main(String [] args)
 {
  new TestPackage().print();
 }
}
程序清单2TestPackage.java

package org.it315.example;
public class TestPackage
{
 public void print()
 {
  System.out.println("the program is demostrating how to using package!");
 }
}

程序源文件来自于张孝祥的java就业培训教程。不过原书源码的类名是反过来的,我为了求证问题把类名掉换了。问题如下:以上是2个源文件,用javac -d . Test*.java命令编译。书中介绍在命令中加上*可以一次编译多个文件,其实不过是通过*通配符实现的编译文件名中带“Test”的所有源文件。可是大家一看就知道上面的2段源码其实是一个整体,Test有调用TestPackage一个方法。我在命令行提示符环境下编译过了,只有通过“javac -d . Test*.java”加通配符方式或者先编译TestPackage再编译Test才能成功,因为很明显在TestPackage所在包还没有编译形成的时候Test是找不到它的内部方法的。我的问题是编译器怎么会知道Test有调用TestPackage的东西而先编译后者?还是说它先编译过了Test发现不好使就转去编译TestPackage了?其中遵循的是怎样一个规则?
我来帮他解答
2006-11-17 13:03
满意回答
在java编译过程中,确实是会自动寻找的.当它先编译Test的时候,发现需要先编译TestPackage类,才能完成编译Test的工作,然后编译器开始编译TestPackage.
如果,你的这两个java文件都没有打包,并且在同一个目录下的话,你可以通过直接输入javac Test.java看到,尽管你没有发出命令要求编译TestPackage类,但是由于编译器检测到需要有TestPackage类的支持,才能编译Test,所以这时TestPackage也被编译了.
现在程序打包了,你先编译Test的这种情况下,编译器先找的是包,而你的包org.it315.example是不存在的,所以会出错
posted on 2012-08-07 09:45  知点网  阅读(2700)  评论(0编辑  收藏  举报