Java: print_r?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

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 ");
        }
    }
}
18
задан Community 23 May 2017 в 10:29
поделиться

7 ответов

Вызов toString на наборе должен возвратить строку, содержащую все строковые представления элементов.

Это не будет работать со встроенными массивами, хотя, поскольку они не имеют переопределения toString и просто дадут Вам адрес памяти.

10
ответ дан 30 November 2019 в 07:18
поделиться

Я не знаю об эквиваленте print_r в Java.

, Но...

Каждый объект имеет реализацию по умолчанию toString (), метод, реализации списка и реализации Map печатают их содержание при вызове toString () для них.

, Если Вам нужна распечатанная отладочная информация, toString () может быть место, которое Вы ищете.

0
ответ дан 30 November 2019 в 07:18
поделиться

Вы могли бы попробовать старый добрый Apache палата общин Lang's ToStringBuilder.

7
ответ дан 30 November 2019 в 07:18
поделиться

Другие упомянули toString() метод. Это действительно только полезно, когда объект реализует toString(). Если это не было реализовано правильно, Вы закончите с чем-то вроде этого: java.lang.Object@1b9240e.

, Даже если это немного утомительно, все еще легко реализовать toString() в Ваших собственных классах, но сторонние классы будут не всегда реализовывать его. Вы - очень более обеспеченное использование отладчика. Единственная причина вещи как print_r даже существуют в PHP, из-за отсутствия реального отладчика. Я думаю, что Вы найдете, что способность установить точки останова вместо того, чтобы использовать набор диагностических операторов печати приведет к намного более быстрому рабочему процессу и более чистому коду.

2
ответ дан 30 November 2019 в 07:18
поделиться

Нет никакого эквивалента для print_r в Java.

, Но для карт или списков можно использовать цикл foreach как это:

List <String> list = …; // fills your list 

// print each list element 

for (String s : list) {

   System.out.println(s);

 }
0
ответ дан 30 November 2019 в 07:18
поделиться

В зависимости от точно, что Вы хотите сделать, решение могло быть довольно простым. Следующее не произведет отформатированный вывод, который обеспечивает 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());

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

8
ответ дан 30 November 2019 в 07:18
поделиться

Для массивов самым легким путем является Arrays.asList (массив) .toString (). Я обычно реализую toString () на объектах, которые я люблю к habe в выводах отладки. Для сгенерированных объектов (JAXB и т.д.), хотя, возможно, должен был бы сделать служебный класс для печати его.

0
ответ дан 30 November 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: