---
title: Classes and Objects
localeTitle: Classes e Objetos
---
# Classes e Objetos

Classes são grupos de variáveis ​​e operações neles. Uma classe pode ter variáveis, métodos (ou funções) e construtores (ou métodos que são usados ​​para iniciar, mais sobre isso depois!).

Uma classe pode conter qualquer um dos seguintes tipos de variáveis.

*   Variáveis ​​de Classe: Estas são as variáveis ​​que são declaradas dentro da definição da classe, fora de qualquer método, com a palavra-chave estática. Uma variável de classe é compartilhada entre todas as instâncias de uma classe. As variáveis ​​de classe também são conhecidas como variáveis ​​estáticas, elas são inicializadas apenas uma vez no momento da compilação da classe, portanto, apenas uma única cópia deste está disponível para todas as instâncias.
*   Variáveis ​​de instância: A diferença com as variáveis ​​de classe é que as variáveis ​​de instância são inicializadas dentro do construtor de classe e não são compartilhadas entre todos os objetos. No momento da instanciação, uma nova cópia da variável de instância é criada.

```java
public class Example { 
 
    private static int myVar = 1; // Class Variable 
 
    private int mySecondVar; // Instance Variable 
    Example(int mySecondVar) { 
            this.mySecondVar = mySecondVar; // An instance variable must be initialized inside the constructor 
```

Pense em uma `Class` como uma planta para criar algo concreto. Uma `Class` informa como o 'o que' e 'como' um `object` da referida Classe parecerá `instantiated` uma vez. Em essência, define `properties` (digamos, cor, capacidade do motor) e `behavior` (parar, acelerar, mudar de marcha, buzinar etc.) para um carro no caso abaixo.

Objetos são _instâncias_ de uma classe. Todos os objetos são instâncias de uma determinada classe. Imagine uma classe sendo um "modelo", do qual cada objeto é copiado. Um jeito de entender objetos é como se fossem realmente um objeto do mundo real, existem canetas de diferentes cores de tinta, marcas, porém todas continuando sendo canetas, desse jeito uma caneta especifica é um objeto da classe caneta.
Quando você cria um objeto, ele basicamente cria um novo objeto no blueprint de uma classe. Agora vamos ver isso em um pequeno trecho de código:

```java
// Car class 
 public class Car { 
    // car name 
    private String name; 
 
    // car manufacturer name 
    private String manufacturerName; 
 
    // constructor 1 
    public Car() { 
    } 
 
    // constructor 2 
    public Car(String name, String man) { 
        this.name = name; 
        this.manufacturerName = man; 
    } 
 
    // getter name method 
    public String getName() { 
        return name; 
    } 
 
    // getter manufacture method 
    public String getManufacturerName() { 
        return manufacturerName; 
    } 
 
    //setter name method 
    public void setName(String name){ 
        this.name = name; 
    } 
 
    //setter manufacture method 
    public void setManufacture(String man){ 
        this.manufacturerName = man; 
    } 
 } 
 
 // sample code 
 
 Car modelS = new Car("Model S","Tesla"); 
 // prints Tesla Model S 
 System.out.println("Full Car Model S= " + modelS.getManufacturerName() + " : " + modelS.getName()); 
 
 Car modelX = new Car(); 
 modelX.setName("Model X"); 
 modelX.setManufacture("BMW"); 
 // prints Tesla Model X 
 System.out.println("Full Car Model X= " + modelX.getManufacturerName() + " : " + modelX.getName()); 
```

![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=2 ":foguete:") [Executar código](https://repl.it/CJZP/0)

Portanto, `Car` é uma classe que possui os campos ou propriedades `name` e `manufacturerName` . `modelS` é um objeto da classe `Car` . Então, o `modelS` também possui as mesmas propriedades e métodos.

É praticamente normal garantir que as 'informações' do objeto, neste caso o `name` e `manufacturerName` variáveis `manufacturerName` , sejam privadas e sejam acessadas somente por meio desses getters e setters. Isso evita um problema com o código de depuração que envolve variáveis ​​de membro de um objeto. Se as variáveis ​​de membro forem tornadas públicas e, por qualquer motivo, o programa travar, você poderá obter um rastreamento de pilha bastante complexo, que pode ser difícil apontar o erro. Manter as variáveis ​​privadas e acessíveis apenas por meio de getters e setters simplificará essa mensagem de erro.
