我们如何编辑Java内置类,例如Java.util.Scanner?

问题描述 投票:0回答:3

出于好奇,我想知道是否有一种方法可以在 rt.jar 中编辑/修改 Java 核心类。我在互联网上到处搜索但没有得到相关答案。我还参考了 Covert Java(书),但我无法理解它。

注意:我不想分发我的应用程序。我只是出于好奇而想做。

java oop java-6
3个回答
4
投票

另一个答案建议修补 rt.jar 我相信这不是最好的方法 - 您实际上无法分发您的应用程序(除非您将应用程序容器化并且随应用程序一起提供 Java)。

要走的路是了解 bootstrap classpath 这应该涵盖大多数合理的用例。

普通的 Java 类加载器首先在引导类路径中查找类,然后再检查扩展和应用程序类路径。默认情况下,引导类路径由“rt.jar”文件和 JRE 安装提供的其他一些重要 JAR 文件组成。它们提供了标准 Java SE 类库中的所有类,以及各种“内部”实现类。

一般情况下,您无需担心这一点。默认情况下,java、javac 等命令将使用适当版本的运行时库。

偶尔,需要使用标准库中类的替代版本来覆盖 Java 运行时的正常行为。例如,您可能会在运行时库中遇到“show stopper”错误,您无法通过正常方法解决该错误。在这种情况下,可以创建一个包含更改后的类的 JAR 文件,然后将其添加到启动 JVM 的引导类路径中。


2
投票

更好的方法是扩展这些类并修改具体方法。这不会影响您只想使用 Java 提供类的其他项目


1
投票

该 jar 中的文件是从 .java 源文件编译的 .class 文件。您无法那么简单地直接修改二进制文件,但如果您有源代码(例如 https://github.com/openjdk/),您可以编译自己的 .class 文件并替换,因为 JAR 基本上是包含二进制文件的存档.

这不是最具可扩展性的方法,但也是可能的。

© www.soinside.com 2019 - 2024. All rights reserved.