Java 为什么我必须使用:类:。类路径参数中jar后的符号?

Java 为什么我必须使用:类:。类路径参数中jar后的符号?,java,classpath,javac,Java,Classpath,Javac,我正在读一些关于高级Java的书,我被指示使用以下命令编译.Java文件: javac -d classes -classpath c:\somepath\somejar.jar;classes:. 我想知道: 是:。这些符号代表一个参数,还是:和分别是类关键字后的不同参数?它们代表什么 为什么我们需要在somejar.jar之后提供类:.?作为所有这些组合: javac-d classes-classpath c:\somepath\somejar.jar;类别:。 javac-d clas

我正在读一些关于高级Java的书,我被指示使用以下命令编译
.Java
文件:

javac -d classes -classpath c:\somepath\somejar.jar;classes:.
我想知道:

  • :。
    这些符号代表一个参数,还是
    分别是
    关键字后的不同参数?它们代表什么
  • 为什么我们需要在
    somejar.jar
    之后提供
    类:.
    ?作为所有这些组合:
    javac-d classes-classpath c:\somepath\somejar.jar;类别:。

    javac-d classes-classpath c:\somepath\somejar.jar;类别:

    javac-d classes-classpath c:\somepath\somejar.jar;类别

    javac-d classes-classpath c:\somepath\somejar.jar
  • 工作完全一样。它们产生完全相同的
    .class
    文件(每个文件226字节),当我在Web容器中部署它们时,它们的工作方式是相同的


    那么这些符号有什么意义呢?以上四个
    javac..
    命令有什么不同?谁能解释清楚这一点,请?

    代码>
    类路径值中使用的分隔符用于将多个文件夹分隔为类路径的值

    用于分隔Windows操作系统下的文件夹

    用于分隔*nix OSs下的文件夹

    -d classes
    参数与
    classes:.
    结合使用意味着编译的
    .class
    文件将放置在classes文件夹中,而不是基于包层次结构的标准位置

    因此,将类作为类路径的附加参数包含,允许在编译新java类时引用以前编译的类文件。
    是对执行了
    javac
    命令的目录(当前工作目录)的类路径引用

    这里唯一的问题是两种分隔符类型的混合。为什么要这样做——我不知道

    参考资料:


    最好问问书的作者。类路径用于让编译器知道在何处搜索正在编译的文件使用的已编译类。例如,如果您已经编译了第二个类使用的一个文件,则在编译该第二个类时,编译器知道在何处搜索第一个类。在执行代码时也使用相同的方法,类路径告诉在哪里可以找到类文件。目录没有存储在类文件中。谢谢,卡洛斯。是的,你说得对,我知道这一点,我也很清楚。我的问题是关于符号的。。然而,你提到的重要线索(其他人可能会发现这很有用)是,是的,确切地说:编译器查找已编译的文件,而不是源文件。我有一个很奇怪的问题。。当我编译这个shell时,由于某种原因,列表不再被识别。-classpath参数是否覆盖其他默认jar文件?所以java.util包脱离了上下文?对不起,我记得我键入了java编译器。最有可能的是,一些自动推荐标签潜入。。我知道什么是编译器构造。唯一类似的标记是and,它们也不相关。乔治·西克劳里:我很抱歉你觉得自己在这里被责骂。这不是我的本意,我同意你的看法,一些SO用户的回复有些苛刻。为了回答这个有趣的问题,我花了几个小时在网上进行研究,我试着分享我的知识和研究结果。小心点,伙计,继续问问题。谢谢你,兰恩!然而,很少有澄清:1。多个文件夹?还是多个.jar文件?例如,当我登记几个JAR作为-classpath的值时,我有一个想法,我通过相应地对它们进行分隔来指定它们(或者;或者:取决于操作系统);还是我弄错了?你说,那个分隔符是用来在文件夹之间划界的?这意味着在我的示例中,只包括classes文件夹?2.最后一节课呢?为什么我们需要它?3. -即使不提供任何类路径,d类也可以完美地工作。。它只是编译文件的目的地,我假设(?)我认为-d类和-classpath的值是:类。没有任何共同点。如果我错了,请纠正我。@GiorgiTsiklauri:1.多个文件夹,可以包含JAR和/或.class文件。您还可以指定特定文件(JAR)。必须在文件夹和文件之间使用分隔符。2.据我所知,最后一个阶段是对执行javac命令的文件夹的引用。3.(-d)指定已编译源文件的目标。至于-d类和类路径类之间的关系,我确实认为它们是相关的。这个想法是向类路径提供编译过的类文件。所以我看到您编辑了这个问题,并将“类”和“类”都改为“类:”。我认为这些符号(冒号和点)代表着不同的想法。你想告诉我它们是“类:.”的一个参数/参数的一部分吗?(好吧,在这种情况下;不属于类:,只是为了区分一个论点和另一个论点)也许你可以回顾一下我的问题。我在问一些不同的问题,而不是什么是“;”和“:”