Classes

Introdução

Classes

Não é nenhuma surpresa que a linguagem Java é composta exclusivamente por classes que se tornarão objetos mediante o recurso de instanciação (criação de objetos).

Imagina agora, você precisar realizar a manutenção de um veículo sem saber quais são as ferramentas e aonde estariam localizadas, seria uma loucura, não? 🤪

Nesta jornada iremos conhecer as classes mais relevantes e o que elas podem oferecer ao longo de sua jornada em desenvolvimento.

Tipos de Classe - Introdução

Documentação

A linguagem Java contém um arsenal poderosíssimo no que se refere a documentação de suas classes que compõem todo o seu ecossistema.

O que devemos compreender é que a cada versão, novas classes surgirão além de novos recursos nas classes já existentes. Então, você deve estar ciente de qual versão do Java você irá utilizar em seus projetos.

Abaixo ilustraremos o modelo de documentação com base na versão 8 do Java.

Pacotes java

Principais pacotes

Chegou a hora de explorar e conhecer os principais pacotes e classes que são recorrentemente utilizados nos milhares de projetos já criados até os dias atuais.

PacoteDescrição
java.langPacote que contém as principais classes da linguagem, como Object, String, Long e etc
java.ioPacote que centraliza todas as classes relacionadas a trabalhar com leitura e escrita de arquivos
java.timePacote introduzido recentemente para provê recursos de manipulação de datas e horas na linguagem
java.utilPacote onde podemos encontrar classes úteis em sua maioria com recursos estáticos
A melhor maneira para você dominar uma linguagem como o Java, é explorando recorrentemente os recursos que cada classe pode oferecer associando à requisitos do dia-a-dia.

Classes de sistema

A linguagem Java oferece classes nas quais nos ajudam a realizar uma interação em nosso programa em momento de sua execução com finalidades e recursos bem específicos.

java.lang.System

A classe java.lang.System oferece recursos relacionados a dados e interações em nosso programa em tempo de execução como por exemplo: listar as propriedades de ambiente, retornar o momento atual de alguma execução, exibir mensagens informativas ou de erro no console ou até mesmo encerrar o sistema.

Todos os seus métodos são estáticos (não podendo criar um objeto desta classe) onde os mais utilizados são:

MétodoDescrição
System.outEste método retorna um objeto do tipo java.io.PrintStream para habilitar representações de impressão no console
System.errEste método retorna um objeto do tipo java.io.PrintStream para habilitar representações de impressão no console sinalizando um erro
System.inEste método retorna um objeto do tipo java.io.PrintStream capaz de ler as entradas digitadas pelo usuário, este recurso necessita do auxílio da classe java.util.Scanner

Exemplos

public class SystemApp {
    public static void main(String[] args) {
  
        System.out.print("Ola mundo");
     
        //imprime Ola mundo gerando uma nova linha
        System.out.println("Ola mundo");
        
    }
}
Evite criar complexidade utilizando a classe java.util.Scanner para simular testes de seu programa, prefira informar os valores literalmente e focar de fato no algorítimo em questão.

java.util.Scaner

No tópico anterior exploramos um pouco sobre a classe java.util.Scanner para auxiliar na interação do usuário através de console utilizando a classe java.lang.System, mas a classe possui outros recursos relacionados e algumas outras finalidades adicionais.

//Continuando ...
import java.util.Scanner;
public class SystemApp {
    public static void main(String[] args) {
      Scanner scan = new Scanner(System.in);
      System.out.println ("Digite seu nome: ");
      String nome = scan.next();

      System.out.println ("Digite sua idade: ");
      Integer idade = scan.nextInt(); //converte o valor inserido para um Integer

      System.out.println ("Digite sua idade: ");
      Double peso = scan.nextDouble(); //converte o valor inserido para um Double

      System.out.println ("Seu nome é : " + nome);
      System.out.println ("Sua idade é : " + idade);
      System.out.println ("Sua peso é : " + peso);

      //scan.nextBigDecimal(); scan.nextBoolean(); -> já sacou o conceito, correto ?
    }
}

Vamos desfrutar um pouco mais nossa classe Scanner imaginando que agora você obteve o nome, idade e peso através de uma leitura de arquivo (simulação) separado por ;, como seria o nosso algoritmo diante deste cenário?

SystemApp.java
import java.util.Scanner;

public class SystemApp {
    public static void main(String[] args) {
        String nome = null;
        Integer idade = null;
        Double peso=null;

        //simulando uma linha existente em um arquivo txt
        String stringLinhaArquivo = "gleyson sampaio;32;1.59";
        Scanner scan = new Scanner(stringLinhaArquivo);
        scan.useDelimiter(";"); //definindo um delimitador
        //conhecendo novos recursos
        int index = 0;
        while (scan.hasNext()){ //olha um conceito de controle de repetição sendo aplicado, tudo está mais claro agora hein??
      
            if(index == 0) // Uuufa, sorte que eu aprendi sobre controle de fluxo e operadores anteriormente
                nome = scan.next();
            else if( index == 1)
                idade  = Integer.valueOf(scan.next());
            else
                peso = Double.valueOf(scan.next());
      
            index ++; //mais um conceito escondido bem aqui !!
        }

        System.out.println ("Seu nome é : " + nome);
        System.out.println ("Sua idade é : " + idade);
        System.out.println ("Sua peso é : " + peso);

        //scan.nextBigDecimal(); scan.nextBoolean(); -> já sacou o conceito, correto ?
    }
}
Com a classe Scanner podemos fazer uma variedade de coisas, mas vamos parar por aqui, lembre-se: Para ser um bom programador em Java, é necessário compreender o máximo possível dos recursos disponíveis.

java.io.PrintStream

A classe java.io.PrintStream não é convenientemente declarada de forma explícita no dia-a-dia, pois ela sempre está "escondida" na execução do método System.out. Já exploramos anteriormente a finalidade de usar os métodos da classe PrintStream para imprimir dados no console, porém agora, vamos explorar um recurso extremamente relevante e recorrente em qualquer projeto, a formatação de textos para serem impressos na tela do seu console.

SystemApp.java
public class SystemApp {
    public static void main(String[] args) {
        String nome = "gleyson";
        int idade = 32;
        double peso = 1.58;
        double renda = 3234.56;

        //vamos imprimir os dados acima aplicando uma formatação no console

        //System.out.printf(formato, array de parâmetros (,,,) );

        System.out.printf("Nome: %s Idade: %d Peso: %.2f Renda: R$ %,.2f", nome, idade, peso, renda);
     
        //Resultado no console: Nome: gleyson Idade: 32 Peso: 1,58 Renda: R$ 3.234,56
        
        //%s ->     parâmetro do tipo String
        //%d ->     parâmetro do tipo Integer / Long
        //%f ->     parâmetro do tipo Double / Float
        //.2 ->     quer dizer que serão dois dígitos decimais
        //,.2 ->    quer dizer que serão dois dígitos decimais e informando o (.) de milhar
     
    }
}
Tire um tempo e explore um pouco mais os recursos oferecidos em cada classe apresentada 🚀