设为首页 加入收藏

TOP

夯实Java基础系列20:从IDE的实现原理聊起,谈谈那些年我们用过的Java命令(五)
2019-10-09 20:03:26 】 浏览:83
Tags:夯实 Java 基础 系列 IDE 实现 原理 谈谈 那些 我们 命令
n]

如果利用 -bootclasspath 重新定义: javac -bootclasspath src Xxx.java,则会出现下面错误:

致命错误: 在类路径或引导类路径中找不到程序包 java.lang

-sourcepath和-classpath(-cp)

?-classpath(-cp)指定你依赖的类的class文件的查找位置。在Linux中,用“:”分隔classpath,而在windows中,用“;”分隔。
?-sourcepath指定你依赖的类的java文件的查找位置。

举个例子,

public class A
{
    public static void main(String[] args) {
        B b = new B();
        b.print();
    }
}



public class B
{
    public void print()
    {
        System.out.println("old");
    }
}

目录结构如下:

sourcepath //此处为当前目录

|-src
    |-com
      |- B.java
    |- A.java
  |-bin
    |- B.class               //是 B.java

编译后的类文件

如果要编译 A.java,则必须要让编译器找到类B的位置,你可以指定B.class的位置,也可以是B.java的位置,也可以同时都存在。

javac -classpath bin src/A.java                            //查找到B.class

javac -sourcepath src/com src/A.java                   //查找到B.java

javac -sourcepath src/com -classpath bin src/A.java    //同时查找到B.class和B.java

如果同时找到了B.class和B.java,则:
?如果B.class和B.java内容一致,则遵循B.class。
?如果B.class和B.java内容不一致,则遵循B.java,并编译B.java。

以上规则可以通过 -verbose选项看出。

-d

?d就是 destination,用于指定.class文件的生成目录,在eclipse中,源文件都在src中,编译的class文件都是在bin目录中。

这里我用来实现一下这个功能,假设项目名称为project,此目录为当前目录,且在src/com目录中有一个Main.java文件。‘

package com;
public class Main
{
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}



javac -d bin src/com/Main.java

上面的语句将Main.class生成在bin/com目录下。

-implicit:{none,class}

?如果有文件为A.java(其中有类A),且在类A中使用了类B,类B在B.java中,则编译A.java时,默认会自动编译B.java,且生成B.class。
?implicit:none:不自动生成隐式引用的类文件。
?implicit:class(默认):自动生成隐式引用的类文件。

public class A
{
    public static void main(String[] args) {
        B b = new B();
    }
}

public class B
{
}

如果使用:


 javac -implicit:none A.java

则不会生成 B.class。

-source和-target

?-source:使用指定版本的JDK编译,比如:-source 1.4表示用JDK1.4的标准编译,如果在源文件中使用了泛型,则用JDK1.4是不能编译通过的。
?-target:指定生成的class文件要运行在哪个JVM版本,以后实际运行的JVM版本必须要高于这个指定的版本。

javac -source 1.4 Xxx.java

javac -target 1.4 Xxx.java

-encoding

默认会使用系统环境的编码,比如我们一般用的中文windows就是GBK编码,所以直接javac时会用GBK编码,而Java文件一般要使用utf-8,如果用GBK就会出现乱码。

?指定源文件的编码格式,如果源文件是UTF-8编码的,而-encoding GBK,则源文件就变成了乱码(特别是有中文时)。

javac -encoding UTF-8 Xxx.java

-verbose

输出详细的编译信息,包括:classpath、加载的类文件信息。

比如,我写了一个最简单的HelloWorld程序,在命令行中输入:

D:\Java>javac -verbose -encoding UTF-8 HelloWorld01.java

输出:

[语法分析开始时间 RegularFileObject[HelloWorld01.java]]
[语法分析已完成, 用时 21 毫秒]
[源文件的搜索路径: .,D:\大三下\编译原理\cup\java-cup-11a.jar,E:\java\jflex\lib\J           //-sourcepath
Flex.jar]
[类文件的搜索路径: C:\Java\jdk1.7.0_25\jre\lib\resources.jar,C:\Java\jdk1.7.0_25      //-classpath、-bootclasspath、-extdirs
省略............................................
[正在加载ZipFileIndexFileObject[C:\Java\jdk1.7.0_25\lib\ct.sym(META-INF/sym/rt.j
ar/java/lang/Object.class)]]
[正在加载ZipFileIndexFileObject[C:\Java\jdk1.7.0_25\lib\ct.sym(META-INF/sym/rt.j
ar/java/lang/String.class)]]
[正在检查Demo]
省略............................................
[已写入RegularFileObject[Demo.class]]
[共 447 毫秒]

编写一个程序时,比如写了一句:System.out.println("hello"),实际上还需要加载:Object、PrintStream、String等类文件,而上面就显示了加载的全部类文件。

其他命令

-J <标记>
?传递一些信息给 Java Launcher.

javac -J-Xms48m   Xxx.java          //set the startup memory to 48M.

-@<文件名>

如果同时需要编译数量较多的源文件(比如1000个),一个一个编译是不现实的(当然你可以直接 javac *.java ),比较好的方法是:将你想要编译的源文件名都写在一个文件中(比如sourcefiles.txt),其中每行写一个文件名,如下所示:

HelloWorld01.java
HelloWorld02.java
HelloWorld03.java

则使用下面的命令:

j

首页 上一页 2 3 4 5 6 7 下一页 尾页 5/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hibernate入门教程(二):Hibernat.. 下一篇springboot+vue2.x 解决session跨..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目