O que é uma classe, um objeto e uma instância em Java?
Respostas:
Java (e qualquer outra linguagem de programação) é modelado em termos de tipos e valores . No nível teórico, um valor é uma representação de algum quantum de informação e um tipo é um conjunto de valores. Quando dizemos que o valor X é uma instância do tipo Y, estamos simplesmente dizendo que X é um membro do conjunto de valores do tipo Y.
Então é isso que o termo "instância" realmente significa: ele descreve um relacionamento, não uma coisa.
O sistema de tipos da linguagem de programação Java suporta dois tipos de tipos, tipos primitivos e tipos de referência . Os tipos de referência são divididos em classes e tipos de array . Um objeto Java é uma instância de um tipo de referência.
Um objeto é uma instância de classe ou um array. ( JLS 4.3.1 )
Essa é a visão teórica do tipo.
Na prática, a maioria dos desenvolvedores Java trata as palavras "instância" e "objeto" como sinônimos. (E isso inclui a mim, então estou tentando explicar algo rapidamente.) E a maioria dos desenvolvedores usa a palavra "valor" em vez de "instância" para se referir a uma instância de um tipo primitivo.
user2390183
. Você está tratando variáveis como "nomes". Eles não são. Variáveis são "portadores de referência" que contêm referências a objetos. Os objetos não têm nomes intrínsecos. As referências são o que há de mais próximo de um "nome" para um objeto, exceto que não têm uma representação constante. (O GC pode mover um objeto que muda o padrão de bits usado para representar a referência.)
Uma classe é um projeto que você usa para criar objetos . Um objeto é uma instância de uma classe - é uma 'coisa' concreta que você fez usando uma classe específica. Portanto, 'objeto' e 'instância' são a mesma coisa, mas a palavra 'instância' indica a relação de um objeto com sua classe.
Isso é fácil de entender se você olhar um exemplo. Por exemplo, suponha que você tenha uma aula House
. Sua própria casa é um objeto e uma instância de classe House
. A casa de sua irmã é outro objeto (outra instância de classe House
).
// Class House describes what a house is
class House {
// ...
}
// You can use class House to create objects (instances of class House)
House myHouse = new House();
House sistersHouse = new House();
A aula House
descreve o conceito do que é uma casa, e há casas específicas de concreto que são objetos e instâncias de classeHouse
.
Nota: Isso é exatamente igual em Java e em todas as linguagens de programação orientadas a objetos.
class House {
// blue print for House Objects
}
class Car {
// blue print for Instances of Class Car
}
House myHouse = House new();
Car myCar = Car new();
Uma classe é basicamente uma definição e contém o código do objeto. Um objeto é uma instância de uma classe
por exemplo se você diz
String word = new String();
a classe é a classe String, que descreve a palavra do objeto (instância).
Quando uma classe é declarada, nenhuma memória é alocada, então a classe é apenas um modelo.
Quando o objeto da classe é declarado, a memória é alocada.
static
variáveis da classe. (E também para outras coisas que estão relacionadas à identidade de tipo da classe.)
Eu gosto da explicação de Jesper em termos leigos
Ao improvisar exemplos da resposta de Jesper,
class House {
// blue print for House Objects
}
class Car {
// blue print for Instances of Class Car
}
House myHouse = new House();
Car myCar = new Car();
myHouse e myCar são objetos
myHouse é uma instância de House (relaciona Object-myHouse a sua Class-House) myCar é uma instância de Car
em resumo
"myHouse é uma instância de Class House" que é o mesmo que dizer "myHouse é um objeto do tipo House"
Classe é o tipo de dados, você usa esse tipo para criar o objeto.
A instância é lógica, mas o objeto é físico. Os meios ocupam alguma memória.
Podemos criar uma instância para a classe abstrata e também para a interface, mas não podemos criar um
objeto para elas.
Objeto é instância de classe e instância significa representante de classe, ou seja, objeto.
Instância refere-se à referência de um objeto.
O objeto está na verdade apontando para o endereço de memória dessa instância.
Você não pode passar instância sobre as camadas, mas você pode passar o objeto sobre as camadas
Você não pode armazenar uma instância, mas pode armazenar um objeto
Um único objeto pode ter mais de uma instância.
A instância terá a definição da classe e a definição do objeto, enquanto no objeto terá apenas a definição do objeto.
Sintaxe do objeto:
Classname var=new Classname();
Mas, por exemplo, a criação retorna apenas um ponteiro se referindo a um objeto, a sintaxe é:
Classname varname;
Em java, os objetos são gerados na memória heap. Estes requerem referência para serem apontados e usados em nosso aplicativo. A referência tem a localização da memória do objeto com a qual podemos usar os objetos em nosso aplicativo. Em resumo, uma referência nada mais é do que o nome da variável que armazena o endereço do objeto instanciado em um local da memória.
Um instance
é um termo geral para object
. FYI, Object
é uma classe.
Por exemplo,
Class A{
}
A ref = new A();
Para o trecho de código acima, ref é a referência para um objeto da classe A gerado no heap.
Honestamente, me sinto mais confortável com as definições de blog do Alfred :
Objeto : os objetos do mundo real compartilham 2 características principais, estado e comportamento. Os humanos têm estado (nome, idade) e comportamento (correr, dormir). O carro tem estado (velocidade atual, marcha atual) e comportamento (aplicação do freio, mudança de marcha). Os objetos de software são conceitualmente semelhantes aos objetos do mundo real: eles também consistem em estado e comportamento relacionado. Um objeto armazena seu estado em campos e expõe seu comportamento por meio de métodos.
Classe : é um “template” / “blueprint” que é usado para criar objetos. Basicamente, uma classe consiste em campo, campo estático, método, método estático e construtor. O campo é usado para manter o estado da classe (por exemplo: nome do objeto Aluno). Método é usado para representar o comportamento da classe (por exemplo: como um objeto Aluno vai se levantar). Construtor é usado para criar uma nova instância da classe.
Instância : uma instância é uma cópia única de uma classe que representa um objeto. Quando uma nova instância de uma classe é criada, a JVM alocará um espaço de memória para essa instância de classe.
Dado o próximo exemplo:
public class Person {
private int id;
private String name;
private int age;
public Person (int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id != other.id)
return false;
return true;
}
public static void main(String[] args) {
//case 1
Person p1 = new Person(1, "Carlos", 20);
Person p2 = new Person(1, "Carlos", 20);
//case 2
Person p3 = new Person(2, "John", 15);
Person p4 = new Person(3, "Mary", 17);
}
}
Para o caso 1, existem duas instâncias da classe Person, mas ambas as instâncias representam o mesmo objeto.
Para o caso 2, existem duas instâncias da classe Person, mas cada instância representa um objeto diferente.
Portanto, classe, objeto e instância são coisas diferentes. Objeto e instância não são sinônimos, conforme sugerido na resposta selecionada como resposta certa.
Se você tem um programa que modela carros, tem uma classe para representar carros, então em Code você poderia dizer:
Car someCar = new Car();
someCar agora é uma instância da classe Car. Se o programa for usado em uma oficina e o someCar representar seu carro em seu sistema, então seu carro é o objeto.
Portanto, Car é uma classe que pode representar qualquer carro do mundo real someCar é uma instância da classe Car e someCare representa um objeto da vida real (seu carro)
no entanto, instância e objeto são frequentemente usados de forma intercambiável quando se trata de discutir a codificação
someCar
é uma referência a uma instância de carro. A própria instância não tem nome.
Qualquer tipo de dado que seu computador armazena e processa é, em sua representação mais básica, uma fileira de bits. A forma como esses bits são interpretados é feita por meio de tipos de dados. Os tipos de dados podem ser primitivos ou complexos. Os tipos de dados primitivos são - por exemplo - int ou double. Eles têm um comprimento específico e uma forma específica de serem interpretados. No caso de um inteiro, normalmente o primeiro bit é usado para o sinal, os outros são usados para o valor.
Os tipos de dados complexos podem ser combinações de tipos de dados primitivos e outros complexos e são chamados de "Classe" em Java.
Você pode definir o tipo de dados complexo PeopleName que consiste em duas Strings chamadas de nome e sobrenome. Cada String em Java é outro tipo de dados complexo. Strings em retorno são (provavelmente) implementadas usando o tipo de dados primitivo char para o qual Java sabe quantos bits eles levam para armazenar e como interpretá-los.
Ao criar uma instância de um tipo de dados, você obtém um objeto e seus computadores reservam alguma memória para ele e lembram sua localização e o nome dessa instância. Uma instância de PeopleName na memória ocupará o espaço das duas variáveis String e um pouco mais para contabilidade. Um inteiro ocupa 32 bits em Java.
Os tipos de dados complexos podem ter métodos atribuídos a eles. Os métodos podem executar ações em seus argumentos ou na instância do tipo de dados a partir do qual você chama este método. Se você tiver duas instâncias de PeopleName chamadas p1 e p2 e chamar um método p1.getFirstName (), ele geralmente retorna o primeiro nome da primeira pessoa, mas não o da segunda pessoa.
O conceito por trás de classes e objetos é encapsular a lógica em uma única unidade de programação. As classes são os projetos dos objetos criados.
Aqui está um exemplo de uma classe que representa um carro:
public class Car {
int currentSpeed;
String name;
public void accelerate() {
}
public void park() {
}
public void printCurrentSpeed() {
}
}
Você pode criar instâncias do objeto Car assim:
Car audi = new Car();
Car toyota = new Car();
Eu peguei o exemplo deste tutorial
Ele tem existência lógica, ou seja, nenhum espaço de memória é alocado quando é criado.
É um conjunto de objetos.
Uma classe pode ser considerada um projeto para criar objetos.
É criado usando a palavra-chave class
Uma classe define os métodos e membros de dados que serão possuídos por Objetos.
Ele tem existência física, ou seja, o espaço de memória é alocado quando é criado.
É uma instância de uma classe.
Um objeto é uma entidade única que contém membros de dados e funções de membro juntos na linguagem OOP.
É criado usando uma nova palavra-chave
Um objeto especifica as implementações dos métodos e os valores que serão possuídos pelos membros de dados na classe.
Uma classe é um projeto necessário para fazer um objeto (= instância).
A diferença entre um objeto e uma instância é que um objeto é uma coisa e uma instância é uma relação.
Em outras palavras, instância descreve a relação de um objeto com a classe da qual o objeto foi feito.
A definição "Objeto é uma instância de uma classe", é conceitualmente errada, mas correta conforme a implementação. Na verdade, os recursos orientados a objetos são retirados da vida real, para focar a mente do programador de mais para menos. Na vida real, as aulas são projetadas para gerenciar o objeto. Por exemplo, nós, seres humanos, temos uma casta, religião, nacionalidade e muito mais. Essas castas, religião, nacionalidade são as classes e não existem sem seres humanos. Mas na implementação não há existência de objetos sem classes. Objeto- O objeto é uma entidade discreta com algum atributo bem definido. Aqui, discreto significa algo que o torna único. Atributos bem definidos fazem sentido em algum contexto. Class- Classificação de objeto com algum comportamento comum ou objetos de algum tipo comum.
Embora as respostas acima estejam corretas, outra maneira de pensar sobre Classes e Objetos seria usar exemplos do mundo real: Uma classe chamada Animal pode conter objetos como Gato, Cachorro ou Peixe. Um objeto com um título de Bíblia seria da classe Livro, etc. As classes são gerais, os objetos são específicos. Este exemplo de pensamento me ajudou quando eu estava aprendendo Java.
Animal
é uma classe e Cat
é uma instância, o que é meu gatinho "Fluffy"?
Animal
denota o conjunto de todos os animais e Cat
denota o conjunto de todos os gatos. Cat
é um subconjunto de Animal
não uma instância de Animal
.
A classe é um modelo ou tipo. Um objeto é uma instância da classe.
Por exemplo:
public class Tweet {
}
Tweet newTweet = new Tweet();
Tweet é uma classe e newTweet é um objeto da classe.