Почему возникает проблема с чтением нестатической переменной из main? - PullRequest
8 голосов
/ 12 января 2011
String name = "Marcus";
static String s_name = "Peter";

public static void main(String[] args) {    
    System.out.println(name);//ERROR
    System.out.println(s_name);//OK
}

ОШИБКА: невозможно сделать статическую ссылку на нестатическое имя поля

Ответы [ 3 ]

6 голосов
/ 12 января 2011

Причина, по которой это вызывает проблему, заключается в том, что main является статическим методом, что означает, что у него нет объекта-получателя. Другими словами, он не работает относительно какого-либо объекта. Следовательно, если вы попытаетесь найти нестатическое поле, то Java запутается в том, в каком объекте находится это поле. Обычно предполагается, что поле находится в том объекте, из которого вызывается метод, но поскольку static этот объект не существует.

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

2 голосов
/ 12 января 2011

Для доступа к нестатическим переменным и функциям-членам у вас должен быть определенный объект. (например, если все, что было внутри class Bob { ... }, вам нужно сделать что-то вроде

Bob bob = new Bob(); 
System.out.println(bob.name);

внутри вашего основного.

0 голосов
/ 07 июля 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...