Что такое класс, объект и экземпляр в Java?
Ответы:
Java (и любой другой язык программирования) моделируется в терминах типов и значений . На теоретическом уровне значение - это представление некоторого количества информации, а тип - это набор значений. Когда мы говорим, что значение X является экземпляром типа Y, мы просто говорим, что X является членом набора значений, который является типом Y.
Вот что на самом деле означает термин «экземпляр»: он описывает отношения, а не вещь.
Система типов языка программирования Java поддерживает два типа типов: примитивные типы и ссылочные типы . Ссылочные типы далее делятся на классы и типы массивов . Java , объект является экземпляром ссылочного типа.
Объект - это экземпляр класса или массив. ( JLS 4.3.1 )
Это теоретический взгляд на типы.
На практике большинство разработчиков 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();
Но для создания экземпляра он возвращает только указатель, относящийся к объекту, синтаксис:
Classname varname;
В 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 - это объект класса.