boa noite sobre Exceçoes como posso estudar-las saber qual usar na hora serta vi a documentaçao mas la so mostra qundo vc ja sabe o que esta procurando mas eu estou estudando nao sei qual usar que horas so a generica
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
boa noite sobre Exceçoes como posso estudar-las saber qual usar na hora serta vi a documentaçao mas la so mostra qundo vc ja sabe o que esta procurando mas eu estou estudando nao sei qual usar que horas so a generica
Oi, boa noite! Acho que primeiro a gente teria que pensar porque o tratamento de exceções existe no Java. Pense nele como um mecanismo que permite lidar com erros e condições inesperadas, que pode acontecer na sua aplicação, para que o fluxo do seu programa não interrompa de repente e deixe o usuário a ver navios. O ideal é que você trate a exceção dentro do catch(), ou seja, resolva o problema que aconteceu, de alguma forma. Mas se não for possível, ela também existe para, ao menos, mostrar informações mais detalhadas sobre o erro que ocorreu para que o usuário/desenvolvedor tenha o máximo de informações possiveis para corrigir o problema direto no código.
Aqui um exemplo de um tratamento de exceções onde o problema é resolvido:
Neste exemplo, vamos tentar ler um arquivo. Se o arquivo não for encontrado, criaremos um novo arquivo.
import java.io.*;
public class ExemploTratamentoResolvido {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("arquivo.txt"));
System.out.println("Arquivo lido com sucesso.");
} catch (FileNotFoundException e) {
System.out.println("Arquivo não encontrado. Criando um novo arquivo...");
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("arquivo.txt"));
writer.write("Conteúdo inicial do arquivo.");
writer.close();
System.out.println("Novo arquivo criado com sucesso.");
} catch (IOException ioException) {
System.out.println("Erro ao criar o arquivo: " + ioException.getMessage());
}
} catch (IOException e) {
System.out.println("Erro de leitura/escrita: " + e.getMessage());
}
}
}
No exemplo acima, a aplicação tenta ler um arquivo, mas ele não existe, então a aplicação cria um arquivo e pronto, problema resolvido(claro que isso vai depender das regras de negócio da sua aplicação, mas esse foi somente um exemplo para ilustrar melhor).
Aqui um tratamento de exceções onde o problema não é resolvido, mas pelo menos ele informa o usuário sobre o problema que ocorreu:
import java.sql.*;
public class ExemploTratamentoInformativo {
public static void main(String[] args) {
try {
Connection conexao = DriverManager.getConnection("jdbc:mysql://localhost:3306/meuBanco", "usuario", "senha");
System.out.println("Conexão estabelecida com sucesso.");
} catch (SQLException e) {
System.out.println("Não foi possível conectar ao banco de dados.");
System.out.println("Detalhes do erro: " + e.getMessage());
System.out.println("Por favor, verifique suas credenciais e a conexão de rede.");
}
}
}
O ideal é que sempre que você escrever um código onde pode brotar uma exceção, então você envolva ele em um try/catch para essa exceção, se ocorrer, ser tratada da melhor forma possível. Com o tempo, você vai sacando onde pode surgir exceptions, mas aqui uma lista de situações onde costumam ocorrer:
Existe também situações onde o tratamento de exceptions é usado para liberação de recursos. Exemplo: Usar o try/catch/finally para garantir que arquivos ou recursos que um banco de dados usa sejam fechados corretamente.
try {
// Código que pode lançar exceção
} catch (Exception e) {
// Tratamento da exceção
} finally {
// Código de limpeza, como fechar arquivos ou conexões
}
Aqui finally sempre é executado, independente se ocorreu ou não uma exception(há situações onde isso é muito proveitoso de se usar).
E por último, recomendo você estudar a diferença entre Checked Exceptions e Unchecked Exceptions.
nao foi o que eu perguntei sei com usar a exceçao mas so uso as que eu ja conheço a pergunta e como saber quais usar e quando nao como usar mas obrigado pela tentativa
Oi, boa tarde! Tudo bem? Acho que então a pergunta seria: quando eu devo saber quais exceções eu vou tratar em determinado trecho de código? Porque eu não entendo essa expressão "quais exceções usar", porque você não usa exceção e sim lança elas ou trata elas. Se for nesse sentido a sua pergunta, então você deve verificar quais exceções um método pode lançar. Pra isso é só segurar CTRL e clicar em cima do método. Exemplo:
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (IOException e) {
throw new RuntimeException("A requisição HTTP falhou", e);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("A thread foi interrompida durante a request HTTP", e);
}
Se você entrar no método send() segurando CTRL e clicando nele, você vai ver que ele pode lançar duas exceptions:
public abstract <T> HttpResponse<T>
send(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)
throws IOException, InterruptedException;
Então, a partir daí você vai saber quais exceções esse método pode lançar e se antecipar e tratar elas.
ata entao cada método tem sua exceção e si eu criar um metodo e a mesma coisa
Exatamente! Vamos supor que você está criando um método para dividir 2 valores:
class Calculadora {
dividir(a, b) {
if (b === 0) {
throw new Error('Divisão por zero não é permitida.');
}
return a / b;
}
}
No método dividir(), que você criou, você está lançando uma exception Error()(pois não se pode dividir o dividendo por 0), então quem for usar esse método, pode tratar essa exceção que você está lançando:
const calc = new Calculadora();
try {
console.log(calc.dividir(10, 2)); // 5
console.log(calc.dividir(10, 0)); // Lança a exception
} catch (error) {
console.error(error.message); // Divisão por zero não é permitida
}
muinto bom obrigado