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

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
}

А: не может сделать статическую ссылку на нестатическое имя поля

 dkarp12 янв. 2011 г., 04:41
Та же проблема, что и с нестатическими методами. Видетьstackoverflow.com/questions/2042813/...

Ответы на вопрос(3)

Решение Вопроса

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

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

 user20742112 янв. 2011 г., 07:25
Я также не сказал бы, что Java «запутывается». Здесь нечего путать. Нет экземпляра объекта. Период. Таким образом, нет никакого доступа к полю экземпляра.
 Chris Thompson12 янв. 2011 г., 04:48
Технически, объект, с которым вы работаете, это сам класс. Я также не сказал бы, что это общее правило ... Я бы сказал, что это правило.

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

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

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

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

 Matt12 янв. 2011 г., 06:20
(Спасибо за редактирование. Кажется, в последнее время я пишу слишком много Ruby.)

Ваш ответ на вопрос