AFF Education Construa seu Futuro

Aula 23 - Conceito do import

Conceito do import

No Java, algumas funcionalidades não estão disponíveis implicitamente no Java (ficando fora das classes), sendo necessário importar essas funcionalidades (ou classes relacionadas) explicitamente. É o caso da funcionalidade para datas e horas.

A API moderna de data/hora (desde Java 8):

Esta necessidade de importação explícita é uma característica do Java que ajuda a:

Exemplo de import com Date

Vamos ver um exemplo usando a classe Date do pacote java.util:

// Importando a classe Date do pacote java.util
import java.util.Date;

public class ExemploDate {
    public static void main(String[] args) {
        // Criando uma instância de Date que representa a data e hora atual
        Date dataAtual = new Date();
        
        // Imprimindo a data e hora atual
        System.out.println("Data e hora atual: " + dataAtual);
        
        // Obtendo o timestamp (milissegundos desde 01/01/1970)
        long timestamp = dataAtual.getTime();
        System.out.println("Timestamp: " + timestamp + " ms");
        
        // Criando uma data a partir de um timestamp específico
        Date dataEspecifica = new Date(1000000000000L); // 09/09/2001 01:46:40
        System.out.println("Data específica: " + dataEspecifica);
    }
}

Data e hora atual: Thu May 09 14:30:25 BRT 2025

Timestamp: 1747045825384 ms

Data específica: Sun Sep 09 01:46:40 BRT 2001

Nota: A classe Date da API antiga (java.util.Date) está em grande parte obsoleta. Para novas aplicações, é recomendado usar as classes do pacote java.time introduzidas no Java 8.

Exemplo de import com a API moderna de data/hora

Agora, vamos ver como trabalhar com a API moderna de data/hora do Java 8:

// Importando classes da API moderna de data/hora
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class ExemploDataHoraModerna {
    public static void main(String[] args) {
        // Obtendo a data atual
        LocalDate dataAtual = LocalDate.now();
        System.out.println("Data atual: " + dataAtual);
        
        // Obtendo a hora atual
        LocalTime horaAtual = LocalTime.now();
        System.out.println("Hora atual: " + horaAtual);
        
        // Obtendo data e hora atuais
        LocalDateTime dataHoraAtual = LocalDateTime.now();
        System.out.println("Data e hora atuais: " + dataHoraAtual);
        
        // Criando uma data específica
        LocalDate aniversario = LocalDate.of(1990, 5, 15);
        System.out.println("Aniversário: " + aniversario);
        
        // Formatando uma data
        DateTimeFormatter formatador = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        String dataFormatada = dataAtual.format(formatador);
        System.out.println("Data formatada: " + dataFormatada);
        
        // Formatando data e hora
        DateTimeFormatter formatadorDataHora = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
        String dataHoraFormatada = dataHoraAtual.format(formatadorDataHora);
        System.out.println("Data e hora formatadas: " + dataHoraFormatada);
    }
}

Data atual: 2025-05-09

Hora atual: 14:32:45.123456789

Data e hora atuais: 2025-05-09T14:32:45.123456789

Aniversário: 1990-05-15

Data formatada: 09/05/2025

Data e hora formatadas: 09/05/2025 14:32:45

Scanner do Java.util

Scanner é usado para receber dados de entrada do usuário. Para usá-lo, precisamos importá-lo:

// Importando a classe Scanner
import java.util.Scanner;

public class ExemploScanner {
    public static void main(String[] args) {
        // Criando um objeto Scanner para ler entrada do teclado
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Digite seu nome: ");
        // Lendo uma linha de texto
        String nome = entrada.nextLine();
        
        System.out.print("Digite sua idade: ");
        // Lendo um número inteiro
        int idade = entrada.nextInt();
        
        // Consumindo a quebra de linha pendente
        scanner.nextLine();
        
        System.out.print("Digite sua profissão: ");
        String profissao = entrada.nextLine();
        
        // Exibindo as informações
        System.out.println("\nInformações:");
        System.out.println("Nome: " + nome);
        System.out.println("Idade: " + idade);
        System.out.println("Profissão: " + profissao);
        
        // Fechando o scanner para liberar recursos
        entrada.close();
    }
}

Digite seu nome: João Silva

Digite sua idade: 28

Digite sua profissão: Programador


Informações:

Nome: João Silva

Idade: 28

Profissão: Programador

nextLine(), nextInt(), e nextDouble()

Os métodos nextLine(), nextDouble() e nextInt() são usados para ler entrada de dados do usuário através do Scanner em Java.

import java.util.Scanner;

public class ExemploMetodosScanner {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        // Exemplo de nextLine()
        System.out.print("Digite seu nome completo: ");
        String nomeCompleto = entrada.nextLine();
        System.out.println("Nome digitado: " + nomeCompleto);
        
        // Exemplo de nextInt()
        System.out.print("Digite sua idade: ");
        int idade = entrada.nextInt();
        System.out.println("Idade digitada: " + idade);
        
        // ATENÇÃO: nextInt() não consome a quebra de linha!
        // É necessário consumir a quebra de linha pendente
        entrada.nextLine();
        
        // Sem o scanner.nextLine() acima, o próximo nextLine()
        // capturaria apenas a quebra de linha pendente
        System.out.print("Digite sua cidade: ");
        String cidade = entrada.nextLine();
        System.out.println("Cidade digitada: " + cidade);
        
        // Exemplo de nextDouble()
        System.out.print("Digite sua altura (em metros): ");
        double altura = entrada.nextDouble();
        System.out.println("Altura digitada: " + altura + " metros");
        
        entrada.close();
    }
}

Digite seu nome completo: Maria Silva Santos

Nome digitado: Maria Silva Santos

Digite sua idade: 35

Idade digitada: 35

Digite sua cidade: São Paulo

Cidade digitada: São Paulo

Digite sua altura (em metros): 1.65

Altura digitada: 1.65 metros

Problema comum: Se você usar nextInt() ou nextDouble() e depois tentar usar nextLine(), pode ter problemas. Isso ocorre porque métodos como nextInt() não consomem a quebra de linha (Enter) que o usuário pressiona, então o próximo nextLine() vai capturar apenas essa quebra de linha vazia.

Solução: Sempre use um scanner.nextLine() extra após chamar nextInt() ou nextDouble() se você planeja usar nextLine() em seguida.

Exercícios

Teste seus conhecimentos sobre o conceito de import e classes Java:

1. Qual é o propósito da instrução import em Java?

2. Qual instrução de import é necessária para usar a classe Scanner?

3. Qual método do Scanner deve ser usado para ler uma linha inteira de texto que pode conter espaços?

4. Complete o código para importar a classe LocalDate da API moderna de data/hora:

________________;

public class ExemploData {
    public static void main(String[] args) {
        LocalDate hoje = LocalDate.now();
        System.out.println("Hoje é: " + hoje);
    }
}

5. Por que é necessário chamar scanner.nextLine() após usar scanner.nextInt()?

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Para que serve a instrução import java.util.Scanner;?

2. Onde as instruções import devem aparecer no arquivo?