Java中的类,对象和实例是什么?
Java(和任何其他编程语言)根据类型和值建模。在理论层面,值是一些信息量的表示,而类型是一组值。当我们说值X是Y类型的实例时,我们只是说X是Y类型的值集合的成员。
这就是术语“实例”的真正含义:它描述的是一种关系,而不是一种事物。
Java编程语言的类型系统支持两种类型,基本类型和引用类型。引用类型进一步分为类和数组类型。 Java对象是引用类型的实例。
对象是类实例或数组。 (JLS 4.3.1)
这是类型理论观点。
实际上,大多数Java开发人员将单词“instance”和“object”视为同义词。 (那包括我,然后我试图快速解释一下。)并且大多数开发人员使用“值”而不是“实例”来引用基本类型的实例。
老实说,我觉得Alfred blog定义更舒服:
对象:真实世界对象共享2个主要特征,状态和行为。人类有状态(姓名,年龄)和行为(跑步,睡觉)。汽车具有状态(当前速度,当前档位)和行为(应用制动,换档)。软件对象在概念上类似于现实世界的对象:它们也包括状态和相关行为。对象将其状态存储在字段中,并通过方法公开其行为。
类:是用于创建对象的“模板”/“蓝图”。基本上,类将由字段,静态字段,方法,静态方法和构造函数组成。 Field用于保存类的状态(例如:Student对象的名称)。方法用于表示类的行为(例如:Student对象如何站立)。构造函数用于创建类的新实例。
实例:实例是表示Object的Class的唯一副本。创建类的新实例时,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有两个实例,但每个实例代表一个不同的对象。
所以类,对象和实例是不同的东西。对象和实例不是在选择作为正确答案的答案中建议的同义词。
类别:结构
对象:物理表现形式
实例:从类创建的每个对象
参考:对象的地址
类是创建对象(=实例)所需的蓝图。
对象和实例之间的区别在于,对象是一个对象,而实例是一个关系。
换句话说,实例描述了一个对象与该对象的类的关系。
定义“对象是类的实例”,在概念上是错误的,但根据实现是正确的。实际上,面向对象的功能取自现实生活,使程序员的思维从多到少都集中在一起。在现实生活中,课程旨在管理对象。例如,我们人类有种姓,宗教,国籍等等。这些演员,宗教,国籍是阶级,没有人类就没有存在。但是在实现中没有没有类的对象。 Object-Object是一个具有一些定义良好的属性的离散实体。离散意味着使其与其他产品不同的东西。定义良好的属性在某些上下文中有意义。类 - 具有某些共同行为的对象的分类或某些常见类型的对象。
虽然上面的答案是正确的,但另一种思考类和对象的方法是使用真实世界的例子:名为Animal的类可能包含像Cat,Dog或Fish这样的对象。标题为圣经的对象将属于类Book等。类是通用的,对象是特定的。当我学习Java时,这个思想实例帮助了我。
类是模板或类型。对象是类的实例。
例如:
public class Tweet {
}
Tweet newTweet = new Tweet();
Tweet是一个类,newTweet是该类的一个对象。
类是用于创建对象的蓝图。对象是类的实例 - 它是使用特定类创建的具体“事物”。因此,'object'和'instance'是相同的,但'instance'一词表示一个对象与它的类的关系。
如果你看一个例子,这很容易理解。例如,假设您有一个类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 = new House();
Car myCar = new Car();
myHouse和myCar是对象
myHouse是House的一个实例(将Object-myHouse与其Class-House相关联)myCar是Car的一个实例
简而言之
“myHouse是Class House的一个实例”,就像说“myHouse是一个类型的房子的对象”
类是数据类型,您可以使用此类型来创建对象。
对象语法:
Classname var=new Classname();
但是例如创建它只返回一个引用对象的指针,语法是:
Classname varname;
在java中,对象是在堆内存上生成的。这些要求参考在我们的应用中被指出和使用。引用具有对象的内存位置,我们可以使用它们在应用程序中使用对象。简而言之,只是变量的名称,它存储在存储器位置实例化的对象的地址。
instance
是object
的总称。仅供参考,Object
是一个班级。
例如,
Class A{
}
A ref = new A();
对于上面的代码片段,ref是堆上生成的A类对象的引用。
如果你有一个模拟汽车的程序,你有一个类来代表汽车,所以在Code中你可以说:
Car someCar = new Car();
someCar现在是Car类的一个实例。如果程序在维修店使用,而someCar在他们的系统中代表你的车,那么你的车就是对象。
所以Car是一个可以代表任何现实世界汽车的类someCar是Car类的一个实例而someCare代表一个真实生活对象(你的汽车)
然而,在讨论编码时,实例和对象经常被互换使用
您的计算机存储和处理的任何类型的数据都是最基本的一行表示。解释这些位的方式是通过数据类型完成的。数据类型可以是原始的或复杂的。原始数据类型 - 例如 - int或double。它们具有特定的长度和特定的解释方式。在整数的情况下,通常第一位用于符号,其他位用于值。
复杂数据类型可以是原始数据类型和其他复杂数据类型的组合,在Java中称为“类”。
您可以定义复杂数据类型PeopleName,其中包含两个名为first和last name的字符串。 Java中的每个String都是另一种复杂的数据类型。返回的字符串(可能)使用原始数据类型char实现,Java知道它们需要存储多少位以及如何解释它们。
当您创建数据类型的实例时,您将获得一个对象,并且您的计算机会为其保留一些内存并记住其位置和该实例的名称。内存中PeopleName的一个实例将占用两个String变量的空间以及更多用于簿记的空间。 Java中的整数占用32位。
复杂数据类型可以分配给它们的方法。方法可以对其参数或您调用此方法的数据类型的实例执行操作。如果您有两个名为p1和p2的PeopleName实例,并且您调用方法p1.getFirstName(),它通常会返回第一个人的名字,但不会返回第二个人的名字。
类和对象背后的概念是将逻辑封装到单个编程单元中。类是创建对象的蓝图。
这是一个代表Car的类的示例:
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();
我以this tutorial为例