Рассмотрим приведенный ниже код. Есть ли способ доступа к переменной & ldquo; iry & rdquo; из innerClassMethod (), если имя переменной & ldquo; iry & rdquo; изменен на & ldquo; i & rdquo ;? [Дубликат]

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

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

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 ");
        }
    }
}
3
задан Blaster 25 August 2014 в 17:12
поделиться

2 ответа

, почему я не могу получить доступ к теневой переменной в методе inTestOne () с ключевым словом this это в строке 8

Поскольку x является не переменная-член класса; это локальная переменная . Ключевое слово this можно использовать для доступа к полям членов класса, а не локальным переменным.

Как только переменная затенена, у вас нет доступа к ней. Это нормально, потому что переменная и локальный внутренний класс являются вашими изменениями; если вы хотите получить доступ к теневой переменной, все, что вам нужно сделать, это переименовать ее (или переименовать переменную, которая ее тень, что имеет для вас больше смысла).

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

5
ответ дан dasblinkenlight 20 August 2018 в 09:48
поделиться

this. используется для доступа к членам - локальная переменная не является членом, поэтому к ней невозможно получить доступ, когда она затенена.

2
ответ дан Mureinik 20 August 2018 в 09:48
поделиться
  • 1
    И даже тогда x является эффективным окончательным, но не final, поэтому доступ к нему из локального класса работает только в Java 8+. – Alexander Gessler 25 August 2014 в 17:16
Другие вопросы по тегам:

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