类,对象和实例之间的区别
什么是Java中的类,对象和实例?
Java(以及其他编程语言)是根据types和值进行build模的。 在理论层面上, 价值是一些信息量的表征,一种types是一组价值。 当我们说价值X 是一个typesY 的实例 ,我们只是说,X是Ytypes的值的集合的成员。
所以这就是实例这个词的意思:它描述的不是一个关系。
Java编程语言的types系统支持基本types和引用types两种types。 引用types进一步分为类和数组types。 Java对象(根据JLS)是引用types的一个实例; 即一个数组或一个Class的实例。
这是types理论观点。
在实践中,大多数Java开发人员将“实例”和“对象”这两个词视为同义词。 (这包括我然后我试图快速解释一些东西)。而且大多数开发人员使用“值”而不是“实例”来引用基元types的一个实例。
一个类是你用来创build对象的蓝图。 一个对象是一个类的实例 – 这是你使用一个特定的类所做的一个具体的“事情”。 所以,'object'和'instance'是一样的,但是'instance'这个词表示一个对象和它的类的关系。
如果你看一个例子,这很容易理解。 例如,假设你有一个class级的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类,它描述了对象(实例)的单词。
当一个类被声明时,没有分配内存,所以类只是一个模板。
当声明类的对象时,分配内存。
我喜欢Jesper的外行解释
通过从Jesper的回答中即兴演示,
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的一个实例
简而言之
“myHouse是Class House的一个实例 ”,就像“myHouse是一个House types的对象 ”一样,
类是数据types,您可以使用此types来创build对象。
-
实例是逻辑的,但对象是物理意味着占用一些内存。
-
我们可以为抽象类和接口创build一个实例,但是我们不能创build一个
对象为那些。 -
对象是类的实例,实例是指类的对象。
-
实例引用一个对象的引用。
-
对象实际上是指向该实例的内存地址。
-
你不能在图层上传递实例,但是你可以通过图层传递对象
-
您不能存储实例,但可以存储对象
-
一个对象可以有多个实例。
-
实例将具有类定义和对象定义,因为在对象中它将只具有对象定义。
对象的语法:
Classname var=new Classname();
但是,例如创build它只返回一个指向对象的指针,语法是:
Classname varname;
在java中,这些对象是在堆内存上产生的。 这些要求参考被指出,并在我们的应用程序中使用。 该引用具有我们可以在我们的应用程序中使用对象的对象的内存位置。 简而言之,参考就是存储实例化在存储器位置上的对象的地址的variables的名称。
instance
是object
的总称。 仅供参考, Object
是一个类。
例如,
Class A{ } A ref = new A();
对于上面的代码片段,ref是在堆上生成的类A的对象的引用。
如果你有一个模拟汽车的程序,你有一个类代表汽车,所以在Code中你可以说:
Car someCar = new Car();
someCar现在是Car类的一个实例。 如果程序在维修店使用,而SomeCar代表你的车在他们的系统中,那么你的车是对象。
所以汽车是一个可以代表真实世界汽车的类SomeCar是Car类的一个实例,SomeCare代表一个真实的生活对象(你的汽车)
然而,在讨论编码时,实例和对象经常被互换使用
计算机存储和处理的任何types的数据都是以最基本的forms表示一行。 这些位被解释的方式是通过数据types来完成的。 数据types可以是原始的或复杂的。 原始数据types是 – 例如 – int或double。 它们具有特定的长度和被解释的特定方式。 在整数的情况下,通常第一位用于符号,其他用于该值。
复杂的数据types可以是原始数据types和其他复杂数据types的组合,在Java中称为“类”。
您可以定义复杂的数据typesPeopleName,由两个名为first和last的string组成。 Java中的每个string是另一种复杂的数据types。 作为回报的string(可能)是使用原始数据typeschar来实现的,Java知道它需要存储多less位以及如何解释它们。
当你创build一个数据types的实例时,你得到一个对象,你的计算机为它保留一些内存,并记住它的位置和那个实例的名字。 内存中的PeopleName实例将占用两个stringvariables的空间,再加上一些簿记的空间。 一个整数在Java中占用32位。
复杂的数据types可以有分配给它们的方法。 方法可以对它们的参数或者你调用这个方法的数据types的实例执行操作。 如果有两个名为p1和p2的PeopleName实例,并且您调用方法p1.getFirstName(),则通常会返回第一个人的名字,而不是第二个人的名字。
类和对象背后的概念是将逻辑封装到单个编程单元中。 类是创build对象的蓝图。
这里有一个代表Car的例子:
public class Car { int currentSpeed; String name; public void accelerate() { } public void park() { } public void printCurrentSpeed() { } }
你可以像这样创build对象 Car的实例 :
Car audi = new Car(); Car toyota = new Car();
我已经从本教程的例子
虽然上面的答案是正确的,但对类和对象的另一种思考方式是使用现实世界的例子:名为Animal的类可能包含像Cat,Dog或Fish这样的对象。 具有圣经标题的对象将是Book类,等等。类是一般的,对象是特定的。 当我学习Java时,这个思想例子帮助了我。
类
-
它有逻辑的存在,即创build时没有分配内存空间。
-
这是一组对象。
-
一个阶级可以被看作是创造客体的蓝图。
-
它是使用class关键字创build的
-
一个类定义了Object将拥有的方法和数据成员。
-
目的
-
它具有物理存在,即在创build时分配内存空间。
-
这是一个类的实例。
-
一个对象是一个独特的实体,它包含了OOP语言中的数据成员和成员函数。
-
它是使用新的关键字创build的
-
一个对象指定了该类中的数据成员将拥有的方法和值的实现。
-
“对象是一个类的实例”的定义在概念上是错误的,但是按照实现是正确的。 实际上面向对象的function是从现实生活中获取的,将程序员的思想从多到less集中在一起。 在现实生活中,课程devise是为了pipe理对象。例如,我们人类有种姓,宗教,国籍等等。 这些演员,宗教,国籍是阶级,没有人类就没有存在。 但是在实现中没有没有类的对象。 对象 – 对象是具有一些定义良好的属性的离散实体。 这里离散意味着一些东西,使其独一无二。 明确的属性在某些情况下是有意义的。 类 – 具有一些共同行为的对象的分类或某些常见types的对象。
类是一个模板或types。 一个对象是类的一个实例。
例如:
public class Tweet { } Tweet newTweet = new Tweet();
Tweet是一个类,newTweet是类的一个对象。