Посмотреть созданные строковые объекты в системе - PullRequest
3 голосов
/ 28 июля 2010

Я хочу увидеть значения созданных строковых объектов в системе.Для этого я перезаписываю String.class с помощью опции Xbootclasspath.В моем новом переопределяющем классе я изменил конструкторы String.class, добавив к каждому строку System.out.println (value), так что

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)

Если кто-нибудь подскажет мне, как увидеть созданные строковые объекты, я был бы очень рад.

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Это означает, что System.out равно нулю. Фактически при загрузке некоторых классов создается новое String, а поле System.out еще не инициализировано.

Вы должны отложить печать или просто сохранить информацию о созданной строке в приватном поле, и последние могут просмотреть это поле, используя, например, отладчик.

0 голосов
/ 28 июля 2010

Я полагаю, что строки инициализируются до инициализации System.out. Если вы можете игнорировать эти строки на ранней стадии программы, возможно, вы могли бы попробовать что-то вроде:

if (System.out != null) 
  System.out.println(value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...