【问题标题】:Is it "javax" illegal(reserved) package name or not?是否是“javax”非法(保留)包名?
【发布时间】:2013-07-20 15:36:57
【问题描述】:

我发现 java.* 和 javax.* 是非法(保留)包名称的信息(在“OCA Java SE 7 Programmer I Study Guide”一书中)。当我尝试创建包“java”并从中运行类时,我收到:

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

但是当我从“javax”包运行类时,我没有收到任何错误。在 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 上试过)

【问题讨论】:

标签: java packages naming


【解决方案1】:

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

java. 是特殊的,因为ClassLoader 会阻止这些包中的非引导类加载器作为一种反微软措施。

【讨论】:

  • 我不认为 Java 的特殊之处在于类加载器;它包含 Java 的官方基线 API。您对此答案有任何参考吗?
  • @owlstead java/lang/ClassLoader.java。特别是preDefineClass 方法。
  • @SathOkh 是的,否则无法实现特定的JSR's。将任何 other 库(除了 JSR 中指定的库)或应用程序放在 javax 命名空间中当然是非常不明智的。它不直接标记编译器错误这一事实并不意味着您应该使用它。
猜你喜欢
  • 1970-01-01
  • 2013-09-23
  • 2010-11-25
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 2016-08-19
相关资源
最近更新 更多