Методы класса дублируются миллион раз, если у меня есть миллион экземпляров? - PullRequest
0 голосов
/ 25 сентября 2019

Допустим, у меня есть этот код:

class A {
  void f(){
    // ... some long function code
  }
}
for (int i = 0; i < 1000000; i++) {
  A a = new A();
}

Мой вопрос: будет ли функция в этом случае реплицироваться миллион раз в памяти?Если да, имеет ли смысл использовать статические методы?

Ответы [ 2 ]

4 голосов
/ 25 сентября 2019

Почему вы думаете, что метод f () должен быть воспроизведен миллион раз?Метод представляет собой набор групп reusable instructions в одном пространстве имен.Определение метода позволит легко получить его из байтового кода во время выполнения.Таким образом, JVM не нужно копировать определение метода в каждом созданном объекте, так как в этом нет необходимости, и это верно для каждого типа метода статического, нестатического.

0 голосов
/ 25 сентября 2019

Это всегда зависит.

Иногда метод опирается на свойства объекта, поэтому для каждого объекта такой метод будет вести себя по-разному.

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

Это зависит от того, чего вы хотите достичь.

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

С другой стороны, вы хотели бы иметь метод для определения типа человека, например, "I am user" - это будет зависеть от состояния (свойств) объекта, чтобы вы могли сделать этот метод static.

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