Использование нестатической переменной для статического метода через объект? Джава - PullRequest
4 голосов
/ 18 марта 2019

Поскольку мы не можем использовать this внутри статического метода, и мы также не можем использовать нестатические переменные, почему мы можем использовать объекты, которые используют нестатические переменные внутри статических методов?

Вот что я имею в виду:

public int x;
public int y;

public Account(int a, int b) {
    this.x = a;
    this.y = b;
}

public static void Swap(Account acc) {
    int holder;
    holder = acc.x;
    acc.x = acc.y;
    acc.y = holder;
}

Так что Swap() будет работать, даже если переменные внутри объекта не являются статическими. Я не понимаю эту часть. Был бы признателен за помощь. ТИА!

Ответы [ 2 ]

7 голосов
/ 18 марта 2019

static методы не могут получить доступ к переменной экземпляра текущего (this) экземпляра, поскольку в их контексте такого экземпляра не существует.

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

В случае вашего примера swap, если бы этот метод не был static, вы могли бы удалить аргумент acc и работать с экземпляромпеременные this:

public void swap() {
    int holder;
    holder = this.x;
    this.x = this.y;
    this.y = holder;
}
1 голос
/ 18 марта 2019

Вы не можете использовать this в статическом методе, потому что Java не знает, на какой экземпляр (какой это) вы ссылаетесь.

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

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

...