%JAVA_HOME%/lib 中存在 tools.jar,无意中发现其中的 javac的代码实现如下:
package com.sun.tools.javac;
import com.sun.tools.javac.util.Version;
import java.io.PrintWriter;
import java.lang.reflect.Method;
@Version("@(#)Main.java\t1.25 06/04/30")
public class Main
{
public static void main(String[] paramArrayOfString)
throws Exception
{
if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equals("-Xjdb"))) {
String[] arrayOfString = new String[paramArrayOfString.length + 2];
Class localClass = Class.forName("com.sun.tools.example.debug.tty.TTY");
Method localMethod = localClass.getDeclaredMethod("main", new Class[] { paramArrayOfString.getClass() });
localMethod.setAccessible(true);
System.arraycopy(paramArrayOfString, 1, arrayOfString, 3, paramArrayOfString.length - 1);
arrayOfString[0] = "-connect";
arrayOfString[1] = "com.sun.jdi.CommandLineLaunch:options=-esa -ea:com.sun.tools...";
arrayOfString[2] = "com.sun.tools.javac.Main";
localMethod.invoke(null, new Object[] { arrayOfString });
} else {
System.exit(compile(paramArrayOfString));
}
}
public static int compile(String[] paramArrayOfString)
{
com.sun.tools.javac.main.Main localMain = new com.sun.tools.javac.main.Main("javac");
return localMain.compile(paramArrayOfString);
}
public static int compile(String[] paramArrayOfString, PrintWriter paramPrintWriter)
{
com.sun.tools.javac.main.Main localMain = new com.sun.tools.javac.main.Main("javac", paramPrintWriter);
return localMain.compile(paramArrayOfString);
}
static
{
ClassLoader localClassLoader = Main.class.getClassLoader();
if (localClassLoader != null)
localClassLoader.setPackageAssertionStatus("com.sun.tools.javac", true);
}
}
其中通过获取当前类加载器的实例进行指定断言开启
ClassLoader localClassLoader = Main.class.getClassLoader();
if (localClassLoader != null)
localClassLoader.setPackageAssertionStatus("com.sun.tools.javac", true);
并且通过该类的main方法中调用另外一个可以作为入口类的main方法的过程,可以猜想jvm在启动的时候通过指定入口类其调用方式应该也是一致的
Class localClass = Class.forName("com.sun.tools.example.debug.tty.TTY");
Method localMethod = localClass.getDeclaredMethod("main", new Class[] { paramArrayOfString.getClass() });
...
分享到:
相关推荐
获取这些参数通常在程序启动时进行,可以通过解析命令行字符串或使用专门的函数来实现,如C/C++的`main`函数的`argv`参数,Python的`sys.argv`,或Java的`String[] args`。 总结来说,程序返回值是衡量程序执行状态...
在Java中,程序的执行通常是从main方法开始的。 #### Exhibit (展示) 虽然“exhibit”这个词在Java中没有直接的应用,但在描述程序界面如何展示信息时可能会用到。 #### Exists (存在) 在SQL查询中,`EXISTS`是...
例如,Java程序始于`public class`关键字,主方法(main method)是程序执行的入口点。你需要熟悉IDE(集成开发环境),如Eclipse或IntelliJ IDEA,它们提供了编写、运行和调试Java代码的便利工具。 在实例中,你会...
然而,如果你需要在Java程序中集成文件压缩功能,那么理解并使用Java版的WinRAR源代码就显得尤为重要。本文将深入探讨如何在Java中实现WinRAR的功能,并基于提供的"WinRAR.java"和"Test.java"文件来讲解相关知识点。...
在本复习资料中,我们将深入探讨Java断言的概念、用法以及其在软件开发过程中的重要性。 1. **断言概念** 断言是一种编程语句,用于声明某个点上的程序状态。它包含一个布尔表达式,该表达式预期为真。如果表达式...
程序通常从`main`方法开始执行。 2. **Java类库结构**:Java类库包含了丰富的API,用于支持各种功能,如图形用户界面、网络通信、数据库访问等。 3. **Java程序开发环境结构**:Java开发工具包(JDK)提供了编译器、...
在Java中,通过调用main方法来启动程序的执行。 #### 32. Exhibit (显示, 陈列) - **拼音**: [ig'zibit] - **解释**: “Exhibit”在编程中通常指展示或呈现某种信息的行为。例如,可以使用GUI组件来展示用户界面。 ...
同时,Java程序的入口点是`public static void main(String[] args)`方法,而非C语言中的`void main()`或`int main()`函数。 #### Java的简单性与面向对象 Java通过**剔除复杂的特性**(如头文件、指针运算、多重...
在Java编程语言中,了解相关的英语词汇是提升编程能力的关键。以下是一些Java中常见的英语单词及其含义: 1. `abstract` - 抽象的,用于标记类或方法,表示它们是未完成的,需要子类来具体实现。 2. `access` - ...
8. **反射机制**:理解Java反射的用途,包括在运行时动态创建对象、获取类信息、调用私有方法等,以及其在设计模式中的应用。 9. **JVM优化**:探讨JVM的运行参数设置,包括堆内存大小调整、垃圾回收策略选择、类...
- 每个Java程序至少有一个`main()`方法作为程序入口。 - 删除主方法将导致程序无法运行。 ### 5. 错误处理 - 必须妥善处理异常,尤其是用户输入错误等情况。 - 使用异常处理机制来提高程序的健壮性。 ### 6. 类的...
在Java全栈开发中,掌握Java新版本的特性是非常重要的,尤其是Java 8及其后续版本。Java 8引入了许多创新特性,其中最具革命性的是函数式编程的支持。函数式编程是一种编程范式,它强调将计算视为函数的组合,而不是...
14. **单元测试**:JUnit是Java中最常用的单元测试框架,掌握如何编写测试用例,使用断言进行验证,以及Mockito等工具进行模拟对象的测试。 15. **编程规范与代码质量**:理解SOLID原则,了解代码重构的方法,以及...
在`main.java`文件中,很可能包含了使用这些函数式编程特性的示例代码,通过阅读和理解这些代码,你可以进一步巩固对Java函数式编程的理解。而`README.txt`文件可能提供了关于如何运行和测试这些代码的说明。
4. **Assertion (断言)**:Assertion是用于调试的工具,它允许程序员声明在程序执行过程中应该始终为真的条件。如果这些条件变为假,那么系统通常会抛出AssertionError,表明程序可能有错误。在开发和测试阶段启用...
在这个小demo中,应该有一个包含主函数(`main`方法)的类,该函数执行整个自动化流程。脚本可能包括登录、浏览特定页面、填写表单等步骤,每一步都对应Selenium的API调用。 6. **运行与调试**: 由于项目可以...
通过IDEA创建Maven项目,可以方便地管理项目结构、依赖、构建过程以及执行Maven命令。首先,你需要在IDEA中选择“New Project”,然后选择“Maven”选项,配置相关的pom.xml文件,这是Maven项目的配置中心,包含了...
- **断言**:在 Java 中,断言语句(通过 `assert` 关键字声明)会在运行时检查某个条件是否为真。如果条件不满足,则会抛出 `AssertionError` 异常。 以上是对给定文件中提到的 Java 笔试题目的知识点总结。这些...
- **创建可执行Java应用**:了解如何编写带有`main`方法的Java程序。 - **命令行运行Java程序**:熟悉编译和运行Java程序的过程。 - **控制台输出**:学会使用`System.out.println()`等方法输出信息。 - **导入Java...