我試圖做一些事情,應該是很容易的,但一些如何我一直沒有重新編譯......添加方法現有的Java類,並與我的項目
的想法是把現有的Java類從Java庫(在本例中的Java太陽) 稍作修改..重新編譯的類,並使用修改後的類在我們的項目
的步驟(我把String.java從java.lang中的舉例)
修改String String.java加入:
public int zzz() { return 123; }
只是在類的構造函數下。
重新編譯String.java
javac -d String String.java
罐子-CF編譯後的文件 這是結果:罐子-vtf String.jar:
0 Wed May 22 10:31:06 IDT 2013 META-INF/ 68 Wed May 22 10:31:06 IDT 2013 META-INF/MANIFEST.MF 9763 Wed May 22 10:30:44 IDT 2013 java/lang/String$1.class 1232 Wed May 22 10:26:04 IDT 2013 java/lang/String$CaseInsensitiveComparator.class 17269 Wed May 22 10:26:04 IDT 2013 java/lang/String.class
寫短主類:
public class main { /** * @param args */ public static void main(java.lang.String[] args) { // TODO Auto-generated method stub java.lang.String s = new java.lang.String(" xxx "); s = s.concat("bla bla"); System.out.println(s); System.out.println(s.zzz()); } }
(我想java.lang.String中,只是字符串時獲得相同的行爲。)
5.compile我main.java與修改後的String類
javac -Xbootclasspath/p:String.jar main.java
6.run主要
java -Xbootclasspath/p:String.jar main
給了我們以下的輸出:
[email protected]:~/work/sand_box$ java -Xbootclasspath/p:String.jar main
xxx bla bla
Exception in thread "main" java.lang.NoSuchMethodError: java.lang.String.<init>([CZ)V
at java.lang.Integer.toString(Integer.java:333)
at java.lang.Integer.toString(Integer.java:136)
at java.lang.String.valueOf(String.java:2948)
at java.io.PrintStream.print(PrintStream.java:597)
at java.io.PrintStream.println(PrintStream.java:736)
at main.main(main.java:12)
我不知道我在做什麼錯誤 有人可以請擺脫這個請點亮嗎?
10x給所有的貢獻者。
你想重新編譯'String'類沒有任何它需要在類路徑中相關類的? – vikingsteve
@vikingsteve不javac從正在使用的jdk中獲取所有必需的類? 在我的情況: Java版本 「1.7.0_11」 的Java(TM)SE運行時環境(建立1.7.0_11-B21) 的HotSpot的Java(TM)64位服務器VM(建23.6-B04,混合模式) /usr/lib/jvm/java-7-oracle/jre/bin/java –
有趣的一點,但是因爲你試圖從jdk重新編譯一個類,所以我想假設所有的jdk源代碼都必須到位(?) – vikingsteve