栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

替换java类?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

替换java类?

类上的指定包对编译有影响吗?

是的,这很重要。

pkg.pkg.Runtime()
无法调用名为的类 ,就像 是那样
java.lang.Runtime

此外,如果我的内存正确,则JVM中还有一些其他安全措施,以防止普通应用程序将类注入诸如的核心包中

java.lang

如果您需要更改

java.lang.Runtime
类的行为(出于实验目的!),那么我认为您需要将修改后的版本放在“ rt.jar”文件之前的
引导类路径上

然而:

  • 这种级别的修补很容易导致JVM不稳定。即难诊断的JVM崩溃。

  • 如果您的目标是生产“生产质量”工具,那么您会发现涉及修改JVM的事情不被接受。人们将非常怀疑安装说明中的内容,例如“将其添加到已安装的JVM的bootclasspath中”。

  • 分发“修补”的JVM可能会违反Oracle的Java许可协议。


我的建议是寻找一种不太麻烦的方式来做您想做的事情。例如,如果您尝试进行病毒检查,请在JVM外部或在自定义应用程序类加载器中进行病毒检查。


您评论了:

我有一个自定义的类加载器,我的问题是:如果我编译一个标记为pkg.pkg.Runtime的类,是否可以在类加载器中注册为java.lang.Runtime?

就像我上面说的,不,你不能。字节码文件中嵌入了类名。如果尝试通过加载具有不同名称的类来“快速完成”,则JVM将抛出

Error

和:

如果没有,那么我该如何更换班级?如果编译后的程序包名称必须等于引用的命名请求,那么我可以修改.class文件以使其匹配,或者像在java.lang程序包中一样对其进行编译吗?

那就是你要做的。您需要在源代码中 命名 该类

java.lang.Runtime
,并以此进行编译。

但是我上述建议的 意思 是,您应该使用在类加载器中进行病毒检查。 忘记
尝试替换/修改的行为

Runtime
。由于我上面列出的原因,这是一个坏主意。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号