Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从jdk覆盖类?_Java_Classpath_Bootstrapping_Openjdk - Fatal编程技术网

Java 如何从jdk覆盖类?

Java 如何从jdk覆盖类?,java,classpath,bootstrapping,openjdk,Java,Classpath,Bootstrapping,Openjdk,我试图从开放jdk中更改一些类,因此我创建了与开放jdk类相同的包结构,并使用netbeans更改这些类。当我构建项目时,如果被覆盖的类中出现了错误,我就会得到一个错误。如果成功地构建了我的项目,那么应用程序似乎不考虑来自我的类的更改,而是使用开放的jdk类。知道如何使用我的类而不是openjdk中的类吗 例如: 如果我在我的项目中创建了sun.net.www.protocol.https.HttpsURLConnectionImpl类,并对其进行了一些更改,我将构建项目,但当我运行应用程序时,

我试图从开放jdk中更改一些类,因此我创建了与开放jdk类相同的包结构,并使用netbeans更改这些类。当我构建项目时,如果被覆盖的类中出现了错误,我就会得到一个错误。如果成功地构建了我的项目,那么应用程序似乎不考虑来自我的类的更改,而是使用开放的jdk类。知道如何使用我的类而不是openjdk中的类吗

例如:


如果我在我的项目中创建了sun.net.www.protocol.https.HttpsURLConnectionImpl类,并对其进行了一些更改,我将构建项目,但当我运行应用程序时,我的更改不会出现,就像使用的是openjdk的原始类,而不是我的类。

这就是扩展类的用途


有关详细信息,请参阅。BasicCall您可以在ext文件夹中放置JAR,或者使用系统属性在覆盖标准Java类的类路径前面指出所需内容。

您应该在自己的包中创建类,并让使用该类的应用程序导入您的类。因此,您可以在com.yourdomain包中创建一个名为HttpsURLConnectionImpl的类

然后在应用程序代码中,确保导入:

  import com.yourdomain.HttpsURLConnectionImpl;

然后在代码中使用您自己的类。

您需要更改引导类路径java-X以了解更多信息,这里正是您需要的选项

-Xbootclasspath/p:


祝你好运黑客的来源

如果有人在使用-Xbootclasspath选项时遇到问题,我绝对推荐不久前找到的以下页面: .
有一个详细的说明如何在一个好的(有效的)代码示例中使用此选项。

这意味着如果我的项目中有一个引导类,那么将加载来自引导的类,而不是来自项目的类?要替换类,我想您需要
认可
扩展
。另外,您要更改的不是系统属性,而是在命令行上设置一个选项。@Tom,可能是,我把它与Tomcat/Jetty约定混淆了。应用程序服务器等应该从系统类加载器(或子类加载器)加载这些类。
ext
/扩展类加载器中的类应优先于这些类进行加载。我始终为您提供Xbootclasspath选项,我们有自己的java.util.logging和其他一些。我从来没有接触过ext(它是为了额外附加到引导程序中),因为这可能会打乱标准应用程序谢谢,这有助于我实现jdkWelcome to StackOverflow中的一个bug!虽然答案总是很受欢迎,但请尝试总结您在答案中提供的链接中提出的要点。指向该页面的链接将来可能会中断,这可能会导致。用几句话涵盖你链接中的关键点,这样即使链接不再有效,你的答案仍然是正确的:)链接确实断了:/