связь между статическим методом и полем экземпляра в Java - PullRequest
1 голос
/ 03 января 2011

"Статические методы могут не взаимодействовать с полями экземпляра, только со статическими полями". Я должен прочитать эти цитаты. Когда я изучал другие темы на этом форуме, я обнаружил, что мы можем использовать поля экземпляра в статических методах и наоборот. Итак, что означает эта цитата ?? Это правда?

Ответы [ 6 ]

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

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

Метод static - один на класс, в то время как класс может иметь много экземпляров.Итак, если у вас есть 2 экземпляра, поля которых будут видеть статические методы?

Давайте представим, что это действительно:

class Foo {
   private int bar;

   public static int getBar() {
      return bar; // does not compile;
   }
}

А затем:

Foo foo1 = new Foo();
foo1.bar = 1;
Foo foo2 = new Foo();
foo2.bar = 2;

Foo.getBar(); // what would this return. 1 or 2?
2 голосов
/ 03 января 2011
class MyClass{
  int i ;
  static String res;
  public static void myMethod(){
      i = 10 //not allowed because it is instance non static field
      res = "hello" ; allowed , because it is static field
      new MyClass().i = 10;//allowed as we are accessing it using an instance of that class
  }


}

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

См. Также

1 голос
/ 03 января 2011

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

Это не так;Вы не можете ссылаться на поля экземпляра в «статических» методах, потому что «статические» методы не принадлежат «экземпляру».

Рекомендуемое чтение: http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html

1 голос
/ 03 января 2011

Нельзя использовать поля экземпляра в статическом методе.На какой экземпляр вы ссылаетесь?

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

public class Stock {
  public double price = 0.0;

  public static void setPriceIncorrectly() {
     price = 0.0 // which price ?
  }

  public static void setPriceCorrectly() {
     Stock s = new Stock();
     s.price = 0.0 // which price ?
  }
}
0 голосов
/ 03 января 2011

Вам всегда нужен экземпляр для связи с полями экземпляра. Если у вас есть доступ к экземпляру (например, параметру или статическому полю), вы можете получить доступ к его членам. Но вы не можете получить доступ к полям экземпляра класса напрямую.

0 голосов
/ 03 января 2011

Вы не можете использовать то, что не существует.

Когда у вас есть статическое поле или метод, не связанный с instace. поэтому нестатических элементов не существует.

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