На то, какова причина позади “нестатического метода, нельзя сослаться от статического контекста”? [дубликат]

257
задан Ivan Gerasimenko 30 November 2017 в 23:11
поделиться

8 ответов

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

350
ответ дан Brian Knoblauch 23 November 2019 в 02:43
поделиться

Метод, который Вы пытаетесь назвать, является методом уровня экземпляра; у Вас нет экземпляра.

static методы принадлежат классу, не - static, методы принадлежат экземплярам класса.

60
ответ дан alisianoi 23 November 2019 в 02:43
поделиться

Я просто понял, я думаю, что люди не должны быть подвергнуты понятию "статических" очень рано.

Статические методы должны, вероятно, быть исключением, а не нормой. Особенно вначале так или иначе, если Вы хотите изучить ООП. (Почему запускаются с исключения из правила?) Это очень противопедагогически из Java, что "первой" вещью, которую необходимо изучить, является общественность статичный пустое главное. (Немного реальных JAVA-приложений имеют свои собственные основные методы так или иначе.)

12
ответ дан Hugo 23 November 2019 в 02:43
поделиться

Ответы до сих пор описывают, почему, но вот что-то еще, которое Вы могли бы хотеть рассмотреть:

Вы банка может назвать метод от instantiable класса путем добавления вызова метода его конструктора,

Object instance = new Constuctor().methodCall();

, или

primitive name = new Constuctor().methodCall();

Это полезно она, Вы только хотите использовать метод instantiable класса однажды в единственном объеме. Если Вы называете несколько методов от instantiable класса в единственном объеме, определенно создаете referable экземпляр.

7
ответ дан 4 revs 23 November 2019 в 02:43
поделиться

Статический метод связывает действие с типом объекта, тогда как не статический метод связывает действие с экземпляром того типа объекта. Обычно это - метод, который делает что-то с отношением к экземпляру.

Исключая:

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

2
ответ дан Robin 23 November 2019 в 02:43
поделиться

если метод не статичен, который "говорит" компилятору, что метод требует доступа к данным уровня экземпляра в классе, (как нестатическое поле). Эти данные не были бы доступны, если экземпляр класса не был создан. Таким образом, компилятор бросает ошибку, при попытке назвать метод от статического метода.. Если на самом деле метод НЕ ссылается ни на какого нестатического члена класса, сделайте метод статичным.

В Resharper, например, просто создав нестатический метод, который НЕ ссылается ни на какого статического члена класса, генерирует предупреждающее сообщение "Этот метод, может быть сделан статичным"

2
ответ дан Charles Bretana 23 November 2019 в 02:43
поделиться

Компилятор на самом деле добавляет аргумент нестатическим методам. Это добавляет a this pointer/reference. This is also the reason why a static method can not use this, потому что нет никакого объекта.

2
ответ дан 23 November 2019 в 02:43
поделиться

Суть объектно-ориентированного программирования заключается в инкапсуляции логики вместе с данными, с которыми она работает.

Методы экземпляра - это логика, поля экземпляра - это данные. Вместе они образуют объект.

public class Foo
{
    private String foo;
    public Foo(String foo){ this.foo = foo; }
    public getFoo(){ return this.foo; }

    public static void main(String[] args){
        System.out.println( getFoo() );
    }
}

Что может быть результатом выполнения вышеуказанной программы?

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

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

28
ответ дан 23 November 2019 в 02:43
поделиться
Другие вопросы по тегам:

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