Sobes.tech
Junior

Kaip teisingai mesti išimtis Java?

sobes.tech AI

Atsakymas iš AI

Išimtys turi būti mesti, kai įvyksta neįprasta situacija, pažeidžianti programos normalią veiklą ir reikalaujanti nedelsiant apdorojimo.

Pagrindiniai principai:

  • naudokite išimtis klaidų pranešimams, o ne vykdymo srauto kontrolei.
  • pasirinkite tinkamiausią standartinės bibliotekos išimties tipą.
  • kurkite savo išimtinių klasių, kai standartinės nesuteikia pakankamai informacijos.
  • įtraukite į išimties pranešimą išsamų klaidos priežasties ir konteksto aprašymą.
  • negaudykite išimčių, kurių negalite tinkamai apdoroti. Geriau juos iškelti aukščiau per iškvietimų grandinę.
  • naudokite try-with-resources blokus automatiškai uždaryti išteklius.
  • registruokite išimtis, kurias apdorojate arba perduodate aukštyn.

Tinkamas sintaksė: throw new MyException("Klaidos pranešimas");

Pavyzdys:

// Savo išimties kūrimas
public class InvalidParameterException extends Exception {
    public InvalidParameterException(String message) {
        super(message);
    }
}

// Metodas, kuris meta išimtį
public int divide(int a, int b) throws InvalidParameterException {
    if (b == 0) {
        throw new InvalidParameterException("Dalyba iš nulio draudžiama");
    }
    return a / b;
}

// Metodų naudojimas ir išimčių apdorojimas
public void performDivision(int x, int y) {
    try {
        int result = divide(x, y);
        System.out.println("Rezultatas: " + result);
    } catch (InvalidParameterException e) {
        // klaidos registravimas
        System.err.println("Dalybos klaida: " + e.getMessage());
        // galimas papildomas apdorojimas arba išmetimas aukštyn
    }
}

Skirtumai tarp Checked ir Unchecked išimčių:

Tipas Paveldėjimas Reikalauja apdorojimo / deklaracijos Pavyzdys
Checked Exception (išskyrus RuntimeException) Taip (try-catch arba throws) IOException, SQLException
Unchecked RuntimeException Ne (kompiliatorius nereikalauja) NullPointerException, ArrayIndexOutOfBoundsException