Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Вызов toString на наборе должен возвратить строку, содержащую все строковые представления элементов.
Это не будет работать со встроенными массивами, хотя, поскольку они не имеют переопределения toString и просто дадут Вам адрес памяти.
Я не знаю об эквиваленте print_r в Java.
, Но...
Каждый объект имеет реализацию по умолчанию toString (), метод, реализации списка и реализации Map печатают их содержание при вызове toString () для них.
, Если Вам нужна распечатанная отладочная информация, toString () может быть место, которое Вы ищете.
Вы могли бы попробовать старый добрый Apache палата общин Lang's ToStringBuilder.
Другие упомянули toString()
метод. Это действительно только полезно, когда объект реализует toString()
. Если это не было реализовано правильно, Вы закончите с чем-то вроде этого: java.lang.Object@1b9240e
.
, Даже если это немного утомительно, все еще легко реализовать toString()
в Ваших собственных классах, но сторонние классы будут не всегда реализовывать его. Вы - очень более обеспеченное использование отладчика. Единственная причина вещи как print_r
даже существуют в PHP, из-за отсутствия реального отладчика. Я думаю, что Вы найдете, что способность установить точки останова вместо того, чтобы использовать набор диагностических операторов печати приведет к намного более быстрому рабочему процессу и более чистому коду.
Нет никакого эквивалента для print_r в Java.
, Но для карт или списков можно использовать цикл foreach как это:
List <String> list = …; // fills your list
// print each list element
for (String s : list) {
System.out.println(s);
}
В зависимости от точно, что Вы хотите сделать, решение могло быть довольно простым. Следующее не произведет отформатированный вывод, который обеспечивает print_r, но это позволит Вам производить структуру списков, массивов и карт:
// Output a list
final List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
System.out.println(list);
// Output an array
final String[] array = {"four", "three", "two", "one"};
System.out.println(Arrays.asList(array));
// Output a map
final Map<String, String> map = new HashMap<String, String>();
map.put("one", "value");
map.put("two", "value");
map.put("three", "value");
System.out.println(map.entrySet());
Для других типов объектов Вы могли использовать отражение для создания утилита с этой целью.
Для массивов самым легким путем является Arrays.asList (массив) .toString (). Я обычно реализую toString () на объектах, которые я люблю к habe в выводах отладки. Для сгенерированных объектов (JAXB и т.д.), хотя, возможно, должен был бы сделать служебный класс для печати его.