Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
, почему я не могу получить доступ к теневой переменной в методе inTestOne () с ключевым словом this это в строке 8
blockquote>Поскольку
x
является не переменная-член класса; это локальная переменная . Ключевое словоthis
можно использовать для доступа к полям членов класса, а не локальным переменным.Как только переменная затенена, у вас нет доступа к ней. Это нормально, потому что переменная и локальный внутренний класс являются вашими изменениями; если вы хотите получить доступ к теневой переменной, все, что вам нужно сделать, это переименовать ее (или переименовать переменную, которая ее тень, что имеет для вас больше смысла).
Примечание. Не забудьте отметить локальная переменная
final
, иначе вы не сможете получить доступ к ней, даже если она не затенена.
this.
используется для доступа к членам - локальная переменная не является членом, поэтому к ней невозможно получить доступ, когда она затенена.
x
является эффективным окончательным, но не final
, поэтому доступ к нему из локального класса работает только в Java 8+.
– Alexander Gessler
25 August 2014 в 17:16