[quote=InicianteJavaHenrique][quote]
lina:
Podemos definir ‘throws’ como lançar/atirar/jogar.
No caso acima, você irá lançar uma Exception. Ou seja, poderá ser lançada qualquer exceção e não uma em especifico!
No exemplo abaixo, você lança o ArithmeticException, que por sua vez já esta sendo tratado no código. Logo o compilador identifica isso.[/quote]
Mas quando você coloca “throws” no método:
public Integer dividir (int num1, int num2) throws ArithmeticException {
int res;
try {
res=num1/num2;
} catch (ArithmeticException ex) {
System.out.println(ex);
}
return res;
}
E depois chama este método (em outro método) você tem que colocar o “throws” de novo, sendo que este segundo não gera exceção:
public void resultado() throws ArithmeticException {
int n1=5;
int n2=0;
dividir(n1, n2);
}
Então eu pergunto é necessário dizer para os métodos (dividir e resultado) que poderá ser lançada uma exeção :?:
Apenas o “try catch” do método dividir seria necessário, não é :?: [/quote]
No seu método resultado não precisa do throws, pois a exceção já foi tratada no seu método dividir.
Na segunda pergunta: sim, apenas o try e catch são suficientes.
Pelo que andei vendo, e muito, o throws é um indicador que poderão ser lançados as exceções que você colocar.
O único problema é que não pode colocar throws Exception no módulo em que está tratando a exceção. Se a chamada da função estiver em um try, catch, aí você poderá colocar quantos catches quiser. Até mesmo um Exception. Na implementação de seu módulo, aí sim é permitido fazer um throws Exception, junto com outros, caso queria.
Espero que alguém saiba explicar o porquê de não poder colocar um throws Exception no módulo em que está sendo tratado as exceções - Em “não compila, abaixo”
Abaixo um exemplo:
Pode:
public static void main(String[] args)
{
g(10,0);
}
public static int g(int x, int y)
{
try
{
System.out.println(" 4 ");
return x/y;
}
catch(ArithmeticException ex)
{
System.out.println(" 5 ");
throw ex;
}
catch(Exception e)
{
System.out.println("Erro inexplicado!");
return -1;
}
}
Não compila:
[code]public static int g(int x, int y) throws Exception
{
try
{
System.out.println(" 4 ");
return x/y;
}
catch(ArithmeticException ex)
{
System.out.println(" 5 ");
throw ex;
}
catch(Exception e)
{
System.out.println("Erro inexplicado!");
return -1;
}
}[/code]
Também não compila:
[code]public static int g(int x, int y) throws ArithmeticException, Exception
{
try
{
System.out.println(" 4 ");
return x/y;
}
catch(ArithmeticException ex)
{
System.out.println(" 5 ");
throw ex;
}
catch(Exception e)
{
System.out.println("Erro inexplicado!");
return -1;
}
}[/code]