2010-07-28 54 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);