实例和对象之间有什么区别?


92

实例和对象之间有什么区别?有区别吗?


10
也许您可以从众所周知的错误消息“对象引用未设置为对象实例 ”中得出。:->
herzmeister 2010年

根据JVM规范:“对象是动态分配的类实例或数组。” docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
yfklon

计算器我刚才给的对象和背景之间的差异的简要说明我希望它能帮助
Pushkarraj Pujari

1
对象是类的实例。这里的所有都是它的。
罗恩侯爵,

Answers:


49

实例是内存中的对象。基本上,您创建对象并在使用它们时实例化它们。

这是关于类vs对象vs实例的不错的文章,他在讲Java,但它适用于所有OO。

http://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/


27
这篇博客文章什么也没解释。
Koray Tugay

所以你的意思是对象==类?还是您说的是类加载并成为对象,并且实例化为实例?你不是很困惑吗?
p_champ

将类视为定义。当您实例化该类时,便有了可以使用的对象。该对象在内存中物理表示。
达斯汀·莱恩

@Dustin Laine的区别仍然不清楚。你能帮我吗?

@DustinLaine该问题询问“实例”和“对象”之间的区别。但是,在此答案中,已解释的是类的“实例化”以获得“对象”的过程。您的帖子和评论不匹配。在帖子中,提到“实例”是内存中的对象。但是,在注释中,提到了在实例化该类之后,将获得“对象”,该对象在内存中表示。这有点模棱两可。
Srishti

56

实例和对象来自面向对象的程序设计

对于某些编程语言(例如Java,C ++和Smalltalk),描述和理解代码很重要。在结构化编程中使用的其他语言中,这个概念不存在。

这是结构编程的观点。没有真正的重大差异,应该花费太多时间。也许有些人可能会花一些花哨的语言来写一些东西,但是到了最后,对于程序员,开发人员,程序员,架构师而言,一个类的实例和一个“对象”指的是同一件事,通常可以互换使用。在我的职业生涯中,我从未见过任何挑剔的人,花了半个小时试图指出差异,因为实际上没有任何差异。可以将时间花在其他开发工作上。

UPDATE至于斯威夫特,这是苹果谁发明斯威夫特喜欢:

传统上将类的实例称为对象。但是,Swift类和结构在功能上比其他语言要紧密得多,本章的大部分内容描述了可应用于类或结构类型的实例的功能。因此,使用了更通用的术语实例。


20

很好的问题。

我将以最简单的方式进行解释:假设您的篮子里有5个苹果。这些苹果中的每一个都是苹果类型的对象,它具有一些特征(即大,圆,生长在树上)。

用编程的术语来说,您可以拥有一个名为Apple的类,该类的变量为size:big,shape:round,landscape:grows在树上。要在您的购物篮中放入5个苹果,您需要实例化 5个苹果。Apple apple1, Apple apple2, Apple apple3 etc...

或者:对象是事物的定义,实例是物理的事物。

这有意义吗?


60
没有。:)“对象是某物的定义”这里所说的对象是类。
T-Gergely

11

实例:实例意味着只创建一个引用(副本)。

对象:意味着使用new运算符将内存位置与对象(是类的运行时实体)关联时。

简单来说,实例是指对象在特定时间的副本,而对象是指类的内存地址。


1
说实例是对对象的引用,确实为我清除了一切。
约翰C,

2
@JohnC不应该,因为它是不正确的。对象是类的实例。这里的所有都是它的。
罗恩侯爵,

8

假设您要建造一些椅子。

该图显示了如何构建椅子并将其组装在一起的图对应于一个软件类。

假设您根据该图中的模式构建了五把椅子。同样,您可以根据一个类中的模式构造五个软件对象。

每把椅子的底部都有一个唯一的编号,用来识别每把椅子。椅子3是椅子样式的一个实例。同样,存储位置3可以包含一个软件模式实例。

因此,一个实例(椅子3)是椅子模式的唯一,特定的体现。


2
对象是类的实例。实例不是对象的实例。答案是没有意义的。
洛恩侯爵

1
哇,九年后终于有人指出了我的解释中的缺陷。谢谢!现在好点了?
Brian Showalter

7

对象

