首页 > 编程知识 正文

如何破坏双亲委派模型,双亲是指什么人

时间:2023-05-05 14:20:48 阅读:15621 作者:4737

引出问题,今天在做一个简单的测试。 自定义String类。 代码如下。

package java.lang;/* * * createdbyzbyon 2:032019/11/12 *自定义代码字符串/代码类* /公共类字符串{ publicstaticvoidmain (字符串}结果错误:

如果你仔细看错误报告的信息,你会怀疑。 既然我在自定义的String中写了main方法,为什么要报告错误呢? 这与父母的委托模式有关。

如果父母任命班级加载器后再由父母任命,我们必须说班级加载器。 班装载机并不神秘,但我们觉得很神秘。

当JVM将Java源代码转换为字节码时,类加载器将加载并初始化字节码文件。 对于它能否运行以及运行效果,类加载器并不关注。 这由执行引擎完成。

类加载器一般分为以下类型:

启动类加载器(bootstrap Class Loader )这是由c编写的,它加载了Javahome/jre/lib/rt.jar。 因此,可能无法通过以下代码获取object的Bootstrap类加载器中的对象: 因为我得不到Java

system.out.println (object.class.getclass loader () ); 扩展类加载器(Extension Class Loader )。 它由Java编写,并加载Javahome/jre/lib/ext/*.jar。

应用类加载器(APPClassLoder )。 这是加载在classPath下的类。

在下面的代码中看看这些类加载器。

publicclassclassloadercheck (publicstaticvoidmain (string [ ] args ) system.out.println ) class loader check.class.glargs 系统. out.println (class loader check.class.getclass loader () ); system.out.println ('==================() ) ) ); system.out.println (object.class.getclass loader () ); }

当父母委托我们定制的类并通过类加载器实例化对象时,类加载器会向上查找父类加载器所在的类对象。 如果自定义中的类与父类加载器加载的类对象匹配,则如果当前类对象没有定义的方法,则会报告错误,就像上面的string报告中的错误一样。

如果任何父类加载器都无法加载我们自定义的类,请使用appClassLoder类加载器加载我们自定义的类。

这就是父母委托模式,委托给父类加载器。 这样,用户就不能连续修改jdk的源代码,也确保了代码的安全性。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。