开发者

Can I create a custom java.* package?

Can I create a package of my own that has the same name as a predefined package

in Java, such as java.lang?

If so, what would the results be? Wouldn't that enable me to access that package's protected members?

If not, what pr开发者_如何学Goevents me from doing so?


No - java.lang is prohibited. The security manager doesn't allow "custom" classes in the java.lang package and there is no way telling him to accept them.

You're right - own classes declared in the java.lang namespace would allow you to use protected methods and members of classes in that package, and this is definitly not wanted.


This compiles fine - but - try to execute it ;)

package java.lang;

public class EvilAsEvilCanBe {

    public static void main(String[] args) {
        System.out.println("hehe");
    }

}


Any package name matching "java.*" is prohibited and a security exception will be thrown.


There are two things preventing you.

1) The license agreement. "Note: Applications that use this option for the purpose of overriding a class in rt.jar should not be deployed as doing so would contravene the Java 2 Runtime Environment binary code license." http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html

2) You have to use the -Xbootclasspath:bootclasspath or add a lib/endorsed directory.

Some classes are not easily modified due to internal optimisations in the JVM e.g. you cannot add more than one method to Object to Sun/Oracle's JVM ;)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