Почему другие методы могут быть «статичными», а конструктор - нет? - PullRequest
43 голосов
/ 16 октября 2011

Я не понимаю, почему основной метод должен быть статическим. Я понимаю статические переменные, но мне сложно понять статические методы. Существует ли статический метод, чтобы можно было создать два метода с одинаковыми именами в двух разных классах, которые не будут конфликтовать друг с другом?

Кроме того, я не понимаю, почему я не могу создать статический конструктор.

Может ли кто-нибудь помочь объяснить эту концепцию?

Ответы [ 13 ]

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

Конструктор не может быть статическим, потому что в языке OO процесс создания объекта выглядит следующим образом:

  • выделение объекта
  • вызов конструктора для инициализации нового-спределенный объект

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

Если бы конструктор был статическим, он не получил бы ссылку на вновь выделенный объект и, следовательно, не смог бы его инициализировать.

Таким образом, конструктор всегда может быть неstatic (так как он всегда вызывается из нестатического контекста) и всегда должен быть нестатичным (в противном случае он не сможет выполнить свою задачу).

0 голосов
/ 17 февраля 2014

Просто посмотрите на эту ссылку, она определенно поможет вам понять: Почему нельзя сделать конструктор статическим?

И

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

например,

  public class Foo
    {
       String name;
       int id;
        // define constructors
           Foo (String name, int id)
        {
            this.name = name;
            this.id = id;
        }

          p s v m(String[] arg)
      {
          Foo f1 = new Foo("Amit",001);
          Foo f2 = new Foo("Rahul",002);
      }
    }

Если мы создадим статический конструктор, то оба объекта (также f1) будут содержать последнее обновленное значение относительно имени иидентификатор как Рахул и 002.

0 голосов
/ 17 октября 2011

Вчера я написал простой пример в качестве ответа на связанный вопрос, который может помочь сделать вещи более понятными: в чем смысл конструктора Java?

Смысл статических методов заключается в том, чтоони могут быть вызваны без создания экземпляра класса, в то время как «нормальные» методы экземпляра связаны с экземпляром и не могут быть вызваны без него.

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

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