Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Мне кажется, что вы пытаетесь создать метод, который повторно инициализирует ваш объект, т. Е. Устанавливает его обратно в исходные значения. Вот почему вы хотите создать новый объект и назначить его текущему объекту, верно?
Если это так, давайте попробуем другой способ сделать это, поскольку, как уже было сказано, вы можете ' переназначить this
.
Что если вместо этого вы попробовали что-то вроде этого:
public class Thing {
String a1;
int a2;
public Thing() {
this.meth();
}
public void meth() {
this.a1 = "a1";
this.a2 = 2;
}
}
Таким образом, Thing.meth () фактически инициализирует ваш объект, и конструктор вызывает его при создании объекта. Затем вы можете позвонить снова, когда захотите.
this
относится к владельцу метода. В этом случае владельцем является сам объект.
Иногда this
может не относиться к классу, в котором вы пишете код. Как в раздражающем классе. Типичным примером является анонимный слушатель.
button.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
this; // refers to the ActionListener
}
}
);
Кроме того, вы можете вернуться this
можно сделать method chaining
. Предположим, у вас есть класс с именем Homework и у него есть метод addTask.
public Homework addTask(String task){
return this;
}
Вы можете вызвать метод addTask , например
homework.addTask("a").addTask("b").addTask("c");
Вы не можете назначить this
в Java. Это не переменная; это ключевое слово.
Одна вещь, которую вы могли бы рассмотреть, если вам не нужен конкретный экземпляр, это просто return
использовать ваш новый экземпляр.
public class Thing{
String a1;
int a2;
public Thing meth(){
Thing A = new Thing();
return A;
}
}
и вы будете использовать его как
whatever = whatever.meth();
Согласно спецификации java lang §15.8.3 this
является ключевым словом , которое является либо выражением , выражением , либо выражением
this
обозначает значение, которое является ссылкой на объект, для которого был вызван метод экземпляра. В любом случае это не переменная
В ваш случай this
является выражением , а не переменной . Но для всех целей и целей просто назовите его ключевым словом