Olá a todos, sou iniciante em Java e no GUJ e gostaria da ajuda de vocês, desde já agradeço pela ajuda e peço desculpas por dúvidas sem sentido.
Vamos lá, eu testei o uso de throws, throw no seguinte código:
importjava.util.Scanner;publicclassUsando_throws_throw{publicstaticvoidmain(Stringargs[])throwsException{intx=1;Scannerent=newScanner(System.in);System.out.print("Digite um número: ");x=ent.nextInt();if(x==0)thrownewException("Digitou zero");elseSystem.out.printf("Digitou != de 0");}}
Se eu digitar zero ele lança a seguinte mensagem: Exception in thread “main” java.lang.Exception: Digitou zero at Usando_throws_throw.main(Usando_throws_throw.java:10)
Gostaria de saber se é normal aparecer além do conteúdo da mensagem que foi definida no lançamento da exceção a explicação da exceção ocorrida(parte em negrito da mensagem acima).
Então, quando usamos “throws DAOException”, estao dizendo que : "Quem for usar deve tratar essa possivel exception
Veja abaixo, o método está “falando” quem me usar deve tratar o possivel erro de DAOException
publicListselectAll()throwsDAOException{Listrows=newArrayList();PreparedStatementstmt=null;ResultSetrs=null;StringBuffersql=newStringBuffer("SELECT * FROM table");try{stmt=getConnection(getRequest()).prepareStatement(sql.toString());stmt.setObject(1,idCircuito);rs=stmt.executeQuery();while(rs.next()){inti=1;CircuitoDTOdto=newCircuitoDTO();dto.setIdCircuito(rs.getInt(i++));dto.setIdPj(rs.getInt(i++));rows.add(dto);dto=null;}}catch(SQLExceptione){thrownewDAOException(e.getMessage());}finally{ConnectionPool.closeAll(null,stmt,rs);}returnrows;}
Ou seja, throws lança apenas a exception para quem usar tratar. No seu caso o método main deveria tratar a exception e não lança-lo, pois não há ninguem acima dele para tratar esse erro.
fabim
Respondendo a duvida do amigo, que nao era sobre responsabilidade de tratamento mas sim sobre a mensagem em si:
Essa mensagem aparece desse jeito provavelmente pq vc esta visualizando-a em alguma IDE. Se vc printa-la na tela, por exemplo, vera apenas
“java.lang.Exception: Digitou zero” no caso de e.toString(), ou apenas “Digitou zero” no caso de e.getMessage();
camarada_du
Obrigado por responder ao tópico, eu entendi o que vocês disseram, agora só para matar o resto da dúvida, por exemplo no uso de catch é possível definir uma mensagem para tratar o erro, exemplo:
catch(NumberFormatExceptione1){System.out.print("Não é um argumento inteiro");}
sendo que não irá aparecer a descrição do erro porque ele foi tratado.
A dúvida é a seguinte, usando throw, além de exibir a mensagem definida de tratamento de exceção, ele exibe também a descrição dessa exceção?
Mais uma vez obrigado.
sergiotaborda
Sim é normal. Isso se chama Stacktrace (Rastro de Pilha).
Ele dá informação sobre onde foi lançada a exceção. É muito util para debug
camarada_du
Agora sim, sem mais dúvidas sobre throw, obrigado Sergio, Robinson, Fabim, valeu pela força.