Main中的main方法是javac的入口。
main中内容很少,只有两段分支代码
if (args.length > 0 && args[0].equals("-Xjdb")) {
//....
} else{
System.exit(compile(args));
}
使用javac -Xjdb时会进入if部分,和调试有关,暂且不去管它,直接考虑else部分即可。
compile(args)是真正执行编译功能的地方。
public static int compile(String[] args) {
com.sun.tools.javac.main.Main compiler =
new com.sun.tools.javac.main.Main("javac");
return compiler.compile(args);
}
创建com.sun.tools.javac.main.Main 类的对象(其实是构建了一个编译器实例),调用其compile方法,并把编译时获取的参数传递过去。
后面需要进入com.sun.tools.javac.main.Main继续跟踪了。
分享到:
相关推荐
2. **使用Java 9及以上版本的模块系统**: 从Java 9开始,`tools.jar`被模块化,不再直接可用。需要通过`--add-modules`选项来访问,例如: ```bash javac --add-modules=javafx.base,javafx.graphics --module-...
3. **类型检查**:在 `com.sun.tools.javac.main.JavaCompiler` 类中,编译器会进行类型检查,确保所有的表达式和语句在类型上是正确的。这包括变量声明、方法调用、赋值操作等。 4. **类与接口解析**:编译器需要...
`com.sun.tools.javac.main.Main`类在这个过程中扮演了关键角色,它负责编译任务的整体调度。类型检查由`com.sun.tools.javac.code.Type`和`com.sun.tools.javac.code.Symbol`类协同完成,确保程序符合Java语言规范...
javac 命令行支持多种选项,如 `-g` 用于添加调试信息,`-classpath` 定义类路径,`-source` 指定 Java 版本等,这些选项通过 `com.sun.tools.javac.main.Main` 类的 `compile` 方法处理。 深入研究 javac 源码...
这个过程中涉及的类主要包括 `com.sun.tools.javac.main.Main`,它是 javac 的主入口点,以及 `com.sun.tools.javac.parser.JavacParser`,负责解析源代码。 在阅读和调试 javac 源码时,有几点需要注意: 1. **...
源代码中包含多个模块,如`com.sun.tools.javac.main`,`com.sun.tools.javac.parser`,`com.sun.tools.javac.code`等,分别对应不同的编译阶段。 2. **词法分析**: 这是编译的第一步,由`...
- `com.sun.tools.javac.Main`:这是`javac`命令的主入口点,负责启动编译过程。 - `com.sun.tools.javac.parser`:包含词法和语法分析的相关实现。 - `com.sun.tools.javac.tree`:存储抽象语法树的相关类。 - `...
- Java编译器源码主要位于openjdk的`src/jdk.compiler/share/classes/com/sun/tools/javac`目录下,包括多个子模块,如parser(解析器)、main(主程序入口)、tree(抽象语法树)等。 - 源码中包含了处理类路径、...
这些类主要位于`sun.tools.java.*`和`sun.tools.javac.*`包下,例如javac编译器就依赖于tools.jar。当我们执行`javac`命令编译Java源代码时,实际上是通过Java虚拟机执行了`java -classpath %JAVA_HOME%\lib\tools....
例如,如果你想要在代码中调用Java编译器进行动态编译,你可以导入`com.sun.tools.javac.Main`类并调用其`compile`方法。这对于自动化构建过程或者在运行时编译源代码非常有用。 接下来,我们来看"ant.jar"。Apache...
最后,通过`com.sun.tools.javac.Main.compile()`方法编译源代码,如果成功,使用`Class.forName()`加载生成的类,然后实例化并调用其方法。 至于扩展部分,可能的方向包括优化数据读取和导入性能,例如通过多线程...
Java 1.4引入了`com.sun.tools.javac.Main`类,该类提供了静态方法`compile`用于编译Java源代码。以下是一个简单的示例: ```java import com.sun.tools.javac.Main; public class RealTimeCompiler { public ...
当Ant在执行`javac`时,它会调用JDK的`javac`编译器,这实际上是在 `%JAVA_HOME%\lib\tools.jar` 包内的 `com.sun.tools.javac.main.Main` 类中实现的。当内存不足时,不论是Ant本身还是单独的`javac`进程,都会抛出...
lib目录:工具程序实际上会使用的Java工具类(例如,javac工具程序实际上会去使用tools.jar中的com/sun/tools/javac/Main类)。 src.zip:Java提供的API类的源代码压缩文件,如果需要查看API的某些功能如何实现,...
`javac.exe`是一个包装器,它的作用是简化开发者输入的命令,实质上是调用`java`命令并指定`classpath`为`tools.jar`来执行`com.sun.tools.javac.Main`。同样,J2ME开发中,工具会生成jar文件,并通过一个RPC外壳使...
java -classpath x:\jdk1.xx\lib\tools.jar com.sun.tools.javac.Main ``` 这表明JDK工具本身也是Java应用程序的一部分,因此在使用这些工具时,需要依赖JRE。这也是为什么JDK安装包中包含了一套JRE的原因之一。 #...
2. **J2SDK 版本:** v1.4.2_04,可以从Sun官方网站下载:`http://Java .sun.com/ J2SE/1.4.2/download.html`。 3. **Tomcat 版本:** v5.0.28,可以从Apache官方网站下载:`...
bin/hadoop com.sun.tools.javac.Main -classpath $(hadoop classpath) src/org/apache/hadoop/examples/wordcount/WordCount.java ``` - 创建输入目录: ```bash bin/hadoop fs -mkdir -p input ``` - 复制...
这个计算器全部用的是java类库提供的方法,并采用动态编译技术com.sun.tools.javac.Main。用户所有的输入都由计算器本身提供的按钮来实现,计算器本身不对用户输入是否合法进行检测,只是在进行动态编译不能通过时...
在SUN公司(现在已被Oracle收购)的官网上可以下载JDK安装包,网址为http://java.sun.com/javaee/downloads/。安装完成后,我们需要配置三个重要的环境变量:JAVA_HOME、PATH和CLASSPATH。 JAVA_HOME变量应指向JDK...