它是一个通用术语,基本上是具有状态(变量)和行为(方法)的软件包

一个对象实例的蓝图(模板)-这是一个独特的对象,例如,您创建一个对象两次,这意味着您已经创建了两个实例

让我举个例子

Class student()
{
   private string firstName;
  public student(string fname)
  {
    firstName=fname;
  }
  Public string GetFirstName()
  {
    return firstName;
  }
}

对象示例

学生s1 =新学生(“马丁”);学生s2 =新学生(“库玛”);

s1,s2具有类Student的对象

实例

s1和s2是对象Student的实例,两个是 唯一的

它可以称为 参考

基本上s1和s2是分配了对象的变量


1
对象是类的实例。
罗恩侯爵,

7

对象和实例基本相同。但是差别很小。如果Car是一个类,则3 Car是3个不同的对象。所有这些对象都是实例。因此,这三辆车是Car该类实例中的对象。

但是“实例”一词也可以表示“结构实例”。但是对象仅用于类。

所有对象都是实例。并非所有实例都必须是对象。实例可以是“结构实例”或“对象”。我希望这能使您清楚地看到差异。


3

对象是一种构造,是具有某些特征和特性的静态对象,例如属性和方法,它可以是任何东西(字符串,用户控件等)

实例是您可以使用并执行操作的对象的唯一副本。

想象一下像计算机这样的产品。

xw6400工作站是一个对象

您的xw6400工作站(或WIFE的xw6400工作站)是xw6400工作站对象的实例


1
您的第一段和第二段描述的是类,而不是对象。
罗恩侯爵,

2

这个答案可能被认为是过时的,但是担心实例和对象之间的差异已经是过时的城市了。

我认为用javascript最好地描述了它:

let obj= {"poo":1} 
// "obj" is an object

经文

Class Trash {
    constructor(){this.poo = 1;}
}

let i = new Trash();
// "i" is an instance

1

实例是对象的特定表示。对象是通用对象,而实例是已在内存中创建的单个对象。通常,实例将为其属性分配值,以使其与其他类型的对象实例区分开。


1

如果看到对象和实例对象的定义-

在运行时为class成员分配的内存称为object或object是Class的实例。

让我们看看实例的定义-

在运行时为任意分配的内存称为实例变量。

现在,通过Malloc,Calloc,Realloc这样的代码,了解C中发生的任何运行时内存分配的含义:

struct p
{

}
p *t1
t1=(p) malloc(sizeof(p))

所以在这里我们也在分配运行时内存分配,但是在这里我们称为实例,因此t1是实例,在这里我们不能说t1作为对象,所以每个对象都是Class的实例,但每个Instance都不是Object。


这里有一个正确的答案,但是该语言需要清理和简化。
罗恩侯爵,

1

对象-类的实例,具有自己的状态并可以访问其类定义的所有行为。

实例-对该特定类的存储区域的引用。


1

我不敢相信,除了一个人之外,没有人使用代码来解释这一点,我也来试试吧!

// Design Class
class HumanClass {
    var name:String
    init(name:String) {
        self.name = name
    }
}

var humanClassObject1 = HumanClass(name: "Rehan") 

现在,左侧即“ humanClassObject1”是对象,而右侧即:HumanClass(name:“ Rehan”)是此对象的实例。

var humanClassObject2 = HumanClass(name: "Ahmad") // again object on left and it's instance on the right.

因此,基本上,实例包含该对象的特定值,而对象包含内存位置(在运行时)。

记住著名的声明“对象引用未设置为对象的实例”,这意味着未初始化的对象没有任何实例。在某些编程语言(如swift)中,编译器甚至不允许您设计一个类,该类无法初始化其所有成员(变量,例如名称,年龄等),但是在某些语言中,您可以这样做:

// Design Class
class HumanClass {
    var name:String // See we don't have any way to initialise name property.
}

当您尝试执行以下操作时,错误只会在运行时显示:

var myClass = HumanClass()
print(myClass.name) // will give, object reference not set to an instance of the object.

该错误表明,正如我试图在上面解释的那样,特定值(用于变量\属性)是“ INSTANCE”!对象即“ myClass”包含内存位置(在运行时)。


1

