Как Оператор запятой работает

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

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

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 ");
        }
    }
}
165
задан Coding Mash 12 November 2012 в 04:47
поделиться

6 ответов

Это было бы равно b.

оператор запятой имеет более низкий приоритет, чем присвоение.

73
ответ дан msanford 23 November 2019 в 21:06
поделиться

Оператор запятой имеет самый низкий приоритет всех операторов C/C++. Поэтому это всегда - последнее, которое свяжет с выражением, означая это:

a = b, c;

эквивалентно:

(a = b), c;

Другой интересный факт - то, что оператор запятой представляет точка последовательности . Это означает что выражение:

a+b, c(), d

, как гарантируют, будет иметь его три подвыражения ( a+b, c () и d) оцененный в порядке. Это значительно, если у них есть побочные эффекты. Обычно компиляторам позволяют оценить подвыражения в любом порядке, они находят соответствие; например, в вызове функции:

someFunc(arg1, arg2, arg3)

аргументы могут быть оценены в произвольном порядке. Обратите внимание, что запятые в вызове функции не операторы; они - разделители.

122
ответ дан efotinis 23 November 2019 в 21:06
поделиться

Всего хорошего, чтобы заметить, что оператор запятой может быть перегружен в C++. Фактическое поведение может таким образом очень отличаться от ожидаемого того.

Как пример, Повышение. Дух использование оператор запятой вполне умно для реализации инициализаторов списка для таблиц символов. Таким образом это делает следующий синтаксис возможным и значимым:

keywords = "and", "or", "not", "xor";

Уведомление, что из-за приоритета оператора, код (намеренно!) идентичный

(((keywords = "and"), "or"), "not"), "xor";

таким образом, первый названный оператор keywords.operator =("and"), который возвращает объект прокси, на который оставление operator, вызываются с:

keywords.operator =("and").operator ,("or").operator ,("not").operator ,("xor");
127
ответ дан Konrad Rudolph 23 November 2019 в 21:06
поделиться

Значение a будет b, но значение [1 110] выражение будет c. Таким образом, в

d = (a = b, c);

быть равным b, и d был бы равен c.

37
ответ дан jww 23 November 2019 в 21:06
поделиться

значение b будет присвоено a. Ничего не произойдет с c

8
ответ дан prakash 23 November 2019 в 21:06
поделиться

Значение желания быть равным b, так как оператор запятой имеет более низкий приоритет, чем оператор присваивания.

2
ответ дан Lightness Races with Monica 23 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

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