Java 通过bootstrapclassloader加载类

Java 通过bootstrapclassloader加载类,java,classloader,Java,Classloader,以下是我在采访中被问到的问题: 如果一个新方法被添加到String类中,并被编译和放入 那么引导类加载器会加载它吗 我回答说它不会被加载,但不知道为什么 请帮我提供正确的答案和解释。它将被加载 不仅如此:它甚至不需要在rt.jar中,如果您将jar文件预先添加到引导类路径(请参阅),那么您甚至可以从其他jar文件加载java.lang.类 这当然是破坏JVM安全性的一种方式,但您需要相当深入的访问权限(对rt.jar的写访问权限或对JVM的命令行参数的访问权限),当您拥有这些权限时,您可以做的远

以下是我在采访中被问到的问题:

如果一个新方法被添加到String类中,并被编译和放入 那么引导类加载器会加载它吗

我回答说它不会被加载,但不知道为什么

请帮我提供正确的答案和解释。

它将被加载

不仅如此:它甚至不需要在
rt.jar
中,如果您将jar文件预先添加到引导类路径(请参阅),那么您甚至可以从其他jar文件加载
java.lang.


这当然是破坏JVM安全性的一种方式,但您需要相当深入的访问权限(对
rt.jar
的写访问权限或对JVM的命令行参数的访问权限),当您拥有这些权限时,您可以做的远不止是替换
String.toString()

为什么不加载它?为什么您认为它不会被加载?我们应该如何解释您的声明?如果它被加载,那么您可以在该方法内执行任何操作,这将违反JVM的安全性。它不是关于字符串,而是关于引导类加载器加载的任何类。@Holger,不需要解释我的声明。我只需要你对这个问题正确答案的看法。@AKS:不,你没有要求正确答案。你问“请帮助我理解为什么它无法加载”。所以你的问题包含了一个主张。好吧,从这里我可以理解的是,获得对rt.jar本身的写访问权是第一个安全违规行为,类加载器将加载rt.jar中的任何内容。对于任何应用程序,从外部看,引导类装入器无法装入String类,因为它将从rt.jar装入。