当声明一个自定义类型(类)的变量时,仅创建一个引用,称为对象。在此阶段,没有内存分配给该对象。它仅用作指针(指向将来对象存储的位置)。此过程称为“声明”。

Employee e; // e is an object

另一方面,当使用new运算符声明自定义类型的变量时,该运算符会将堆中的内存分配给该对象,并将引用返回给已分配的内存。现在将该对象称为instance。此过程称为“实例化”。

Employee e = new Employee(); // e is an instance

另一方面,在某些语言(例如Java)中,对象等效于实例,这从Oracle文档中有关Java的行中可以看出:

注意:短语“实例化一个类”的含义与“创建对象”相同。创建对象时,将创建类的“实例”,因此将“实例化”一个类。


0

每个对象都被认为是其类的一个实例,但是该类的每个实例对于每个属性都有其自己的值。实例与它们的类实例共享属性名称和操作,但是对象包含对其on类的隐式引用


0

班级:班级是一个蓝图。Object:它是类的副本。实例:它是一个变量,用于保存对象的内存地址。

一个非常基本的分析示例

Class House->房子的蓝图。但是你不能活在蓝图中。您需要一个物理房屋(House),该房屋是该类的实例。也就是说,对象的实际地址是实例。实例代表对象。


实例是指对象,而不是变量。
罗恩侯爵,

0

一旦实例化了一个类(使用new),该实例化的对象便成为对象。对象是可以遵循面向对象编程的封装,多态性,抽象原理以及与程序进行交互以消耗类中定义的实例成员的真实对象的东西。对象包含实例成员(非静态成员)。

因此,类的实例是一个对象。当您指代它的起源时,使用“实例”一词,如果您说“一个类的实例”比“一个类的对象”更清晰(尽管后者可以用来)。

也可以阅读有关嵌套类的此Java文档的“内部类”部分-https: //docs.oracle.com/javase/tutorial/java/javaOO/nested.html


0

Java是一种面向对象的编程语言(OOP)。这意味着,除了基本类型以外,Java中的所有内容都是一个对象。

现在,Java对象类似于真实世界的对象。例如,我们可以用Java创建一个汽车对象,该对象将具有当前速度和颜色等属性。和行为,例如:加速和停车。

那是Object

在此处输入图片说明

另一方面,Instance是该对象的唯一初始化副本,看起来像Car car = new Car()

查看它以了解有关Java类和对象的更多信息


对象是类的实例。
罗恩侯爵,

0

快速简单的答案

  • 规范,对象的蓝图
  • 对象类在内存中的物理存在
  • 实例对象的唯一副本(相同的结构,不同的数据)

-1

关于an object和an 之间的区别instance,我认为没有任何共识。

在我看来,人们可以在论文,博客文章,书籍或对话中互换性地改变它。

对我而言,我所看到的是,对象是内存中的通用活动对象,由使用的语言指定。就像中的ObjectJava。无论它是否由容器管理,我们都不关心它的类型或与之相关的任何其他内容。

An instance是,object但与类型相关联,例如this method accepts Foo instancesyou can not put Animal instances in an instance of a List of Vehicles

object例如locksinstances 与之关联,而不与s 关联,而instances具有方法。objects是垃圾收集,而不是instances。

但是正如我所说,这只是我的看法,我认为我们之间没有任何组织可以参考标准定义,每个人的理解/定义都差不多(当然在限制范围内) 。


-1

对象是通用的事物,例如,在数学中采用线性函数

ax + b是一个对象,而3x + 2是该对象的实例

对象<<<实例

一般<<<具体

没什么了


-2

一个对象可以是一类,例如您有一个叫做篮球的类。

但您想拥有多个篮球,因此在您的代码中创建了多个篮球

比如篮球1和篮球2。然后运行您的应用程序。现在,您有2个对象Basketball的实例。


那是否意味着对象是类构造函数的实例?
streetparade

认为对象就像一个蓝图。说我们有篮球的蓝图,那就是班级。当篮球创建并使其存在时,这意味着我们有1个对象篮球实例。如果我们从对象(蓝图)构建另一个篮球。我们现在有2个篮球实例。总是只有一个对象,但是我们可以创建该对象的许多实例。
达克斯瓦尔

@Darxval那么是什么一类
Chyanit Singh

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.