Ply*_*ock 3 java securityexception compilation
假设我LangTest.java以下列方式创建一个类:
package java.lang;
public class LangTest
{
public static void show()
{
System.out.println("In langTest.show()");
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个类中,我甚至将该方法称为:
LangTest.show();
Run Code Online (Sandbox Code Playgroud)
他们都没有给出任何编译问题,但在运行时它会抛出异常. -
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.lang
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:479)
at java.lang.ClassLoader.defineClass(ClassLoader.java:614)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at com.javatpoint.Test.main(Test.java:28)
Run Code Online (Sandbox Code Playgroud)
只要您创建以" java." 开头的包名称,就会发生这种情况.
我的问题是为什么我们不允许在java.lang或类似的东西中创建一个类?而且,为什么在这种情况下没有给出编译错误?
我的问题是为什么我们不允许在java.lang或类似的东西中创建一个类?
你可以在那里创建一个类.但出于安全原因,"普通"类加载器不允许您加载它,它只接受来自JDK自己的核心jar文件.这是为了保护Java用户免于运行可能完全破坏其系统的恶意代码(例如破坏沙箱限制).
如果要实现自己的java.*类版本,则必须实现自己的JDK(或者至少创建自己的runtime.jar版本).
而且,为什么在这种情况下没有给出编译错误?
那么,JDK标准库也需要由相同的Java编译器编译......
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |