我是Java的新手,我有一个程序正在返回以下错误,我完全无法弄明白。我用Google搜索了一切。你能帮助我吗?
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
。
答案 0 :(得分:7)
您无法将新内容放入java.lang
包中。它由语言保留,因为这是核心Java内容已经存在的地方。实际上,java.lang
包中的所有内容都默认在任何Java代码中隐式导入。
它包含“对Java编程语言设计至关重要的类”。 (来自the docs)。由于用户定义的类根据定义不能对语言的设计至关重要,因此禁止将内容放在那里。允许用户将代码放在java.lang
包中也是一个问题,因为这会将在那里定义的任何包域内容暴露给用户。
只需更改您的包裹名称(几乎任何其他内容),您就可以了。按照惯例,软件包名称通常是小写的,但您可以使它适合您的项目。有关详情,请参阅tutorial on packages。
答案 1 :(得分:3)
右键单击你的包点击reflactor然后重命名它.....因为你使用了内部变量..见下图..
答案 2 :(得分:2)
java.lang
是来自jvm的系统包,它被隐式导入到java源代码,所以它已经被带到你不能拥有相同的包名
答案 3 :(得分:1)
您的包名与java。中提供的“内部”包一致。
答案 4 :(得分:1)
永远不允许用户代码将类放入其中一个标准Java包中。这样,用户代码就无法访问Java实现中的任何包私有类/方法/字段。其中一些包私有对象允许访问JVM内部。
@credit Chris Jester-Young
答案 5 :(得分:1)
在软件包名称中包含“ Java”只是发生了相同的错误。我以为您已经对此有了答案,但是这些内部软件包错误可能很难弄清楚。
只需更改包裹名称,您就应该是Gucci。
答案 6 :(得分: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 并尝试从外部执行它,您会得到同样的错误。
答案 7 :(得分:0)
这是一个java安全问题,它会通过改变包名来解决。