我可以創建一個我自己的包,它與Java中的預定義包
具有相同的名稱,例如java.lang
?我可以創建一個自定義的java。*包嗎?
如果是這樣,結果會是什麼?難道我不能訪問該包的受保護的成員嗎?
如果不是,什麼阻止我這樣做?
我可以創建一個我自己的包,它與Java中的預定義包
具有相同的名稱,例如java.lang
?我可以創建一個自定義的java。*包嗎?
如果是這樣,結果會是什麼?難道我不能訪問該包的受保護的成員嗎?
如果不是,什麼阻止我這樣做?
否 - java.lang
被禁止。安全管理器不允許java.lang
包中的「自定義」類,並且無法告訴他接受它們。
你是對的 - 在java.lang
命名空間中聲明的自己的類將允許您使用protected
方法以及該包中的類的成員,這是絕對不需要的。
這種精細編譯 - 但是 - 嘗試執行它;)
package java.lang;
public class EvilAsEvilCanBe {
public static void main(String[] args) {
System.out.println("hehe");
}
}
有兩件事情阻止您。
1)許可協議。 「注意:使用此選項來覆蓋rt.jar中的類的應用程序不應該被部署,因爲這樣做會違反Java 2 Runtime Environment二進制代碼許可證。」 http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html
2)您必須使用-Xbootclasspath:bootclasspath
或添加一個lib/endorsed目錄。
由於JVM中的內部優化,某些類不容易修改,例如,您不能將多個方法添加到Object到Sun/Oracle的JVM;)
禁止任何與「java。*」匹配的包名,並且會引發安全異常。
我剛剛給了java.lang作爲示例包?你說安全經理會阻止它。但這是否意味着我可以做到這一點,例如第三方軟件包沒有安全管理員或某種許可? – 2011-04-15 16:58:58