2010-07-28 60 views
3

我想查看系統中創建的字符串對象的值。爲此,我使用Xbootclasspath選項覆蓋String.class。在我的新覆蓋類我修改String.class的構造,通過將行的System.out.println(值)每個,使得查看系統中創建的字符串對象

public String() { 
this.offset = 0; 
this.count = 0; 
this.value = new char[0]; 
System.out.println(value); 
} 

但我得到了錯誤,

Error occurred during initialization of VM 
java.lang.ExceptionInInitializerError 
at java.lang.Runtime.loadLibrary0(Runtime.java:819) 
at java.lang.System.loadLibrary(System.java:1030) 
at java.lang.System.initializeSystemClass(System.java:1077) 
Caused by: java.lang.NullPointerException 
at java.lang.String.<init>(String.java:219) 
at java.lang.StringBuilder.toString(StringBuilder.java:430) 
at java.io.File.<clinit>(File.java:167) 
at java.lang.Runtime.loadLibrary0(Runtime.java:819) 
at java.lang.System.loadLibrary(System.java:1030) 
at java.lang.System.initializeSystemClass(System.java:1077) 

如果任何人都可以點我如何看到創建的字符串對象,我會很高興。

+0

那裏的東西在你的字符串 – Bozho 2010-07-28 07:52:05

+0

線219線219點到線「的System.out.println(值) 「在構造函數中。 – user385435 2010-07-28 07:59:30

回答

2

這意味着System.out爲空。事實上,在加載某些類時,會創建一個新的String,並且System.out字段尚未初始化。

您應該改變打印方式,或者可能只是將有關已創建字符串的信息保存在專用字段中,後者使用調試器查看該字段。

0

我猜在System.out被初始化之前就會創建字符串。 如果你可以忽略早期階段的程序,這些字符串,也許你可以嘗試這樣的:

if (System.out != null) 
    System.out.println(value);