
В статических методах нельзя вызывать non-static переменные или методы, т.к. на момнет их вызова, non-static члены класса еще не существуют - они существуют только в объекте.
Но в non-static можно вызывать static методы и переменные, т.к. они существуют независимо от того, был создан объект или нет.
public class SimpleUsing {
static int value = 20;
int result;
static int returnValue() { // В static-методах можно использовать static-переменные
return value;
}
int returnResult() {
return result;
}
void useStaticVariable() { // В non-static-методах можно
System.out.println(value+result); // использовать static-переменные
}
void useStaticMethod() { // non-static-методах можно
System.out.println(returnValue()); // использовать static-методы
}
static void useInstanceVariable() { //Ошибка компиляции. В static-методах нельзя
System.out.println(result); // использовать non-static-переменные
}
static void useInstanceMethod() { // Ошибка компиляции. В static-методах нельзя
System.out.println(returnResult()); // использовать non-static-методы
}
class Example {
public static void main(String[] args) {
SimpleUsing su = null;
System.out.println(su.value); // получаем доступ даже если ссылка
System.out.println(su.returnValue()); // проинициализирована как null
SimpleUsing su2 = new SimpleUsing();
su2.useStaticVariable();
su2.useStaticMethod();
}
}