2011-04-15 98 views

回答

7

否 - java.lang被禁止。安全管理器不允許java.lang包中的「自定義」類,並且無法告訴他接受它們。

你是對的 - 在java.lang命名空間中聲明的自己的類將允許您使用protected方法以及該包中的類的成員,這是絕對不需要的。


這種精細編譯 - 但是 - 嘗試執行它;)

package java.lang; 

public class EvilAsEvilCanBe { 

    public static void main(String[] args) { 
     System.out.println("hehe"); 
    } 

} 
+2

我剛剛給了java.lang作爲示例包?你說安全經理會阻止它。但這是否意味着我可以做到這一點,例如第三方軟件包沒有安全管理員或某種許可? – 2011-04-15 16:58:58

2

有兩件事情阻止您。

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;)

3

禁止任何與「java。*」匹配的包名,並且會引發安全異常。

相關問題