Использование статики в Java - PullRequest
0 голосов
/ 27 января 2011

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

также

можно ли использовать нестатическую переменную внутри статического метода?

Спасибо

Ответы [ 5 ]

4 голосов
/ 27 января 2011

Статическая переменная может быть доступна из любого места.Нестатические переменные могут быть доступны только из нестатического метода или из определенного объекта (экземпляра класса).

Причина этого может быть довольно сложной, но вкратце:

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

Теперь, очевидно, пока не создан экземпляр класса,не может быть ничего нестатичного - для них нет объекта, которому они могли бы принадлежать.Поскольку статические члены не требуют наличия экземпляра класса, для них небезопасно получить доступ к членам, для которых требуется экземпляр объекта (не статический).

3 голосов
/ 27 января 2011

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

class StaticOrNot {

    static int staticVar = 1;
    int instVar = 2;

    static void staticMethod() {
        staticVar += 1;
        StaticOrNot someInstance = new StaticOrNot();
        someInstance.instVar += 2;
    }

    void nonStatic() {
        staticVar += 1;
        instVar += 2;  // using this as instance
    }
}
1 голос
/ 27 января 2011

Подумайте, что значит использовать нестатическую переменную в статическом контексте. Статический метод не выполняется ни в одном экземпляре - поэтому, что бы он значил, работая с полем-членом, определенным в классе? К какому экземпляру относится это поле? Ни один!

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

1 голос
/ 27 января 2011

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

Да.

можно ли использовать нестатическую переменную внутри статического метода?

Количество

0 голосов
/ 27 января 2011

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

Да.

можно ли использовать нестатическая переменная внутри статического метода?

Только если в этом статическом методе есть экземпляр класса.

...