4

我是 Java 的新手,我有一个程序返回以下我完全无法弄清楚的错误。我用谷歌搜索了一切。你们能帮帮我吗?

package java.lang;
public class S1 {
public static void main(String[] args) {
    for (int i=1;i<=1000;i++)
        {
            String str = "1" +i;
        }
    }
}

 

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.lang
    at java.lang.ClassLoader.preDefineClass(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$100(Unknown Source)
    at java.net.URLClassLoader$1.run(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)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

我正在使用 Eclipse,并且正在使用java.lang文件中的包S1.java

4

8 回答 8

10

您不能将新内容放入java.lang包中。它由语言保留,因为它是核心 Java 内容所在的位置。事实上,java.lang默认情况下,包中的所有内容都隐式导入到任何 Java 代码中。

它包含“Java 编程语言设计的基础类”。(来自文档)。由于根据定义,用户定义的类不能对语言的设计至关重要,因此禁止您将内容放在那里。允许用户将代码放入java.lang包中也是一个问题,因为这会将那里定义的任何包域内容暴露给用户。

只需更改您的软件包名称(几乎可以更改为其他任何名称),您就可以开始使用了。按照惯例,包名称通常是小写的,但您可以将其命名为对您的项目有意义的任何名称。有关更多信息,请参阅有关包的教程

于 2013-06-27T22:29:20.113 回答
3

右键单击您的包单击反射器,然后重命名它.....因为您使用了内部变量..见下图..

在此处输入图像描述

于 2014-05-24T08:41:27.163 回答
2

java.lang是来自 jvm 的系统包,它被隐式导入到 java 源,所以它已经被你不能拥有相同的包名

于 2013-06-27T22:29:05.747 回答
1

您的包名与 java 中提供的“内部”包一致。

于 2013-06-27T22:29:20.720 回答
1

绝不允许用户代码将类放入标准 Java 包之一。这样,用户代码就无法访问 Java 实现中的任何包私有类/方法/字段。其中一些包私有对象允许访问 JVM 内部。

@credit Chris Jester-Young

于 2013-06-27T22:30:14.387 回答
1

在包名称中包含“Java”时出现了同样的错误。我假设您已经对此有了答案,但是这些内部包错误可能很难弄清楚。

只需更改您的包裹名称,您就应该是 Gucci。

于 2020-11-06T16:36:48.567 回答
0

问题是您在代码中使用package而不是:import

// package java.lang; <-- this is wrong! You don't need it 

public class S1 {
    public static void main(String[] args) {
        for (int i=1;i<=1000;i++)
        {
            String str = "1" +i;
        }
    }
}

也不要把你的代码放在一个文件夹中调用java并尝试从外部执行它,你会得到同样的错误。

于 2021-04-02T05:54:08.610 回答
0

这是一个 java 安全问题,它将通过更改包名称来解决。

于 2021-04-18T17:28:50.743 回答