【问题标题】:Why I can not create package name like java.basic? [duplicate]为什么我不能创建像 java.basic 这样的包名? [复制]
【发布时间】:2014-01-16 01:01:31
【问题描述】:
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" 

【问题讨论】:

标签: java


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    禁止java.* 包中的自定义类禁止您利用此类东西。

    【讨论】:

      【解决方案3】:

      docs

      Java 语言本身的包以 java. 或 javax.

      开头

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

      另见java.lang:

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

      用于Java代码,每个代码默认导入。

      【讨论】:

      • 包必须用英文写吗?
      • 文档没有提到任何限制。但我认为我们都应该用英语写,因为这就是世界的交流方式:) 至少现在......
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-12
        • 2015-02-09
        • 2015-01-25
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多