Java应用类的包名为什么不能以java.开头

 我来答
追忆小土豆
2017-08-30 · TA获得超过7739个赞
知道大有可为答主
回答量:4890
采纳率:0%
帮助的人:1520万
展开全部
我们自己编写的Java类默认情况下都由系统类加载器加载。系统类加载器也是ClassLoader的子类,也是通过调用ClassLoader.loadClass(name)方法来加载类,而扩展ClassLoader类的一般做法就是重写findClass(name)方法,然后调用defineClass(String name, byte[] b, int off, int len)返回。所以我们可以直接看ClassLoader的defineClass(String name, byte[] b, int off, int len)方法。
defineClass(String name, byte[] b, int off, int len)方法:
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
protected final Class<?> defineClass(String name, byte[] b, int off, int len)
throws ClassFormatError
{
return defineClass(name, b, off, len, null);
}
defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain)方法:
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
protected final Class<?> defineClass(String name, byte[] b, int off, int len,
ProtectionDomain protectionDomain)
throws ClassFormatError
{
check();
protectionDomain = preDefineClass(name, protectionDomain);

Class c = null;
String source = defineClassSourceLocation(protectionDomain);

try {
c = defineClass1(name, b, off, len, protectionDomain, source);
} catch (ClassFormatError cfe) {
c = defineTransformedClass(name, b, off, len, protectionDomain, cfe, source);
}

postDefineClass(c, protectionDomain);
return c;
}
preDefineClass(String name,ProtectionDomain protectionDomain)方法有如下一段代码:
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
if ((name != null) && name.startsWith("java.")) {
throw new SecurityException("Prohibited package name: " +
name.substring(0, name.lastIndexOf('.')));
}
如果类名不为空,并且以java.开头,就抛出异常!
当然,检测包名不只这么简单,正式加载字节码文件的时候还会对包名进行检测。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-08-12
展开全部
JAVA 的JDK 自带的才是java.

~
~
~
~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式