【问题标题】:How can we edit Java built-in classes such as Java.util.Scanner?我们如何编辑 Java 内置类,例如 Java.util.Scanner?
【发布时间】:2019-09-11 12:34:12
【问题描述】:

出于好奇,我想知道有没有办法可以在 rt.jar 中编辑/修改 Java 核心类。我在互联网上到处搜索,但没有得到相关答案。我也提到了 Covert Java(book),但我无法理解。

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

【问题讨论】:

  • 技术上是的,这是可能的。但是它涉及到高级的东西,那为什么你认为你需要修改标准的JDK类呢?
  • 可以下载JDK源码玩玩:stackoverflow.com/questions/2896727/…
  • 计划修改 JDK 类的人不应该对在哪里找到源代码感到困惑;)
  • 谁能写出完整的步骤或者在 YouTube 上做一个教程

标签: java oop core jdk1.6


【解决方案1】:

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

学习的方法是bootstrap classpath 这应该涵盖大多数合理的用例。

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

在正常情况下,您无需担心这一点。默认情况下,java、javac 等命令将使用相应版本的运行时库。

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

【讨论】:

  • 我想知道如何修补 rt.jar 。我不想分发应用程序。我只是想看看它是如何工作的。
  • 请写下修补rt.jar的步骤
  • 查看@Kudin 的回答
【解决方案2】:

更好的方法是扩展这些类并修改特定方法。这不会影响您只希望 Java 提供类的其他项目

【讨论】:

  • 我没有在做一个项目。我只是想有办法修补rt.jar
【解决方案3】:

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

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

【讨论】:

  • 你说的是rt.jar吗
  • 好吧,真的是任何罐子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多