2013-07-20 52 views
7

我发现java。*和javax。*是非法(保留)软件包名称(在“OCA Java SE 7程序员I学习指南”一书中)的信息。当我尝试创建包的“Java”,并从它运行类,我得到:它是否是“javax”非法(保留)包名或不是?

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java 

,但是当我从“的javax”包运行I类收到任何错误。在docs.oracle.com我发现只有信息:

Packages in the Java language itself begin with java. or javax. 

所以...是“的javax”非法的名字或不?也许这只是在Java EE或更旧版本的Java上是非法的(我已经在JDK 1.6.0_43和1.7.0_25上试过了)

+0

http://stackoverflow.com/questions/727844/javax-vs-java-package – ZhongYu

+1

谢谢,我已经看过这个线程。它提供了关于javax包的很好的信息,但是它没有说它是否是包的合法名称。 – SathOkh

回答

3

javax.用于扩展(可能在JRE内),所以确定它是可以在这些包中定义类。 IIRC,通过将javax.添加到package.definition安全属性(未选中),可以在不可信的上下文中禁用此功能。

java.是特殊的,因为ClassLoader可防止这些程序包中的非引导类加载器作为反微软措施。

+0

因为classloader,我不认为Java是特殊的;它包含Java的官方基线API。你有这个答案的任何参考? –

+1

@owlstead'java/lang/ClassLoader.java'。特别是'preDefineClass'方法。 –

+0

那么,这只是书中的错误? – SathOkh

相关问题