Da się, tworzysz po prostu normalną klasę, która dziedziczy po Exception
i wtedy możesz rzucać obiekt tej klasy instrukcją throw
i łapać go w catch
. Dodam, że try ... catch
to nie funkcja, tylko instrukcja przepływu sterowania.
Nie powinieneś jednak nadużywać wyjątków - służą one raczej do przerywania biegu programu, gdy np. jesteśmy w środku obliczeń i stwierdzamy, że to, co robimy, kompletnie nie ma sensu, np. z powodu wystąpienia niezależnych od nas czynników zewnętrznych.
W Twoim przypadku mamy do czynienia z weryfikacją poprawności danych i tutaj moim zdaniem dużo właściwsze jest obsłużenie tego bez używania wyjątków (co nie znaczy, że nie można).