Методы без параметров / статические - PullRequest
2 голосов
/ 21 января 2010

Как следует из моего имени, я являюсь разработчиком .NET, но у меня растущий интерес к Java, и я заинтересован в изучении других языков, так как это помогает мне узнать больше о программировании в целом.

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

Я не возражаю против каких-либо конкретных ответов на Java.

Спасибо

Ответы [ 4 ]

3 голосов
/ 21 января 2010

«Какая связь / связь между статическими и беспараметрическими методами?»

Отсутствует.

"Методы, которые не принимают параметры / работают с состоянием ... рекомендуется сделать статичными"

В самом деле? Кем? Можете ли вы предоставить ссылку или цитату?

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

Беспараметрический ничего не значит. Может случиться так, что метод имеет дело только с переменными экземпляра или только со статическими переменными. Или возвращает константу. Или он имеет некоторые вычисления, которые являются частными для этого метода. Например, он может создать сокет, выполнить чтение с использованием HTTP и уничтожить сокет. Без параметров; нет переменных экземпляра.

2 голосов
/ 21 января 2010

Существует общий принцип, согласно которому методы не должны иметь доступ к большему количеству данных, чем им нужно. Это одна из причин того, что переменные-члены обычно являются закрытыми, и ОО использует инкапсуляцию, чтобы скрыть данные и код от других частей системы.

Если у вас есть функция, которая не требует доступа к переменным в этом классе, некоторые люди рекомендуют делать метод статическим.

Наличие у функции параметров не влияет на то, имеет ли она доступ к методам экземпляра.

2 голосов
/ 21 января 2010

Нет связи между статическими и беспараметрическими методами.

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

public class Calculator
{
  public static int Add(int a, int b) { return a + b; }  // does not need any Calculator state
}

Статический метод может получать доступ к его параметрам (и, следовательно, может изменять их состояние, если они это позволяют):

public class Officialdom
{
  public static void Rename(Person person) { person.Name = "Bob"; }  // does not need any Officialdom state
}

И наоборот, метод без параметров вполне может нуждаться в доступе к состоянию приемника и, следовательно, быть экземпляром (нестатическим) методом:

public class Spline
{
  private bool _isReticulated;
  public void Reticulate()
  {
    _isReticulated = true;  // does need Spline state
  }
}

(я разместил примеры кода в C #, потому что он не зависит от языка; те же самые понятия и различия применяются в Java, возможно, с несколькими изменениями ключевых слов.)

2 голосов
/ 21 января 2010

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

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