Skip to content

Latest commit

 

History

History
162 lines (134 loc) · 7.7 KB

Parte-2-Tipos-Primitivos.md

File metadata and controls

162 lines (134 loc) · 7.7 KB

Parte 2 - Tipos primitivos, classes e objetos e aa diferencias entre eles.

Tipos primitivios

Existem 8 (ou 9 se consideramos como um tipo primitivo) tipos primitivos em Java. Essas variaveis NÃO são objetos, mas são tipos mais básicos, e especificam apenas o tamanho e a categoria de valores de variáveis e não contém métodos adicionais.

Cada um desses tipos primitivos tem uma classe específica para criar objetos do valor do tipo primitivo, e essas classes são chamadas "wrapper". Por exemplo, o tipo primitivo int tem uma classe wrapper chamada Integer. E a classe Integer tem métodos para manipular, alterar, etc... o valor do int que a classe Integer guarda por dentro.

O beneficio é que podemos evolver a utilidade de um valor primitivo usando a classe wrapper, de tal tipo.

Outros beneficios de uso de classes wrapper

  1. Eles convertem tipos de dados primitivos em objetos. Os objetos são necessários se precisamos modificar os argumentos passados para um método (porque os tipos primitivos são passados por valor).

  2. Muitas classes no pacote java.util lidam apenas com objetos e, portanto, as classes wrapper também são necessárias la.

    • Classes comuns como List, Map, Set, Collection, ArrayList e Vector, e muitos outros armazenam apenas objetos e não tipos primitivos. O motivo é que essas classes trabalhar com tipos de referência, que podem ser alterados dentro do método, mas tipos primitivos não podem ser alterados dentro do método, para alterar valor de um tipo primitivo, tem que reassinar um novo valor ao variável.
  3. Um objeto é necessário para oferecer suporte à sincronização em multithreading.

Então, agora sabemos que as principais diferenças entre tipos primitivos e wrappers são:

  1. Os tipos primitivos são mais rápidos do que os wrappers, por não ser objetos. Mas isso depende do JDK (ou JVM) usado, por que alguns JVMs otimizam o uso de wrappers, e convertem para tipos primitivos quando possível, e outros não.

  2. Os tipos primitivos não podem ser nulos, mas objetos podem ser nulos. Todos os tipos primitivos têm um valor padrão se não for inicializada. Por exemplo, um int é 0, um boolean é false, um char é '\u0000'.

  3. Os tipos primitivos não têm métodos, mas os wrappers têm métodos. Primitivos podem ter propriedades, mas não métodos.

  4. Tipos primitivos são predefinidos (por exemplo, int, boolean, char), e não é possivel criar um tipo primitivo.

Você pode criar classes, interfaces, enums ou annotations que utilizam tipos primitivos internamente, mas você não pode criar um tipo primitivo em Java, a menos que que você cria o seu próprio JVM que suporta essa funcionalidade.

Categoria Tipo Wrapper Tamanho
byte / bits
Min Max Exemplo de uso
Integer byte Byte 1 byte (8 bits) -128 127
byte b = 65;
char Character 2 bytes (16 bits) Um caracter Unicode
char c = 'A';
short Short 2 bytes (16 bits) -32.768 32.767
short s = 65;
int Integer 4 bytes (32 bits) -2.147.483.648 2.147.483.647
int i = 65;
long Long 8 bytes (64 bits) -9.223.372,03.854.775.808 9.223.372.036.854.775.807
long l = 65L;
Floating Point float Float 4 bytes (32 bits) 3,40282347 x 1038 1,40239846 x 10-45
float f = 65f;
double Double 8 bytes (64 bits) 1,7976931348623157 x 10308 4,9406564584124654 x 10-324
double = d = 65.55;
Lembre-se: float e double NUNCA podem ser usados para tratar valores moneatarios. Não importa se usa wrapper ou não. Existem classes especificas para isso.
Outros boolean Boolean 1 byte (8 bits) false true
boolean b = false;
void Void Void não tem nem valor ou tamanho especifico. Normalmente usados para indicar metodos sem valor de retorno

Classes e Objetos em Java

A diferença entre uma classe e um objeto é que uma classe é um modelo para um objeto. Um objeto é apenas uma instância criada de uma classe. Uma classe é uma categoria de dado, e um objeto é uma variável da tal classe. Ou seja, a classe é uma receita de bolo, e o objeto é o bolo.

Criando uma classe representando um carro

Para criar uma classe em Java, basta usar a palavra reservada class seguida do nome da classe. Por convenção, o nome da classe deve começar com letra maiúscula. A classe pode conter atributos e métodos. Atributos são variáveis que pertencem a classe, e métodos são funções que pertencem à classe. A classe pode conter atributos e métodos privados, protegidos e públicos. Atributos e métodos privados só podem ser acessados na classe. Atributos e métodos protegidos só podem ser acessados na classe e de classes filhas. Atributos e métodos públicos podem ser acessados de qualquer lugar.

package br.dev.free.tipos;

// Definição de uma classe chamada Carro.
public class Carro {

    private String marca;
    private String modelo;
    private int ano;

    public void ligar() {
        this.ligado = true;
    }
    public void desligar() {
        this.ligado = false;
    }
    
    public void imprimir() {
        System.out.println("Marca: " + this.marca);
        System.out.println("Modelo: " + this.modelo);
        System.out.println("Ano: " + this.ano);
        System.out.println("Ligado: " + this.ligado);
    }
    
}

// Criação de um objeto da classe Carro.
Carro carro = new Carro();
carro.imprimir();  // Vai imprimir os valores padrão dos atributos da classe Carro.