zoukankan      html  css  js  c++  java
  • 关于java中一次编译多个源文件时的编译顺序的问题

    关于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是不存在的,所以会出错
  • 相关阅读:
    CentOS/Ubuntu安装最新的gcc-9
    CentOS 7 源码安装 CMake 3.16.2 最新稳定版。解决 cmake: command not found 问题
    堆排序
    linux可重入、异步信号安全和线程安全
    目录
    教程文档
    推荐文章
    学习文档
    开发工具-索引
    同步/异步/阻塞/非阻塞
  • 原文地址:https://www.cnblogs.com/moonfans/p/2626145.html
Copyright © 2011-2022 走看看