„Добре, нека опитаме друг подход. Ще ви покажа How работят методите за извикване и след това опитайте да преминете през предишния урок отново, ОК?“

"Хайде да го направим."

„Страхотно. Ще ви разкажа за извикването на функции/методи и стойностите, които връщат (връщани стойности).“

„Командите or операторите са групирани в методи, така че да могат да се изпълняват като един блок, като една сложна команда. За да направите това, трябва да напишете името на метода (функцията) и след това да посочите аргументите на метода в скоби.“

Пример
package com.codegym.lesson2;
public class MethodCall
{
    public static void main(String[] args)
    {
         print4("I like to move it, move it.");
    }

    public static void print4(String s)
    {
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
    }
}

"В примера по-горе ние написахме функция, която ще покаже подадения низ на екрана четири пъти. След това извикахме функцията print4в ред 6."

"Когато програмата стигне до ред 6, тя ще премине към ред 9, присвоявайки стойността 'I like to move it, move it'на променливата s."

"Тогава ще бъдат изпълнени редове 11-14. Функцията ще приключи и програмата ще се възобнови на ред 7."

"Виждам."

„Не само можете да предавате аргументи (стойности) на функция – функция може да върне резултата от своята работа (върната стойност). Това се прави с ключовата дума return. Ето How изглежда:“

Пример 1.
Определете минимума от две числа.
public class MethodCall
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int m = min(a, b);
      System.out.println("The minimum is "+ m);
   }

   public static int min(int c, int d)
   {
      int m2;
      if (c < d)
           m2 = c;
      else
           m2 = d;

      return m2;
   }
}
Ето How работи:
public class MethodCall
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int c = a, d = b;
      int m2;
      if (c < d)
           m2 = c;
      else
           m2 = d;

      int m = m2;
      System.out.println("The minimum is "+ m);
   }
}

„Мисля, че започва да има смисъл! Кодът в лявата и дясната колона всъщност е един и същ. Просто codeът вляво има самостоятелна функция.“

„Функцията изчислява определена стойност и използва оператора return, за да предаде тази стойност на Howвото и да я извика. Поне аз така го виждам.“

— И си прав!

„Но Howъв е този празен тип?“

„Някои функции просто правят нещо, без да изчисляват or връщат няHowва стойност, като нашия метод main() . За такива функции е създаден специален тип на връщане – void .“

„Защо просто не декларирате нищо, ако функцията не връща нищо?“

„Помните ли How декларираме всяка променлива? Тип и име. За функциите ние декларираме тип, име и скоби. Име на функция, последвано от скоби, е начинът, по който извиквате функцията.“

„Така че беше по-лесно да се измисли „тип void“, отколкото да се разделят функциите на две категории – тези, които връщат стойности, и тези, които не?“

"Точно така! Ти си наистина умен, момчето ми."

„Как да върнем празен тип?“

„Ние не го правим. Работи по следния начин. Когато изпълнява оператора return, Java машината изчислява стойността на израза вдясно от думата „return“, съхранява тази стойност в специална част от паметта и незабавно приключва функцията . Съхранената стойност се използва там, където функцията е била извикана, като резултат от извикването на функцията. Можете да я видите в примера, който дадох по-рано."

„Имате предвид частта, в която int m = min(a, b) се трансформира в m = m2?“

„Да. След като функцията приключи, всичко работи така, сякаш върнатата стойност на функцията е написана на нейно място. Повторете тази фраза наум и погледнете codeа в последния пример.

„Мисля, че това само изглежда лесно. Всъщност е трудно. Разбрах само части от него.“

„Това е ОК. При първия опит можете да разберете само неща, които вече знаете. Колкото повече неща не разбирате, толкова по-дълбоко се потапяте в нещо ново и толкова по-добри ще бъдат резултатите ви. Ще стане по-ясно с времето ."

"Е, щом казваш така. Да продължим."