Поиск по сайту:

Как использовать методы в Java


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

Метод в Java (называемый «функцией» во многих других языках программирования) — это часть кода, сгруппированная и помеченная для повторного использования. Методы полезны, потому что они позволяют вам выполнять одно и то же действие или серию действий, не переписывая один и тот же код, что не только означает меньше работы для вас, но и означает меньше кода для поддержки и отладки, когда что-то пойдет не так.

Метод существует внутри класса, поэтому применяется стандартный шаблонный код Java:

package com.opensource.example;

public class Example {
  // code here
}

Определение пакета не является строго необходимым в таком простом однофайловом приложении, но это хорошая привычка, и большинство IDE его применяют.

По умолчанию Java ищет метод main для запуска в классе. Методы могут быть общедоступными или частными, статическими или нестатическими, но основной метод должен быть общедоступным и статическим, чтобы компилятор Java мог его распознать и использовать. Когда метод общедоступен, его можно выполнить вне класса. Чтобы вызвать класс Example при запуске программы, его метод main должен быть доступен, поэтому установите для него значение public.

Вот простая демонстрация двух методов: один метод main, который выполняется по умолчанию при вызове класса Example, и один метод report, который принимает ввод из main и выполняет простое действие.

Чтобы имитировать ввод произвольных данных, я использую оператор if-then, который выбирает между двумя строками в зависимости от того, когда вы запускаете приложение. Другими словами, метод main сначала устанавливает некоторые данные (в реальной жизни эти данные могут быть получены из пользовательского ввода или из какого-либо другого метода в другом месте приложения), а затем «вызывает» report, предоставляющий обработанные данные в качестве входных данных:

package com.opensource.example;

public class Example {
  public static void main(String[] args) {
    // generate some data
    long myTime = System.currentTimeMillis();
    String weather;

    if ( myTime%2 == 0 ) {
      weather = "party";
    } else {
      weather = "apocalypse";
    }

    // call the other method
    report(weather);
  }

  private static void report(String day) {
    System.out.printf("Welcome to the zombie %s\n", day);
  }
}

Запустите код:

$ java ./Example.java
Welcome to the zombie apocalypse
$ java ./Example.java
Welcome to the zombie party

Обратите внимание, что один и тот же метод report дает два разных результата. В этой простой демонстрации, конечно, нет необходимости во втором методе. Тот же результат мог бы быть получен с помощью оператора if-then, имитирующего генерацию данных. Но когда метод выполняет сложную задачу, например изменение размера изображения до миниатюры, а затем создание виджета на экране с использованием этого измененного изображения, тогда «затраты» на дополнительный компонент имеют большой смысл.

Когда использовать метод Java

Может быть сложно понять, когда использовать метод, а когда просто отправлять данные в поток Java или цикл. Если вы столкнулись с таким решением, ответом обычно будет использование метода. Вот почему:

  • Методы дешевые. Они не добавляют дополнительных затрат на обработку вашего кода.
  • Методы уменьшают количество строк вашего кода.
  • Методы специфичны. Обычно легче найти метод под названием resizeImage, чем найти код, спрятанный в цикле где-то в функции, загружающей изображения с диска.
  • Методы можно использовать повторно. Когда вы впервые пишете метод, вы можете думать, что он полезен только для одной задачи вашего приложения. Однако по мере роста вашего приложения вы можете обнаружить, что используете метод, с которым, как вам казалось, «покончено».

Функциональное и объектно-ориентированное программирование

Функциональное программирование использует методы в качестве основной конструкции для выполнения задач. Вы создаете метод, который принимает один тип данных, обрабатывает эти данные и выводит новые данные. Объедините множество методов вместе, и вы получите динамичное и работоспособное приложение. Языки программирования, такие как C и Lua, являются примерами этого стиля кодирования.

Другой способ решения задач с помощью кода — это объектно-ориентированная модель, которую использует Java. В объектно-ориентированном программировании методы являются компонентами шаблона. Вместо отправки данных из метода в метод вы создаете объекты с возможностью изменять их с помощью их методов.

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

Java использует один файл для каждого класса, поэтому первым создается файл Day.java, который служит объектом Day:

package com.opensource.example;

import java.util.Random;

// Class
public class Day {
    public static String weather;
    public int count;

// Constructor
  public Day() {
    long myTime = System.currentTimeMillis();

    if ( myTime%2 == 0 ) {
      weather = "paradise";
    } else {
      weather = "apocalypse";
    }
  }

// Methods
  public String report() {
      return weather;
  }

  public int counter() {
    Random rand = new Random();
    count = count + rand.nextInt(100);

    return(count);
    }
}

В разделе Класс создаются два поля: погода и count. Погода статична. В течение суток (в этой воображаемой ситуации) погода не меняется. Это либо вечеринка, либо апокалипсис, и это длится целый день. Однако количество зомби увеличивается в течение дня.

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

В разделе Methods метод report возвращает только отчет о погоде, определенный и установленный конструктором. Однако метод counter генерирует случайное число и добавляет его к текущему количеству зомби.

Другими словами, этот класс делает три совершенно разные вещи:

  • Представляет «день», определенный приложением.
  • Устанавливает неизменный прогноз погоды на день.
  • Устанавливает постоянно увеличивающееся количество зомби в течение дня.

Чтобы использовать все это, создайте второй файл:

package com.opensource.example;

public class Example {
  public static void main(String[] args) {
    Day myDay = new Day();
    String foo = myDay.report();
    String bar = myDay.report();

    System.out.printf("Welcome to a zombie %s\n", foo);
    System.out.printf("Welcome to a zombie %s\n", bar);
    System.out.printf("There are %d zombies out today.\n", myDay.counter());
    System.out.printf("UPDATE: %d zombies. ", myDay.counter());
    System.out.printf("UPDATE: %d zombies. ", myDay.counter());
  }
}

Поскольку теперь имеется два файла, для запуска кода проще всего использовать Java IDE, но если вы не хотите использовать IDE, вы можете создать свой собственный JAR-файл. Запустите код, чтобы увидеть результаты:

Welcome to a zombie apocalypse
Welcome to a zombie apocalypse
There are 35 zombies out today.
UPDATE: 67 zombies. UPDATE: 149 zombies.

«Погода» остается неизменной независимо от того, сколько раз вызывается метод report, но количество зомби на свободе увеличивается по мере того, как больше вы вызываете метод counter.

Java-методы

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

Статьи по данной тематике: