Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Gosrtaria de um explicação sobre um trecho de código em Java quem puder me explicar ajudaria!

Quero saber o porque de colocar (throws IOException, InterruptedException) ao lado do metodo?? Já vi algumas explicações porém não me entra na cabeça!!

package br.principal;

import br.com.alura.java_orientacao_a_objeto.exception.ErroConvertException;
import br.com.alura.java_orientacao_a_objeto.modelo.Titulo;
import br.com.alura.java_orientacao_a_objeto.modelo.TituloOmdb;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class PrincipalComBusca {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner scan = new Scanner(System.in);

        System.out.println("O que vc deseja assistir: ");
        String busca = scan.nextLine();

        String endereco = "https://www.omdbapi.com/?t=" + busca.replace(" ", "+") + "&apikey=2b316357";

        try {
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(endereco))
                    .build();
            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());

            String json = response.body();
            // System.out.println(json + "\n\n");

            Gson gson = new GsonBuilder()
                    .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                    .create();

            //Titulo title = gson.fromJson(json, Titulo.class);
            TituloOmdb dadosOmdb = gson.fromJson(json, TituloOmdb.class);
            System.out.println(dadosOmdb);


            Titulo meuTitulo = new Titulo(dadosOmdb);
            System.out.println(meuTitulo);

        } catch (NumberFormatException erro) {
            System.out.println("Aconteceu um erro: " + erro.getMessage() + "\n");
        } catch (IllegalArgumentException | NullPointerException err) {
            System.out.println("Aconteceu erro de argumento: " + err.getMessage());
        } catch (ErroConvertException error) {
            System.out.println(error.getMensagem());
        } finally {
            System.out.println("Programa encerrado corretamente.");
        }
    }
}
2 respostas
solução!

Oi João! Tudo certo?

Entendo que essa parte do Java pode ser um pouco confusa no começo, mas vou explicar de uma maneira simples. Quando você vê throws IOException, InterruptedException ao lado da assinatura de um método, como no seu main:

public static void main(String[] args) throws IOException, InterruptedException {

Isso significa que o método pode "lançar" (ou seja, gerar) essas exceções durante sua execução. Em Java, as exceções são uma maneira de lidar com erros ou condições inesperadas que podem ocorrer durante a execução de um programa.

Vamos falar um pouco sobre cada uma:

  1. IOException: Essa exceção é lançada quando ocorre um erro de entrada/saída. No seu código, isso pode acontecer, por exemplo, quando você está tentando enviar uma solicitação HTTP e há algum problema na comunicação, como a URL estar incorreta ou a conexão com a internet falhar.

  2. InterruptedException: Essa exceção é lançada quando uma thread que está dormindo, esperando ou ocupada é interrompida. No contexto do seu código, isso poderia acontecer se, por algum motivo, a operação de envio ou recebimento do HTTP for interrompida.

A declaração throws é uma forma de "avisar" quem está chamando o método que ele precisa lidar com essas possíveis exceções. Isso pode ser feito usando um bloco try-catch, como você já está fazendo em seu código.

Por exemplo, se o método send do HttpClient lançar uma IOException, você já está preparado para capturá-la e tratá-la adequadamente no seu bloco catch.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Olá, Armano Barros, Entendi sim obrigado pela resposta ajudou muito!