C ++ Member variable Инициализирован с ненулевым значением, но равен нулю в функции-члене [duplicate]

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

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

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 ");
        }
    }
}
1
задан Ediac 27 May 2015 в 22:48
поделиться

1 ответ

Локальная переменная будет затенять элемент один (он имеет более узкую область). Если вы просто напишете

Data = 4;

, вы назначаете локальную переменную Data. Вы все равно можете получить доступ к переменной-члену с помощью

this->Data = 4;

. Это работает в основном так же, как

{
int data = 4;
    {
    int data = 2;
    data++; // affects only the inner one
    }
}

. Что касается проблем в будущем: до тех пор, пока вы и все, кто когда-либо будет работать с вашим кодом понимает правила и знает, что вы сделали это специально, нет проблем. Если вы не намерены делать такие вещи нарочно, сделайте свой компилятор предупреждением об этом.

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

class A{
    int Data_;

    void MethodA();
};
5
ответ дан Baum mit Augen 18 August 2018 в 03:05
поделиться
Другие вопросы по тегам:

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