Что такое класс, объект и экземпляр в Java?
Разница между классами, объектами и экземплярами
Ответы (16)
Java (и любой другой язык программирования) моделируется в терминах типов и значений. На теоретическом уровне значение представляет собой представление некоторого количества информации, а тип - это набор значений. Когда мы говорим, что значение X является экземпляром типа Y, мы просто говорим, что X является членом набора значений типа Y.
Вот что на самом деле означает термин «экземпляр»: он описывает отношения, а не вещь.
Система типов языка программирования Java поддерживает два типа типов: примитивные типы и ссылочные типы. Ссылочные типы далее делятся на классы и типы массивов. объект Java - это экземпляр ссылочного типа.
Объект - это экземпляр класса или массив. (JLS 4.3.1 а>)
Это теоретический взгляд на типы.
На практике большинство разработчиков Java рассматривают слова «экземпляр» и «объект» как синонимы. (И это включает меня, тогда я пытаюсь что-то быстро объяснить.) И большинство разработчиков используют слово «значение», а не «экземпляр» для обозначения экземпляра примитивного типа.
myHouse
является экземпляром, технически неверно. Фактически, myHouse
- это переменная, которая ссылается на экземпляр House
.
- person Stephen C; 25.12.2016
Human
, я бы в нем имел его элементы как Height
, weight
и так далее, Теперь, если Я делаю объект с именем suraj
ссылкой на экземпляр класса person. Точно так же у меня может быть класс house
, а myhouse
относится к домашнему экземпляру. Итак, myhouse
и suraj
- объекты, а дом и человек - классы. Но myhouse
относится к экземпляру «дом», а suraj
относится к экземпляру house
.
- person Suraj Jain; 25.12.2016
user2390183
. Вы обрабатываете переменные как имена. Они не. Переменные - это держатели ссылок, которые содержат ссылки на объекты. У объектов нет собственных имен. Ссылки - это самое близкое к имени объекта, за исключением того, что они не имеют постоянного представления. (GC может перемещать объект, который изменяет битовый шаблон, используемый для представления ссылки.)
- person Stephen C; 26.12.2016
instanceof
- это отношение между двумя вещами, но не имеет смысла говорить, что X является экземпляром Y, если экземпляр не является вещью, которой может быть X. Подумайте: дом - это вещь, даже если это дом из кирпичей или домик из карт.
- person kaya3; 02.03.2020
класс - это план, который вы используете для создания объектов. Объект - это экземпляр класса - это конкретная «вещь», которую вы создали с помощью определенного класса. Итак, «объект» и «экземпляр» - это одно и то же, но слово «экземпляр» указывает на отношение объекта к его классу.
Это легко понять, если вы посмотрите на пример. Например, предположим, что у вас есть класс House
. Ваш собственный дом - это объект и экземпляр класса House
. Дом вашей сестры - это еще один объект (еще один экземпляр класса 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();
Класс House
описывает концепцию того, что такое дом, и есть конкретные бетонные дома, которые являются объектами и экземплярами класса House
.
Примечание. В Java это точно так же, как и во всех объектно-ориентированных языках программирования.
Класс - это в основном определение и содержит код объекта. Объект - это экземпляр класса
например, если вы скажете
String word = new String();
класс - это класс String, который описывает слово объекта (экземпляра).
Когда класс объявлен, память не выделяется, поэтому класс - это просто шаблон.
Когда объект класса объявлен, выделяется память.
static
переменных класса. (И для других вещей, которые связаны с идентичностью типа класса.)
- person Stephen C; 25.12.2016
Мне нравится объяснение Джеспера в терминах непрофессионала
Импровизируя примеры из ответа Джеспера,
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 и myCar - объекты
myHouse - это экземпляр House (связывает Object-myHouse с его Class-House) myCar - это экземпляр Car
короче
«myHouse - это экземпляр класса House», что означает то же самое, что «myHouse - это объект типа House. "
Класс - это тип данных. Этот тип используется для создания объекта.
Экземпляр является логическим, но объект является физическим, поэтому он занимает некоторую память.
Мы можем создать экземпляр для абстрактного класса, а также для интерфейса, но мы не можем создать для них объект
.Объект - это экземпляр класса, а экземпляр означает представитель класса, то есть объекта.
Экземпляр относится к ссылке на объект.
Объект фактически указывает на адрес памяти этого экземпляра.
Вы не можете передавать экземпляр по слоям, но можете передавать объект по слоям.
Вы не можете сохранить экземпляр, но можете сохранить объект
У одного объекта может быть более одного экземпляра.
Экземпляр будет иметь как определение класса, так и определение объекта, тогда как, как и в случае с объектом, он будет иметь только определение объекта.
Синтаксис объекта:
Classname var=new Classname();
Но для создания экземпляра он возвращает только указатель, относящийся к объекту, синтаксис:
Classname varname;
В java объекты создаются в куче памяти. Для этого необходимо указать ссылку и использовать ее в нашем приложении. Ссылка имеет место в памяти объекта, с которым мы можем использовать объекты в нашем приложении. Короче говоря, ссылка - это не что иное, как имя переменной, в которой хранится адрес объекта, созданного в ячейке памяти.
instance
- это общий термин для object
. К вашему сведению, Object
- это класс.
Например,
Class A{
}
A ref = new A();
Для приведенного выше фрагмента кода ref - это ссылка на объект класса A, созданный в куче.
Честно говоря, мне удобнее работать с блогом Альфреда определения:
Объект: объекты реального мира имеют две основные характеристики: состояние и поведение. У человека есть состояние (имя, возраст) и поведение (бег, сон). У автомобиля есть состояние (текущая скорость, текущая передача) и поведение (включение тормоза, переключение передачи). Программные объекты концептуально похожи на объекты реального мира: они также состоят из состояния и связанного поведения. Объект хранит свое состояние в полях и раскрывает свое поведение с помощью методов.
Класс: это «шаблон» / «план», который используется для создания объектов. По сути, класс будет состоять из поля, статического поля, метода, статического метода и конструктора. Поле используется для хранения состояния класса (например: имя объекта Student). Метод используется для представления поведения класса (например, как объект Student встанет). Конструктор используется для создания нового экземпляра класса.
Экземпляр: экземпляр - это уникальная копия класса, представляющего объект. Когда создается новый экземпляр класса, JVM выделяет место памяти для этого экземпляра класса.
Рассмотрим следующий пример:
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);
}
}
В случае 1 есть два экземпляра класса Person, но оба экземпляра представляют один и тот же объект.
В случае 2 есть два экземпляра класса Person, но каждый экземпляр представляет отдельный объект.
Итак, класс, объект и экземпляр - разные вещи. Объект и экземпляр не являются синонимами, как предлагается в ответе, выбранном в качестве правильного.
Класс: структура
Объект: физическое воплощение
Экземпляр: каждый объект, созданный из класса.
Ссылка: адрес объекта
Если у вас есть программа, которая моделирует автомобили, у вас есть класс для представления автомобилей, поэтому в коде вы можете сказать:
Car someCar = new Car();
someCar теперь является экземпляром класса Car. Если программа используется в ремонтной мастерской, а someCar представляет вашу машину в своей системе, то объектом является ваша машина.
Итак, Car - это класс, который может представлять любую машину в реальном мире, someCar - это экземпляр класса Car, а someCare - один объект реальной жизни (ваш автомобиль).
однако экземпляр и объект очень часто используются как взаимозаменяемые, когда дело доходит до обсуждения кодирования.
someCar
- это ссылка на экземпляр Car. Сам экземпляр не имеет имени.
- person Joachim Sauer; 28.09.2009
Любой вид данных, хранящихся и обрабатываемых вашим компьютером, в самом простом виде представляет собой ряд битов. То, как эти биты интерпретируются, осуществляется через типы данных. Типы данных могут быть примитивными или сложными. К примитивным типам данных относятся, например, int или double. У них есть определенная длина и особый способ интерпретации. В случае целого числа обычно первый бит используется для знака, остальные - для значения.
Сложные типы данных могут быть комбинациями примитивных и других сложных типов данных и в Java называются «классом».
Вы можете определить сложный тип данных PeopleName, состоящий из двух строк, называемых именем и фамилией. Каждая строка в Java - это еще один сложный тип данных. Взамен строки (вероятно) реализованы с использованием примитивного типа данных char, для которого Java знает, сколько битов они берут для хранения и как их интерпретировать.
Когда вы создаете экземпляр типа данных, вы получаете объект, и ваши компьютеры резервируют для него некоторую память и запоминают его местоположение и имя этого экземпляра. Экземпляр PeopleName в памяти займет место двух строковых переменных плюс немного больше для бухгалтерского учета. Целое число в Java занимает 32 бита.
Сложным типам данных могут быть назначены методы. Методы могут выполнять действия со своими аргументами или с экземпляром типа данных, из которого вы вызываете этот метод. Если у вас есть два экземпляра PeopleName с именами p1 и p2 и вы вызываете метод p1.getFirstName (), он обычно возвращает имя первого человека, но не имя второго человека.
Концепция классов и объектов заключается в том, чтобы инкапсулировать логику в единую программную единицу. Классы - это чертежи, из которых создаются объекты.
Вот пример класса, представляющего автомобиль:
public class Car {
int currentSpeed;
String name;
public void accelerate() {
}
public void park() {
}
public void printCurrentSpeed() {
}
}
Вы можете создать экземпляры объекта "Автомобиль" следующим образом:
Car audi = new Car();
Car toyota = new Car();
Я взял пример из этого руководства
Класс
Он имеет логическое существование, то есть при его создании не выделяется место в памяти.
Это набор предметов.
Класс можно рассматривать как образец для создания объектов.
Он создается с использованием ключевого слова class
Класс определяет методы и члены данных, которыми будут владеть объекты.
Объект
Он имеет физическое существование, т.е. пространство памяти выделяется при его создании.
Это экземпляр класса.
Объект - это уникальная сущность, которая содержит элементы данных и функции-члены вместе на языке ООП.
Он создается с использованием нового ключевого слова
Объект определяет реализации методов и значений, которыми будут обладать члены данных в классе.
Класс - это план, необходимый для создания объекта (= экземпляра).
Разница между объектом и экземпляром в том, что объект - это вещь, а экземпляр - это отношение.
Другими словами, instance описывает отношение объекта к классу, из которого этот объект был создан.
Определение «Объект является экземпляром класса» концептуально неверно, но верно для реализации. На самом деле объектно-ориентированные функции взяты из реальной жизни, чтобы сосредоточить ум программиста от большего к меньшему. В реальной жизни классы предназначены для управления объектом. Например, у людей есть каста, религия, национальность и многое другое. Эти касты, религия, национальность являются классами и не существуют без людей. Но в реализации нет объектов без классов. Объект. Объект - это дискретная сущность, имеющая четко определенный атрибут. Здесь дискретное означает то, что отличает его от других. Четко определенный атрибут имеет смысл в некотором контексте. Класс - Классификация объекта, имеющего какое-то общее поведение, или объектов некоторого общего типа.
Хотя приведенные выше ответы верны, другой способ думать о классах и объектах - это использовать примеры из реального мира: класс с именем Animal может содержать такие объекты, как Cat, Dog или Fish. Объект с названием «Библия» будет относиться к классу «Книга» и т. Д. Классы являются общими, объекты - конкретными. Этот мысленный пример помог мне, когда я изучал Java.
Animal
является классом, а Cat
- экземпляром, какой у меня пушистый кот, киска?
- person Stephen C; 25.12.2016
Animal
обозначает набор всех животных, а Cat
обозначает набор всех кошек. Cat
является подмножеством Animal
, а не экземпляром Animal
.
- person Stephen C; 24.12.2020
Класс - это шаблон или тип. Объект - это экземпляр класса.
Например:
public class Tweet {
}
Tweet newTweet = new Tweet();
Tweet - это класс, а newTweet - это объект класса.