简体   繁体   中英

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 prevents 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");
    }

}

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

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 eg you cannot add more than one method to Object to Sun/Oracle's JVM ;)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM