23.11 (03.12): Izuzeci
Izuzeci nastaju usled neobičnih ali predviđenih problema u radu programa. Najčešći problemi u radu programa su: pogrešno uneti podaci korisnika, deljenje nulom, modem izgubio vezu, greška prilikom pristupa bazi podataka...
Izbor programera je sledeći:
-
da ne programira ništa. U tom slučaju program će prestati sa radom.
-
programiranje pojave obaveštenja bez ispravke greške. U tom slučaju samo se korisnik obaveštava o pojavi greške ali će program prestati sa radom.
-
programiranje pojave obaveštenja i pokušaj ispravke greške. U tom slučaju program ima mogućnost da nastavi sa radom.
-
programiranje korektivnih akcija bez obaveštenja. U tom slučaju korisnik se ne obaveštava šta se desilo, ispravlja se greška i program nastavlja sa radom.
Izuzetak je objekat prosleđen iz dela programa u kome se problem desio u deo programa koji će pokušati da reši problem.
Deo programa gde može da se desi izuzetak označava se blokom
try.
Deo programa koji pokušava da reši problem piše se u bloku catch. U ovom bloku se vrši obrada izuzetaka.
Generisanje određenog izuzetka je moguće izvršiti naredbom throw. Ovom naredbom se generišu posebni programski kontrolisani i predviđeni izuzeci.
Blok finally je poslednji u nizu i on se uvek izvršava.
Kad se izuzetak javi kreira se objekat klase Exception.
Blokovima try/catch se mogu predvideti i obuhvatiti samo oni izuzeci koje ste predvideli da će se javiti u programu. Ako se desi neki izuzetak koji niste predvideli onda je potrebno uraditi akcije koje će oporaviti program i osloboditi resurse.
Primer:
static void Main()
{
int a, b;
double c;
Console.WriteLine("Unesi prvi broj:");
a = Int32.Parse(Console.ReadLine());
Console.WriteLine("Unesi drugi broj:");
b = Int32.Parse(Console.ReadLine());
try
{
c = a / b;
Console.WriteLine("c={0}", c);
}
catch (Exception izuzetak)
{
Console.WriteLine("Doslo je do greske!");
Console.WriteLine(izuzetak.ToString());
}
}Primer:
static void Main()
{
double op1, op2, rez = 0;
char @operator;
try
{
Console.WriteLine("Unesi prvi broj:");
op1 = Double.Parse(Console.ReadLine());
Console.WriteLine("Unesi operator:");
@operator = Char.Parse(Console.ReadLine());
Console.WriteLine("Unesi drugi broj:");
op2 = Double.Parse(Console.ReadLine());
if (@operator != '+' && @operator != '-' && @operator != '*' && @operator != '/')
throw new Exception(@operator.ToString());
switch (@operator)
{
case '+':
rez = op1 + op2;
break;
case '-':
rez = op1 - op2;
break;
case '*':
rez = op1 * op2;
break;
case '/':
rez = op1 / op2;
break;
default:
Console.WriteLine("Pogresan operator");
break;
}
Console.WriteLine("{0}{1}{2}={3}", op1, @operator, op2, rez);
}
catch (Exception izuzetak)
{
Console.WriteLine(izuzetak.ToString());
}
}