Pessoal quando usar Throws SQL Exception e Quando usar Try Catch?

Oi, eu uso Java e eu nunca aprendi na graduação quando usar Try Catch ou Throws SQL… então eu uso Throws… em todos os métodos! Qual a diferença ? E eu posso continuar usando ?

Vou dar um exemplo usando IOException ao invés de SQLException porque o conceito é o mesmo.

Se vc não usar try/catch, seu programa é interrompido assim que uma exceção
ocorre.

No exemplo abaixo eu estou tentando ler o conteúdo de um arquivo de texto que não existe e isso vai causar uma exceção. Note como a mensagem “FIM” não é impressa, demonstrando que o programa foi encerrado antes do esperado.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class App1 {
  public static void main(String... args) throws IOException {
    System.out.println("INICIO");

    System.out.println(Files.readString(Path.of("xxx")));

    System.out.println("FIM");
  }
}

Algumas vezes este é exatamente o comportamento que vc deseja. Talvez, para o seu programa, não faça sentido continuar uma vez que o arquivo desejado não existe e vc não se importa de mostrar para o usuário o stacktrace.

Porém, pode ser mais útil informar ao usuário o que exatamente ocorreu, nestes casos vc pode usar o try/catch.

Veja no exemplo abaixo como a mensagem de erro aparece e logo em seguida a mensagem “FIM” é impressa. Isso quer dizer que seu programa encontrou um erro, deu uma breve satisfação ao usuário sobre o que ocorreu e, em seguida, finalizou normalmente.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class App2 {
  public static void main(String... args) {
    System.out.println("INICIO");

    try {
      System.out.println(Files.readString(Path.of("xxx")));
    } catch (IOException e) {
      System.out.println("O arquivo desejado não existe ou não pode ser lido: " + e.getMessage());
    }

    System.out.println("FIM");
  }
}

Vc pode continuar usando throws enquanto ele estiver satisfazendo suas necessidades.

Conforme seu programa for evoluindo e a necessidade de um controle maior das exceção surgir, vc vai ter começar a tratar estas exceções usando try/catch.

4 curtidas

Você tem que analisar de quem é a responsabilidade de tratar a exceção.

Se a responsabilidade for do próprio método que você está escrevendo, então você usa try - catch.

Se a responsabilidade for de quem for usar o seu método, então você usa o throws.

4 curtidas

Basicamente então o Try Catch iria informar o erro que ocorreu “Dizendo oque ocasionou o erro” e o throws só vai interromper sem dar o motivo e bola para frente ?

Não.

O que interropompe o fluxo normal do programa é quando a exceção é lançada.

Diante do lançamento de uma exceção vc tem 2 opções:

  1. Usar try/catch para capturar a exceção e realizar alguma ação. Essa ação poderia ser mostrar uma mensagem pro usuário, mas pode ser qualquer outro tipo de coisa.

  2. Adicionar o throws na assinatura do método. O throws serve apenas para indicar que aquele método pode lançar aquela exceção. Quando vc faz isso, vc está passando a responsabilidade do tratamento da exceção para o contexto que chama o método com throws. E é como o Staroski disse, vc tem que analisar para ver se faz sentido transferir esta responsabilidade.

2 curtidas

Você manja demais homem :clap:t3::clap:t3::clap:t3: