【发布时间】:2015-11-14 00:12:00
【问题描述】:
我只是在玩包结构。令我惊讶的是,我可以通过使用该名称创建我的包和类名来绕过默认类。
例如:
我创建了一个名为java.lang 的包,类为Boolean。当我导入java.lang.Boolean 时,它不是JDK 的Boolean 版本。这是我的。它只是显示了每个java对象都有的Objects的方法。
为什么会这样?为什么允许我创建包java.lang?并且程序运行良好。
另一个问题是,如果我创建一个名为 Object 的 Class 并尝试运行该程序,则会出现异常
java.lang.SecurityException: Prohibited package name: java.lang
at java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
为什么会出现这种行为?这是错误还是正常行为?
【问题讨论】:
-
使用自定义
Boolean时程序的输出是什么?你能发布 full 堆栈跟踪吗?