Есть ли название для & ldquo; this & rdquo; в Java?

Другое событие 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));
}

26
задан eckes 13 December 2012 в 01:30
поделиться

4 ответа

Мне кажется, что вы пытаетесь создать метод, который повторно инициализирует ваш объект, т. Е. Устанавливает его обратно в исходные значения. Вот почему вы хотите создать новый объект и назначить его текущему объекту, верно?

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

Что если вместо этого вы попробовали что-то вроде этого:

public class Thing {

    String a1;
    int a2;

    public Thing() {
        this.meth();
    }

    public void meth() {
        this.a1 = "a1";
        this.a2 = 2;
    }

}

Таким образом, Thing.meth () фактически инициализирует ваш объект, и конструктор вызывает его при создании объекта. Затем вы можете позвонить снова, когда захотите.

0
ответ дан Dan Jones 13 December 2012 в 01:30
поделиться

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");
1
ответ дан code4j 13 December 2012 в 01:30
поделиться

Вы не можете назначить this в Java. Это не переменная; это ключевое слово.

Одна вещь, которую вы могли бы рассмотреть, если вам не нужен конкретный экземпляр, это просто return использовать ваш новый экземпляр.

public class Thing{

  String a1;
  int a2;

  public Thing meth(){
    Thing A = new Thing();
    return A;
  }
}

и вы будете использовать его как

whatever = whatever.meth();
6
ответ дан cHao 13 December 2012 в 01:30
поделиться

Согласно спецификации java lang §15.8.3 this является ключевым словом , которое является либо выражением , выражением , либо выражением

  1. При использовании в качестве основного выражения this обозначает значение, которое является ссылкой на объект, для которого был вызван метод экземпляра.
    • Выражение: Нечто, оценивающее значение. Пример: x ++
  2. Ключевое слово this также используется в специальном явном вызове конструктора в выражении
    • в выражении : Синтаксические элементы, которые управляют выполнением программы, которые выполняются по своему эффекту и не имеют значений Пример: if (true)

В любом случае это не переменная

  • Переменная: Место хранения со связанным типом

В ваш случай this является выражением , а не переменной . Но для всех целей и целей просто назовите его ключевым словом

  • Ключевое слово: Символьная последовательность, сформированная из букв ASCII, зарезервирована для использования ... которые нельзя использовать в качестве имени переменной
4
ответ дан jermel 13 December 2012 в 01:30
поделиться
Другие вопросы по тегам:

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