Java (и любой другой язык программирования) моделируется в терминах типов и значений . На теоретическом уровне значение - это представление некоторого количества информации, а тип - это набор значений. Когда мы говорим, что значение X является экземпляром типа Y, мы просто говорим, что X является членом набора значений, который является типом Y.
Вот что на самом деле означает термин «экземпляр»: он описывает отношения, а не вещь.
Система типов языка программирования Java поддерживает два типа типов: примитивные типы и ссылочные типы . Ссылочные типы далее делятся на классы и типы массивов . Java , объект является экземпляром ссылочного типа.
Объект - это экземпляр класса или массив. ( JLS 4.3.1 )
Это теоретический взгляд на типы.
На практике большинство разработчиков Java рассматривают слова «экземпляр» и «объект» как синонимы. (И это включает меня, тогда я пытаюсь что-то быстро объяснить.) И большинство разработчиков используют слово «значение», а не «экземпляр» для обозначения экземпляра примитивного типа.
Я очень ценю ваш ответ, сэр, и я почти получил его, просто еще один вопрос. Мы говорим: «Каждый раз, когда компилятор обращается к конструктору аргумента 0, он создает экземпляр класса». В этом контексте что на самом деле создается экземпляром или объектом? Я предполагаю, что это объект, и мы используем слово «экземпляр» как синоним. Но было бы любезно, если вы лучше это подтвердите.
Пранджут 02
3
@Ryan: В основном да: он создает объект, который является экземпляром рассматриваемого класса. (Но обратите внимание, что в процитированном предложении говорится «экземпляр класса», а не просто «экземпляр» ... поэтому автор на самом деле не использует здесь «экземпляр» в качестве синонима.)
Стивен К.
1
@RuneFS - "моделирование", о котором я говорю, не о представлении. Это теоретически. Да, в некоторых языках есть объекты, которые обозначают типы или даже позволяют перечислить все экземпляры типа. Но эти свойства дополняют общее «моделирование», а не делают его недействительным.
Stephen C
1
@RuneFS - Нет ... Я говорю о "теории типов". Это раздел математики. Он не зависит от технологии, используемой для запуска программ. Ближайшая теория типов к вычислениям - это лямбда-исчисление. (Если вам интересно, попробуйте получить копию "Типов и языков программирования" Бенджамина С. Пирса.)
Стивен Си,
1
Вы делаете ту же ошибку, что и user2390183. Вы обрабатываете переменные как «имена». Они не. Переменные - это «держатели ссылок», которые содержат ссылки на объекты. У объектов нет внутренних имен. Ссылки - это самое близкое к «имени» объекта, за исключением того, что они не имеют постоянного представления. (ГХ может перемещать объект, который изменяет битовый шаблон, используемый для представления ссылки.)
Стивен С.
96
Класс представляет собой план , который можно использовать для создания объектов . Объект - это экземпляр класса - это конкретная «вещь», которую вы создали с помощью определенного класса. Итак, «объект» и «экземпляр» - это одно и то же, но слово «экземпляр» указывает на отношение объекта к его классу.
Это легко понять, если посмотреть на пример. Например, предположим, что у вас есть класс House. Ваш собственный дом - это объект и экземпляр класса House. Дом вашей сестры - это еще один объект (еще один экземпляр класса House).
// Class House describes what a house isclassHouse{
// ...
}
// You can use class House to create objects (instances of class House)
House myHouse = new House();
House sistersHouse = new House();
Класс Houseописывает концепцию того, что такое дом, и есть конкретные конкретные дома, которые являются объектами и экземплярами класса House.
Примечание. В Java это точно так же, как и во всех объектно-ориентированных языках программирования.
class House {// blue print for House Objects}class Car {// blue print for Instances of Class Car }House myHouse = House new();Car myCar = Car new();
Сурадж Джайн,
myHouse и myCar - это объекты, myHouse - это экземпляр House (связывает Object-myHouse с его Class-House) myCar - это экземпляр Car. Это правда, пожалуйста, посмотрите ответ пользователя 2390183, это правильно или нет?
Сурадж Джайн,
29
Класс - это в основном определение и содержит код объекта. Объект - это экземпляр класса
например, если вы скажете
String word = new String();
класс - это класс String, который описывает слово объекта (экземпляра).
Когда класс объявлен, память не выделяется, поэтому класс - это просто шаблон.
Когда объект класса объявляется, выделяется память.
Вы имели в виду, что объекты и экземпляры одинаковы?
Пранджут, 01
Спасибо, Дэвид за ссылку. Из тем, которые я получил, это Все вещи реального мира, у которых есть состояние и поведение, можно назвать "объектом". И для классификации этих объектов мы используем класс (класс - это план, из которого создаются отдельные объекты). В нем говорится, что объекты класса являются экземплярами. Теперь, пожалуйста, скажите мне, в чем разница между объектом и экземпляром? Означает ли это, что объект на самом деле не существует в контексте программирования, а экземпляр представляет объект в нем?
Пранджут, 01
@Mustafa: Прошу прощения, что противоречу вам, но согласно JLS, массив также является объектом в Java. И вы обнаружите, что JLS вообще не определяет термин «экземпляр». Смотрите мой ответ.
Stephen C
@Ryan: См. Мой ответ о различии между «экземпляром» и «объектом». Ответ и комментарий @ Мустафы (ИМО) вводят в заблуждение.
Стивен С.
@mustafabar - «Когда класс объявлен, память не выделяется, поэтому класс - это просто шаблон». - И это тоже неправда. Память выделяется (как минимум) для представления staticпеременных класса. (И для других вещей, которые связаны с идентичностью типа класса.)
Стивен С.
13
Мне нравится объяснение Джеспера в терминах непрофессионала
Импровизируя примеры из ответа Джеспера,
classHouse{
// blue print for House Objects
}
classCar{
// 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 это объект из типа дома»
В java объекты создаются в куче памяти. Для этого необходимо указать ссылку и использовать ее в нашем приложении. Ссылка имеет место в памяти объекта, с которым мы можем использовать объекты в нашем приложении. Короче говоря, ссылка - это не что иное, как имя переменной, в которой хранится адрес объекта, созданного в определенной области памяти.
An instance- это общий термин для object. К вашему сведению, Objectэто класс.
Например,
Class A{
}
A ref = new A();
Для приведенного выше фрагмента кода ref является ссылкой на объект класса A, созданный в куче.
Объект : объекты реального мира имеют две основные характеристики: состояние и поведение. У человека есть состояние (имя, возраст) и поведение (бег, сон). У автомобиля есть состояние (текущая скорость, текущая передача) и поведение (включение тормоза, переключение передачи). Программные объекты концептуально похожи на объекты реального мира: они также состоят из состояния и связанного поведения. Объект сохраняет свое состояние в полях и раскрывает свое поведение с помощью методов.
Класс : это «шаблон» / «план», который используется для создания объектов. По сути, класс будет состоять из поля, статического поля, метода, статического метода и конструктора. Поле используется для хранения состояния класса (например: имя объекта Student). Метод используется для представления поведения класса (например: как объект Студент встанет). Конструктор используется для создания нового экземпляра класса.
Экземпляр : экземпляр - это уникальная копия класса, представляющего объект. Когда создается новый экземпляр класса, JVM выделяет место памяти для этого экземпляра класса.
Рассмотрим следующий пример:
publicclassPerson{
privateint id;
private String name;
privateint age;
publicPerson(int id, String name, int age){
this.id = id;
this.name = name;
this.age = age;
}
publicinthashCode(){
finalint prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
publicbooleanequals(Object obj){
if (this == obj)
returntrue;
if (obj == null)
returnfalse;
if (getClass() != obj.getClass())
returnfalse;
Person other = (Person) obj;
if (id != other.id)
returnfalse;
returntrue;
}
publicstaticvoidmain(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. Сам экземпляр не имеет имени.
Joachim Sauer
2
Любой вид данных, которые хранит и обрабатывает ваш компьютер, в основном представляет собой ряд битов. То, как эти биты интерпретируются, осуществляется через типы данных. Типы данных могут быть примитивными или сложными. К примитивным типам данных относятся, например, int или double. У них есть определенная длина и особый способ интерпретации. В случае целого числа обычно первый бит используется для знака, остальные - для значения.
Сложные типы данных могут представлять собой комбинации примитивных и других сложных типов данных и в Java называются «классом».
Вы можете определить сложный тип данных PeopleName, состоящий из двух строк, называемых именем и фамилией. Каждая строка в Java - это еще один сложный тип данных. Взамен строки (вероятно) реализованы с использованием примитивного типа данных char, для которого Java знает, сколько бит они берут для хранения и как их интерпретировать.
Когда вы создаете экземпляр типа данных, вы получаете объект, и ваши компьютеры резервируют для него некоторую память и запоминают его местоположение и имя этого экземпляра. Экземпляр PeopleName в памяти займет место двух переменных String плюс немного больше для бухгалтерского учета. В Java целое число занимает 32 бита.
Сложные типы данных могут иметь назначенные им методы. Методы могут выполнять действия со своими аргументами или с экземпляром типа данных, из которого вы вызываете этот метод. Если у вас есть два экземпляра PeopleName с именами p1 и p2 и вы вызываете метод p1.getFirstName (), он обычно возвращает имя первого человека, но не имя второго человека.
Концепция классов и объектов заключается в том, чтобы инкапсулировать логику в единую программную единицу. Классы - это чертежи, из которых создаются объекты.
Пространство может быть выделено при «создании» класса. Пространство требуется для любых статических переменных, определенных классом. (И «логический» по сравнению с «физическим» растягивает его, поскольку представление объекта - это только битовые шаблоны, помогающие в некотором устройстве памяти.)
Стивен К.
@StephenC, в чем может быть еще разница?
Смотрите мой ответ. На этот вопрос нельзя правильно ответить, просто говоря о различиях.
Stephen C
0
Класс - это план, необходимый для создания объекта (= экземпляра).
Разница между объектом и экземпляром в том, что объект - это вещь, а экземпляр - это отношение.
Другими словами, instance описывает отношение объекта к классу, из которого этот объект был создан.
Определение «Объект является экземпляром класса» концептуально неверно, но верно для реализации. На самом деле объектно-ориентированные функции взяты из реальной жизни, чтобы сосредоточить ум программиста от большего к меньшему. В реальной жизни классы предназначены для управления объектом. Например, у людей есть каста, религия, национальность и многое другое. Эти касты, религия, национальность являются классами и не существуют без людей. Но в реализации не бывает объектов без классов. Объект. Объект - это дискретная сущность, имеющая четко определенный атрибут. Здесь дискретное означает то, что отличает его от других. Четко определенный атрибут имеет смысл в некотором контексте. Класс - классификация объекта, имеющего какое-то общее поведение, или объектов некоторого общего типа.
Хотя приведенные выше ответы верны, другой способ размышления о классах и объектах - использовать примеры из реального мира: класс с именем Animal может содержать такие объекты, как Cat, Dog или Fish. Объект с названием «Библия» относится к классу «Книга» и т. Д. Классы являются общими, объекты - конкретными. Этот мысленный пример помог мне, когда я изучал Java.
Это просто слова. На самом деле вы не объясняете, что означают эти слова. (И на самом деле классы Java НЕ ведут себя как шаблоны ни в реальной жизни, ни так, как в таких языках, как Javascript, Python, Ruby и т. Д.)
Ответы:
Java (и любой другой язык программирования) моделируется в терминах типов и значений . На теоретическом уровне значение - это представление некоторого количества информации, а тип - это набор значений. Когда мы говорим, что значение X является экземпляром типа Y, мы просто говорим, что X является членом набора значений, который является типом Y.
Вот что на самом деле означает термин «экземпляр»: он описывает отношения, а не вещь.
Система типов языка программирования Java поддерживает два типа типов: примитивные типы и ссылочные типы . Ссылочные типы далее делятся на классы и типы массивов . Java , объект является экземпляром ссылочного типа.
Это теоретический взгляд на типы.
На практике большинство разработчиков Java рассматривают слова «экземпляр» и «объект» как синонимы. (И это включает меня, тогда я пытаюсь что-то быстро объяснить.) И большинство разработчиков используют слово «значение», а не «экземпляр» для обозначения экземпляра примитивного типа.
источник
user2390183
. Вы обрабатываете переменные как «имена». Они не. Переменные - это «держатели ссылок», которые содержат ссылки на объекты. У объектов нет внутренних имен. Ссылки - это самое близкое к «имени» объекта, за исключением того, что они не имеют постоянного представления. (ГХ может перемещать объект, который изменяет битовый шаблон, используемый для представления ссылки.)Класс представляет собой план , который можно использовать для создания объектов . Объект - это экземпляр класса - это конкретная «вещь», которую вы создали с помощью определенного класса. Итак, «объект» и «экземпляр» - это одно и то же, но слово «экземпляр» указывает на отношение объекта к его классу.
Это легко понять, если посмотреть на пример. Например, предположим, что у вас есть класс
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 это точно так же, как и во всех объектно-ориентированных языках программирования.
источник
class House {
// blue print for House Objects
}
class Car {
// blue print for Instances of Class Car
}
House myHouse = House new();
Car myCar = Car new();
Класс - это в основном определение и содержит код объекта. Объект - это экземпляр класса
например, если вы скажете
String word = new String();
класс - это класс String, который описывает слово объекта (экземпляра).
Когда класс объявлен, память не выделяется, поэтому класс - это просто шаблон.
Когда объект класса объявляется, выделяется память.
источник
static
переменных класса. (И для других вещей, которые связаны с идентичностью типа класса.)Мне нравится объяснение Джеспера в терминах непрофессионала
Импровизируя примеры из ответа Джеспера,
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 это объект из типа дома»
источник
Класс - это тип данных. Этот тип используется для создания объекта.
Экземпляр является логическим, но объект является физическим, поэтому он занимает некоторую память.
Мы можем создать экземпляр для абстрактного класса, а также для интерфейса, но мы не можем создать
для них объект.
Объект - это экземпляр класса, а экземпляр означает представитель класса, то есть объекта.
Экземпляр относится к ссылке на объект.
Объект фактически указывает на адрес памяти этого экземпляра.
Вы не можете передавать экземпляр по слоям, но вы можете передавать объект по слоям
Вы не можете сохранить экземпляр, но можете сохранить объект
У одного объекта может быть более одного экземпляра.
Экземпляр будет иметь как определение класса, так и определение объекта, тогда как, как и в объекте, он будет иметь только определение объекта.
Синтаксис объекта:
Classname var=new Classname();
Но для создания экземпляра он возвращает только указатель, относящийся к объекту, синтаксис:
источник
В java объекты создаются в куче памяти. Для этого необходимо указать ссылку и использовать ее в нашем приложении. Ссылка имеет место в памяти объекта, с которым мы можем использовать объекты в нашем приложении. Короче говоря, ссылка - это не что иное, как имя переменной, в которой хранится адрес объекта, созданного в определенной области памяти.
An
instance
- это общий термин дляobject
. К вашему сведению,Object
это класс.Например,
Class A{ } A ref = new A();
Для приведенного выше фрагмента кода ref является ссылкой на объект класса A, созданный в куче.
источник
Честно говоря, мне удобнее определения блога Альфреда :
Объект : объекты реального мира имеют две основные характеристики: состояние и поведение. У человека есть состояние (имя, возраст) и поведение (бег, сон). У автомобиля есть состояние (текущая скорость, текущая передача) и поведение (включение тормоза, переключение передачи). Программные объекты концептуально похожи на объекты реального мира: они также состоят из состояния и связанного поведения. Объект сохраняет свое состояние в полях и раскрывает свое поведение с помощью методов.
Класс : это «шаблон» / «план», который используется для создания объектов. По сути, класс будет состоять из поля, статического поля, метода, статического метода и конструктора. Поле используется для хранения состояния класса (например: имя объекта 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. Сам экземпляр не имеет имени.Любой вид данных, которые хранит и обрабатывает ваш компьютер, в основном представляет собой ряд битов. То, как эти биты интерпретируются, осуществляется через типы данных. Типы данных могут быть примитивными или сложными. К примитивным типам данных относятся, например, int или double. У них есть определенная длина и особый способ интерпретации. В случае целого числа обычно первый бит используется для знака, остальные - для значения.
Сложные типы данных могут представлять собой комбинации примитивных и других сложных типов данных и в Java называются «классом».
Вы можете определить сложный тип данных PeopleName, состоящий из двух строк, называемых именем и фамилией. Каждая строка в Java - это еще один сложный тип данных. Взамен строки (вероятно) реализованы с использованием примитивного типа данных char, для которого Java знает, сколько бит они берут для хранения и как их интерпретировать.
Когда вы создаете экземпляр типа данных, вы получаете объект, и ваши компьютеры резервируют для него некоторую память и запоминают его местоположение и имя этого экземпляра. Экземпляр PeopleName в памяти займет место двух переменных String плюс немного больше для бухгалтерского учета. В Java целое число занимает 32 бита.
Сложные типы данных могут иметь назначенные им методы. Методы могут выполнять действия со своими аргументами или с экземпляром типа данных, из которого вы вызываете этот метод. Если у вас есть два экземпляра PeopleName с именами p1 и p2 и вы вызываете метод p1.getFirstName (), он обычно возвращает имя первого человека, но не имя второго человека.
источник
Концепция классов и объектов заключается в том, чтобы инкапсулировать логику в единую программную единицу. Классы - это чертежи, из которых создаются объекты.
Вот пример класса, представляющего автомобиль:
public class Car { int currentSpeed; String name; public void accelerate() { } public void park() { } public void printCurrentSpeed() { } }
Вы можете создавать экземпляры этого объекта Car , как это:
Car audi = new Car(); Car toyota = new Car();
Я взял пример из этого урока
источник
Класс : Структура
Объект : физическое воплощение
Экземпляр : каждый объект, созданный из класса
Ссылка : Адрес объекта
источник
Класс
Он имеет логическое существование, т. Е. При его создании не выделяется место в памяти.
Это набор предметов.
Класс можно рассматривать как образец для создания объектов.
Он создается с использованием ключевого слова class
Класс определяет методы и члены данных, которыми будут владеть объекты.
Объект
Он имеет физическое существование, т.е. пространство памяти выделяется при его создании.
Это экземпляр класса.
Объект - это уникальная сущность, которая содержит элементы данных и функции-члены вместе на языке ООП.
Он создается с использованием нового ключевого слова
Объект определяет реализации методов и значений, которыми будут обладать члены данных в классе.
источник
Класс - это план, необходимый для создания объекта (= экземпляра).
Разница между объектом и экземпляром в том, что объект - это вещь, а экземпляр - это отношение.
Другими словами, instance описывает отношение объекта к классу, из которого этот объект был создан.
источник
Определение «Объект является экземпляром класса» концептуально неверно, но верно для реализации. На самом деле объектно-ориентированные функции взяты из реальной жизни, чтобы сосредоточить ум программиста от большего к меньшему. В реальной жизни классы предназначены для управления объектом. Например, у людей есть каста, религия, национальность и многое другое. Эти касты, религия, национальность являются классами и не существуют без людей. Но в реализации не бывает объектов без классов. Объект. Объект - это дискретная сущность, имеющая четко определенный атрибут. Здесь дискретное означает то, что отличает его от других. Четко определенный атрибут имеет смысл в некотором контексте. Класс - классификация объекта, имеющего какое-то общее поведение, или объектов некоторого общего типа.
источник
Хотя приведенные выше ответы верны, другой способ размышления о классах и объектах - использовать примеры из реального мира: класс с именем Animal может содержать такие объекты, как Cat, Dog или Fish. Объект с названием «Библия» относится к классу «Книга» и т. Д. Классы являются общими, объекты - конкретными. Этот мысленный пример помог мне, когда я изучал Java.
источник
Animal
это класс иCat
экземпляр, то что это за моя домашняя кошка "Пушистый"?Класс - это шаблон или тип. Объект - это экземпляр класса.
Например:
public class Tweet { } Tweet newTweet = new Tweet();
Tweet - это класс, а newTweet - это объект класса.
источник