我可以创建一个自定义的java。*包吗?

我可以创建一个与预定义包具有相同名称的自己的包
在Java中,例如java.lang

如果是这样,结果会是什么? 这不是能让我访问该软件包的受保护成员吗?

如果没有,是什么阻止我这样做?

不 – java.lang是被禁止的。 安全管理器不允许java.lang包中的“自定义”类,也没有办法告诉他接受它们。

你是对的 – 在java.lang命名空间中声明的自己的类允许你在该包中使用protected方法和类的成员,这绝对不是必需的。


编译很好 – 但是 – 尝试执行它;)

 package java.lang; public class EvilAsEvilCanBe { public static void main(String[] args) { System.out.println("hehe"); } } 

禁止任何与“java。*”匹配的包名称,并抛出安全性exception。

有两件事阻止你。

1)许可协议。 “注意:不应该部署使用此选项来覆盖rt.jar中的类的应用程序,因为这样做会违反Java 2 Runtime Environment二进制代码许可证。” http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html

2)您必须使用-Xbootclasspath:bootclasspath或添加lib / endorsed目录。

由于JVM中的内部优化,某些类不容易修改,例如,您无法向Sun添加多个方法到Sun / Oracle的JVM;)