如果包名以”java“开始
如果我们写的Java类放在一个顶层包名为java的包里(如java.A,或者java.test.A),那么这个类将不能正常使用。
当new这类的时候,将会报错,抛出异常,异常信息:
Exception in thread "main" java.lang.SecurityException: Prohibited package name: javaat 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$100(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:268)at java.lang.ClassLoader.loadClass(ClassLoader.java:251)at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)at andy.MianClass.main(MianClass.java:9)
private ProtectionDomain preDefineClass(String name, ProtectionDomain protectionDomain) {if (!checkName(name)) throw new NoClassDefFoundError("IllegalName: " + name);//注意这里,name是指类的完整路径,如:java.util.ArrayListif ((name != null) && name.startsWith("java.")) { throw new SecurityException("Prohibited package name: " +name.substring(0, name.lastIndexOf('.')));}if (protectionDomain == null) { protectionDomain = getDefaultDomain();}if (name != null) checkCerts(name, protectionDomain.getCodeSource());return protectionDomain; }package java;public class A {public void test1(){//TODO}public static void test2(){//TODO}}