2013-09-29 5 views
-3

В java мой proffesor сказал нам, что вы не можете использовать нестатические члены класса внутри статического метода. Он также сказал, что вы не можете использовать ключевое слово «this» в статическом методе. Почему это?Нестатические элементы внутри статического метода

+8

Вам нужно узнать, что такое статические методы. – SLaks

+0

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html http://introcs.cs.princeton.edu/java/21function/ – SLaks

ответ

1

Нестатические члены класса и this связаны с экземпляром класса, тогда как статический метод не связан ни с каким экземпляром, но с самим классом.

0

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

1

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

Что касается this, то this относится к нестатической переменной, принадлежащей объекту. Поскольку вы не можете получить доступ к нестационарным переменным из статических методов, вы не должны вызывать this в статическом методе.

1

Иногда пример помогает. Рассмотрим этот класс:

class Foo { 
    int bar; // non-static member 

    Foo(int bar) { 
    this.bar = bar; 
    } 

    static int getBar() { 
    return bar; // invalid - what if we have many Foos with different bars? 
    } 
} 

Теперь представьте attemping использовать этот класс:

public static void main(String[] args) { 
    Foo foo1 = new Foo(1); // bar is 1 in this instance 
    Foo foo2 = new Foo(2); // bar is 2 in this instance 
    int bar = Foo.getBar(); // which instance of Foo would we get bar from? 
} 
0

Non статические члены класса и this ключевого слова связаны с объектами класса и статического метода, связанного с классом.
Вещь objects знает все о классе, поэтому объект может получить доступ ко всем классам статических методов.
И class имеют no информацию о своем objects, поэтому статический метод не может получить доступ к объектам.

Смежные вопросы