1. returnТвърдението

Мислите, че вече сте научor всичко за методите на Java? Каквото и да мислите, че знаете, все още не знаете и половината от него.

Да започнем с нещо просто. Например Java има израз за връщане , който ви позволява незабавно да прекратите метода, който го извиква. Ето изявлението:

return;

Просто е: самотната дума, returnпоследвана от точка и запетая. Веднага щом програмата изпълни този оператор, текущият метод излиза незабавно и извикването продължава.

Ако returnсе извика в mainметода, тогава mainметодът незабавно ще приключи, а с него и цялата програма.

Пример:

class Solution
{
   public static void fill(int[] data, int from, int to, int value)
   {


     if (from < 0 || to > data.length)
       return;

     for (int i = from; i < to; i++)
     {
       data[i] = value;
     }
   }

   public static void main(String[] args)
   {
     int[] months = {1, 2, 3, 4, 5, 6, 7, 8 ,9, 10, 11, 12};
     fill(months, 2, 10, 8);
   }
}


Методът fill запълва част от предадения масив с value.
Частта от масива, която трябва да се попълни, се определя от индексите from и to.
Ако from е по-малко от 0or ако to е по-голямо от дължината на масива, тогава методът прекратява незабавно.

Горната програма има fillметод, който запълва масива, предаден й с value. Той не запълва целия масив, а само частта, определена от индексите fromи to.

В началото на fill метода предадените стойности се проверяват, за да се гарантира, че са валидни. Ако fromе по-малко от 0 or ако to е по-голямо от дължината на масива, тогава fillметодът се прекратява незабавно (изпълнява returnоператор).

Това returnтвърдение е полезно: практически всеки метод в Java има такъв и ето защо.



2. Методи с резултат,void

Спомнете си, че веднъж разбрахме, че има твърдения и има изрази . Изразът, за разлика от твърдението, има стойност, която може да се използва някъде.

И в Java методите могат да имат стойност . И това е много добра новина: методите не само могат да направят нещо въз основа на входните параметри, но също така, например, да оценят нещо и да върнат резултата от изчислението .

Между другото, вече сте срещали такива методи:

double delta = Math.abs(d1 - d2);
Методът abs()връща двойно
Scanner console = new Scanner(System.in);
int x = console.nextInt();

Методът nextInt()връща anint
String str = "Hello";
String s2 = str.toUpperCase();

Методът toUpperCase()връща aString
int[] data = {1, 4, 5, 6, 7, 8, 11};
int[] array = Arrays.copyOf(data, 4);

Методът copyOf()връща anint[]

Всеки метод може да върне само една стойност от един предварително определен тип. Типът на връщането се определя, когато методът е деклариран:

public static Type name(parameters)
{
  method body
}

Къде name е името на метода, parameters е списъкът с параметри на метода и type е типът на резултата, който методът връща.

За методи, които не връщат нищо, има специален тип контейнер: void.

Пишете ли свой собствен метод и не искате да връщате нищо към извикващия метод? Просто декларирайте типа на метода като voidи проблемът е решен. В Java също има много методи като този.


3. Връщане на резултат

Току-що разбрахме How да декларираме метод, който връща резултата от изчисление, но How да доведем този резултат в самия метод?

Изявлението returnни помага тук още веднъж. Предаването на резултат от метод изглежда така:

return value;

Къде returnе оператор, който незабавно прекратява метода. И value е стойността, която методът връща на извикващия метод, когато излезе. Типът valueтрябва да съответства на typeпосочения в декларацията на метода.

Пример 1. Методът изчислява минимума от две числа:

int min(int a, int b)
{
   if (a < b)
     return a;
   else
     return b;
}
Методът връща минимум две числа.

Ако a < b
върнете a
В противен случай
върнетеb

Пример 2. Методът дублира изпратения му низ nпъти:

String multiple(String str, int times)
{
   String result = "";
   for (int i = 0; i < times; i++)
     result = result + " "+ str;
   return result;
}
Методът приема два параметъра - низ и броя пъти, които низът трябва да се повтори.
Създава се празен низ за бъдещия резултат.

В цикъл с итерации към низа се добавят timesинтервал и низът . Низът се връща като резултат от метода. strresult

result

Пример 3: Методът изчислява максимума от две числа с помощта на троичния оператор:

int max(int a, int b)
{
   return (a > b ? a : b);
}
Методът връща максимума от две числа.

връщане (ако a > b, тогава a, в противен случай b)