2013-07-20 19 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

相關問題