为什么我不能像java.basic那样创建包名?

时间:2013-12-28 17:56:34

标签: java

package java.basic;

public class Test {

    public static void main(String[] args) {

        int जानिए = 7;

        System.out.println(जानिए);

    }


}

上面的课正在编译,但是在运行异常后

java.lang.SecurityException: Prohibited package name: java.basic
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
Exception in thread "main" 

4 个答案:

答案 0 :(得分:2)

请参阅docs

  

Java语言中的包本身以 java。或javax。

开头

java.不适合你,英文字母有26个字母。使用它们生成java以外的名称。

另见java.lang

  

提供对Java设计至关重要的类   编程语言。

它适用于Java代码,默认情况下会在每个代码中导入。

答案 1 :(得分:2)

因为否则您的类将可以访问标准JDK类的default (no modifiers) / protected成员,而这些成员并不打算向开发人员公开其内部详细信息。

禁止java.*个包中的自定义类禁止您利用此类内容。

答案 2 :(得分:1)

允许使用名为java的用户创建包将允许访问包私有字段,方法和构造函数。

答案 3 :(得分:1)

java是保留的包名称。只有JVM内的类可以驻留在此包中。

如果有人可以在java包中写入,那么可能会导致库任意用自己的实现替换核心Java类。这可能导致很多事情,从破坏核心Java功能到执行恶意代码。