1. A returndeclaração

Acha que já aprendeu tudo sobre os métodos Java? O que quer que você pense que sabe, você ainda não sabe nem a metade.

Vamos começar com algo simples. Por exemplo, Java tem uma instrução de retorno que permite encerrar instantaneamente o método que o chama. Aqui está a declaração:

return;

É simples: a palavra solitária returnseguida de ponto e vírgula. Assim que o programa executa essa instrução, o método atual é encerrado imediatamente e a chamada continua.

Se returnfor chamado no mainmétodo, o mainmétodo terminará imediatamente e, com ele, todo o programa.

Exemplo:

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);
   }
}


O fill método preenche parte do array passado com value.
A parte do array a ser preenchida é definida pelos índices from e to.
Se from for menor 0ou to maior que o comprimento da matriz, o método será encerrado imediatamente.

O programa acima tem um fillmétodo que preenche o array passado para ele com value. Ele não preenche todo o array, apenas a parte especificada pelos índices frome to.

No início do fill método, os valores passados ​​são verificados para garantir que sejam válidos. Se fromfor menor que 0 ou to maior que o comprimento da matriz, o fillmétodo será encerrado imediatamente (executará uma returninstrução).

Esta returndeclaração é útil: praticamente todo método em Java tem um, e aqui está o porquê.



2. Métodos com resultado,void

Lembre-se de que uma vez descobrimos que existem declarações e expressões . Uma expressão, ao contrário de uma declaração, tem um valor que pode ser usado em algum lugar.

E, em Java, os métodos podem ter um valor . E esta é uma notícia muito boa: os métodos não são apenas capazes de fazer algo com base nos parâmetros de entrada, mas também, por exemplo, avaliar algo e retornar o resultado do cálculo .

A propósito, você já encontrou esses métodos:

double delta = Math.abs(d1 - d2);
O abs()método retorna um duplo
Scanner console = new Scanner(System.in);
int x = console.nextInt();

O nextInt()método retorna umint
String str = "Hello";
String s2 = str.toUpperCase();

O toUpperCase()método retorna umString
int[] data = {1, 4, 5, 6, 7, 8, 11};
int[] array = Arrays.copyOf(data, 4);

O copyOf()método retorna umint[]

Cada método pode retornar apenas um valor de um tipo predeterminado. O tipo de retorno é determinado quando o método é declarado:

public static Type name(parameters)
{
  method body
}

Onde name é o nome do método, parameters é a lista de parâmetros do método e type é o tipo de resultado que o método retorna.

Para métodos que não retornam nada, existe um tipo de espaço reservado especial: void.

Você está escrevendo seu próprio método e não quer retornar nada para o método de chamada? Basta declarar o tipo do método como void, e o problema está resolvido. Também existem muitos métodos como esse em Java.


3. Retornando um resultado

Acabamos de descobrir como declarar um método que retorna o resultado de um cálculo, mas como resultamos esse resultado no próprio método?

A returndeclaração nos ajuda aqui mais uma vez. Passar um resultado de um método se parece com isso:

return value;

Onde returné uma instrução que encerra o método imediatamente. E value é o valor que o método retorna ao método de chamada quando ele sai. O tipo de valuedeve corresponder ao typeespecificado na declaração do método.

Exemplo 1. O método calcula o mínimo de dois números:

int min(int a, int b)
{
   if (a < b)
     return a;
   else
     return b;
}
O método retorna o mínimo de dois números.

Se a < b
retornar a
Caso contrário,
retornarb

Exemplo 2. O método duplica a string passada para ele nvezes:

String multiple(String str, int times)
{
   String result = "";
   for (int i = 0; i < times; i++)
     result = result + " "+ str;
   return result;
}
O método recebe dois parâmetros — uma string e o número de vezes que a string deve ser repetida.
Uma string vazia é criada para o resultado futuro.

Em um loop com timesiterações, um espaço e a strstring são adicionados à resultstring.

A string resulté retornada como resultado do método.

Exemplo 3: O método calcula o máximo de dois números usando o operador ternário:

int max(int a, int b)
{
   return (a > b ? a : b);
}
O método retorna o máximo de dois números.

retornar (se a > b, então a, caso contrário b)