美文网首页
javac编译代码

javac编译代码

作者: 刚子来简书啦 | 来源:发表于2020-09-26 10:04 被阅读0次

随便找个目录,用最原始的文字编辑器,写下最经典的启蒙代码,从此便站到了java的门口。

// Main.java
public class Main {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}

然后,我们使用javac来编辑这个文件。java的文件名后缀必须是.java,并且文件名与类型必须一致,且为驼峰格式。

打开命令行,进入编辑此文件的目录,此处略去java环境的安装和系统环境变量的配置。

$ javac Main.java

只要代码没有出错,就会顺利编译出一个Main.class的文件,这就是java虚拟机可执行的字节码文件,后面会专门来研究它的。

$ java Main

不出意外,你就能在命令行里看到 Hello World! 了,这就是学习java最小的麻雀了。

假如我们需要一个额外的类,比如 Student 来描述学生信息,只要把它放在与 Main.java 同目录下就可以了,这种方式不需要添加import,只要环境变量里的classpath添加了 . 即可,这就是配置当前目录来寻找类的用处。

既然是学习,那我们就故意添加一层目录看看如何影响变异命令。在Main.java 所在的目录下,我们新建一个finance目录,然后写个钱有关的类,这样会兴奋一点。既然是新建了目录,那就得用上package来标注一下了,包名和路径保持一致,不然java会不认识的。

// finance/Balance.java
package finance;

public class Balance {

    float amount = 0.0f;

    public void setAmount(float amount){
        this.amount = amount;
    }

    public float getAmount(){
        return this.amount;
    }
}

我们再重新加工一下Main.java,让我们来取点钱试试。

// Main.java
import finance.Balance;

public class Main {
  public static void main(String[] args) {
    Balance balance = new Balance();
    balance.setAmount(100.01f);
    System.out.println(balance.getAmount());
  }
}

这时我们再使用javac编译一下Main.java ,它会把关联的类文件都一起编译好。

$ javac Main.java
$ java Main

这时我们就能看到打印的钱了,虽然少了点,但是都是可以自己随便设置的,全凭喜好。

简单的、带包的,我们都能编译执行了,但是却怎么也高兴不起来,因为所有的class文件都和java源代码在一个目录,看着就难受,必须得把他们都弄走。

$ javac Main.java -d output

-d 参数刚好就能解决这个文件,百试不爽。

好了,这里所有的命令操作都是在Main.java的当前目录来执行的,假如我们要写脚本来执行,而又想把脚本放在另一个地方,那是不是又得操心了。

果然,单个java文件好编译,但是它引用的那些文件怎么也关联不上,这就是常见的相对路径文件了,也是java中使用package的好处,我们只要指定一个源就好了,相对的package关系就都清楚了,举个栗子,我们挪到Main.java的上一层目录:

# java_cmd/Main.java
$ javac -sourcepath java_cmd/ java_cmd/Main.java -d java_cmd/output

最后一个问题,为了不重复造轮子,我们要引用已有的jar包该怎么告诉编译器呢?别怕,有 -classpath 来为我们撑腰,建个目录放进入就可以了,一般叫 lib,但不强求。

# Main.java同目录
$ javac -classpath lib Main.java -d output

这样一来,不管内部如何组织package,外部如何引入jar包,也不论你想在哪个目录做编辑和执行动作,就都没有障碍了。理解了javac的执行,再使用IDE来开发,就更容易理解项目结构和编译控制了。

$ javac
用法: javac <options> <source files>
其中, 可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
-processorpath <路径> 指定查找注释处理程序的位置
-parameters 生成元数据以用于方法参数的反射
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-h <目录> 指定放置生成的本机标头文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-profile <配置文件> 请确保使用的 API 在指定的配置文件中可用
-version 版本信息
-help 输出标准选项的提要
-A关键字[=值] 传递给注释处理程序的选项
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<文件名> 从文件读取选项和文件名

相关文章

  • javac编译代码

    随便找个目录,用最原始的文字编辑器,写下最经典的启蒙代码,从此便站到了java的门口。 然后,我们使用javac来...

  • 一、JDK工具笔记——javac命令

    JAVAC(编译java源代码) 1. javac命令帮助信息 2. 常见用法 例如代码结构如下:project_...

  • java入门笔记

    1、①javac MyFirstJavaProgram.java编译代码;②java MyFirstJavaPro...

  • JAVA 基础知识(一)

    1.Java代码运行原理 源代码文件(.java)——>java编译器(javac.exe)编译——>字节码文件(...

  • Java虚拟机结构、内存管理相关基础知识(3)

    Java虚拟机编译 代码的编译是由javac编译器来完成的,编译器能将一种语言规范转换成另一种语言规范javac将...

  • JAVA面试题分享汇总

    请阐述一下Javac.exe和Java.exe的作用。答:javac是编译器,把java代码编译成字节码。java...

  • 学习笔记:Javac学习

    Javac编译器的基本结构 Javac编译器的作用就是将符合java语言规范的源代码转化成符合Java虚拟机规范的...

  • MyCat 1.6部署编译构建环境

    MyCat 1.6部署编译构建环境 简单来说,编译(compile)是用javac编译器将.java源代码编译成....

  • java 字节码

    一:简单的命令 我们先从javac(编译器)命令开始,javac命令是将源代码编程成class字节码文件,因为我们...

  • 第四章 javac 编译原理

    javac 作用将.java源代码文件转化为.class文件 编译流程866881-201602162147087...

网友评论

      本文标题:javac编译代码

      本文链接:https://www.haomeiwen.com/subject/ucvhjhtx.html