Witajcie, mam 2 proste pytania, gdyż dopiero przesiadłem się z cepy na Javę, a za parę dni mam egzamin poprawkowy, pomocy:)
Czy poniższy sposób :
public void metodaA()throws ArithmeticException
{
int a =0;//lub wczytaj z klawiatury..
try{
int b= 32/a;
}catch(ArithmeticException e){
System.out.println("No przez zero to nie wolno");
}
}
czy też:
public void metodaA()
{
int a =0;//lub wczytaj z klawiatury
if(a != 0){
int b= 32/a;
}
else throw new ArithmeticException();
}
podczas,gdy w przy wywoływaniu metody:
cWyjatek w = new cWyjatek();
try {
w.metodaA();
}catch(ArithmeticException e){
System.out.println("Nie wolno");
oba w konsekwencji zgłaszają wyjątek poprawnie, więc czy jest różnica? Czy jeżeli wiem,że w danej metodzie jest "podejrzany" kod, to nie lepiej zawsze opisać metodę z throws i potem wywoływać ją bez bloku try/catch? Właściwie jeśli jest to taki fragment kodu, dla którego Wyjątek przewiduję czysto z logiki mojego programu...
...bo zauważyłem,że w niektórych przypadkach (niżej) kompilator jakby wyłapuje niebezpieczną sytuację i i tak podsuwa mi konieczność zastosowania throws w nagłówku metody, I DOPIERO PODCZAS WYWOŁYWANIA mam za konieczność stosowanie try/catch, czego robić nie musiałem przy wywoływaniu metodaA, gdyż kompilator o to mnie nie prosił.
public void metodaB() throws ArithmeticException,Exception
{
out = new BufferedWriter(new FileWriter("outfilename"));
out.close();
int a = 0;
int b = 32 / a;
out.write(a);
out.write(b);
}
Więc co, raz muszę wywoływać metodę w try/catch, raz nie muszę, jak jest z tym ?
i czy jeśli kompilator mnie nie zmusza to stosowania w nagłówku throws to i tak lepiej jest to robić, czy właściwie nie ma różnicy?