return și void în Java

Metode Java 1.0

return încheie metoda și trimite înapoi o valoare; void marchează o metodă care nu returnează nimic.

Sintaxă
static int patrat(int x) {
    return x * x;   // returnează o valoare
}

static void afiseaza(String s) {
    if (s.isEmpty()) return;  // iese fără valoare
    System.out.println(s);
}

Ce face return și void

return valoare; oprește imediat metoda și dă apelantului valoarea, care trebuie să se potrivească cu tipul declarat în antet. Într-o metodă cu tip returnat, fiecare drum prin cod trebuie să se termine cu return (sau cu aruncarea unei excepții), altfel compilatorul raportează missing return statement.

void înseamnă „nu returnează nimic”. Metodele void fac ceva (afișează, modifică un obiect, scriu un fișier) și se termină la acolada finală sau la un return; fără valoare, folosit pentru ieșire timpurie.

Ieșirea timpurie („guard clause”) tratează cazurile speciale la începutul metodei, cu return, ca restul codului să nu fie indentat în else-uri. După un return, codul din același bloc nu se mai poate executa și nu compilează (unreachable statement).

Exemple

Exemplul 1: Valori returnate și metode void

arie returnează un double, folosit apoi în calcul. raport este void: doar afișează.

public class Main {
    static double arie(double lungime, double latime) {
        return lungime * latime;
    }

    static void raport(String camera, double mp) {
        System.out.printf("%-10s %6.2f m²%n", camera, mp);
    }

    public static void main(String[] args) {
        double sufragerie = arie(5.2, 4.0);
        double dormitor = arie(3.5, 3.2);
        raport("sufragerie", sufragerie);
        raport("dormitor", dormitor);
        raport("total", sufragerie + dormitor);
    }
}

Rezultat

sufragerie  20.80 m²
dormitor    11.20 m²
total       32.00 m²

Exemplul 2: Ieșire timpurie

Cazurile invalide sunt tratate la început, fiecare cu return. În metoda void, return; fără valoare doar oprește metoda.

public class Main {
    static String verificaCnp(String cnp) {
        if (cnp == null || cnp.isEmpty()) {
            return "lipsă";
        }
        if (cnp.length() != 13) {
            return "trebuie 13 cifre, are " + cnp.length();
        }
        for (char c : cnp.toCharArray()) {
            if (!Character.isDigit(c)) {
                return "conține caracterul '" + c + "'";
            }
        }
        return "format corect";
    }

    static void saluta(String nume) {
        if (nume.isBlank()) {
            return;
        }
        System.out.println("Bună, " + nume + "!");
    }

    public static void main(String[] args) {
        System.out.println(verificaCnp(""));
        System.out.println(verificaCnp("12345"));
        System.out.println(verificaCnp("1990101x22334"));
        System.out.println(verificaCnp("1990101223344"));
        saluta("   ");
        saluta("Elena");
    }
}

Rezultat

lipsă
trebuie 13 cifre, are 5
conține caracterul 'x'
format corect
Bună, Elena!

Greșeli frecvente

  • Lipsa lui return pe o ramură (de exemplu doar în if, fără else): missing return statement.
  • return valoare; într-o metodă void: incompatible types: unexpected return value.
  • Cod scris după return în același bloc: unreachable statement.

Comenzi înrudite

  • Metode: O metodă grupează cod sub un nume, primește parametri și poate returna o valoare; Java permite supraîncărcare și varargs.
  • break și continue: break oprește bucla (sau switch-ul) curentă; continue sare peste restul pasului curent; cu etichete acționează asupra unei bucle exterioare.
  • if și else: Execută un bloc doar dacă o condiție boolean este adevărată; else și else if tratează celelalte cazuri.