Java中的类、对象和实例是什么?
16 回答
类是您用来创建对象的蓝图。对象是类的实例——它是您使用特定类制作的具体“事物”。所以,“object”和“instance”是同一个东西,但“instance”这个词表示对象与其类的关系。
如果你看一个例子,这很容易理解。例如,假设您有一个 class House
。你自己的房子是一个对象,是 class 的一个实例House
。你姐姐的房子是另一个对象( class 的另一个实例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 中与在所有面向对象的编程语言中完全相同。
Java(和任何其他编程语言)是根据类型和值建模的。在理论层面,一个值是一些信息量的表示,一个类型是一组值。当我们说值 X是类型 Y 的实例时,我们只是说 X 是类型 Y 的值集合的成员。
所以这就是“实例”一词的真正含义:它描述的是一种关系而不是事物。
Java 编程语言的类型系统支持两种类型,原始类型和引用类型。引用类型进一步分为类和数组类型。Java对象是引用类型的一个实例。
对象是类实例或数组。( JLS 4.3.1 )
这就是类型论的观点。
在实践中,大多数 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 是House类型的对象”相同
类是数据类型,您使用此类型创建对象。
Instance is Logical 但 object is Physical 意味着占用一些内存。
我们可以为抽象类和接口创建一个实例,但我们不能
为它们创建一个对象。对象是类的实例,实例表示类即对象的代表。
实例是指对象的引用。
Object 实际上指向该实例的内存地址。
您不能将实例传递到图层上,但可以将对象传递到图层上
您不能存储实例,但可以存储对象
一个对象可以有多个实例。
实例将同时具有类定义和对象定义,而在对象中它将只有对象定义。
对象的语法:
Classname var=new Classname();
但是例如创建它只返回一个指向对象的指针,语法是:
Classname varname;
类:结构
对象:物理表现
实例:从类创建的每个对象
参考:对象地址
在java中,对象是在堆内存中产生的。这些需要在我们的应用程序中指出和使用参考。引用具有对象的内存位置,我们可以在应用程序中使用这些对象。简而言之,引用只不过是存储在内存位置上实例化的对象的地址的变量的名称。
Aninstance
是 的总称object
。仅供参考,Object
是一门课。
例如,
Class A{
}
A ref = new A();
对于上面的代码片段, ref 是在堆上生成的 A 类对象的引用。
老实说,我对Alfred 博客的定义感觉更舒服:
对象:现实世界中的对象有 2 个主要特征,状态和行为。人类有状态(姓名、年龄)和行为(跑步、睡觉)。汽车有状态(当前速度、当前档位)和行为(应用刹车、换档)。软件对象在概念上类似于现实世界的对象:它们也由状态和相关行为组成。对象将其状态存储在字段中并通过方法公开其行为。
类:是用于创建对象的“模板”/“蓝图”。基本上,一个类将由字段、静态字段、方法、静态方法和构造函数组成。字段用于保存类的状态(例如:学生对象的名称)。方法用于表示类的行为(例如:一个学生对象如何站起来)。构造函数用于创建类的新实例。
实例:实例是代表对象的类的唯一副本。当创建一个类的新实例时,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 代表一个现实生活中的对象(你的汽车)
然而,在讨论编码时,实例和对象经常可以互换使用
您的计算机存储和处理的任何类型的数据在其最基本的表示中都是一排位。这些位的解释方式是通过数据类型完成的。数据类型可以是原始的或复杂的。原始数据类型是 - 例如 - int 或 double。它们具有特定的长度和特定的解释方式。在整数的情况下,通常第一位用于符号,其他位用于值。
复杂数据类型可以是原始数据类型和其他复杂数据类型的组合,在 Java 中称为“类”。
您可以定义由名为 first 和 last name 的两个字符串组成的复杂数据类型 PeopleName。Java 中的每个字符串都是另一种复杂的数据类型。作为回报的字符串(可能)使用原始数据类型 char 实现,Java 知道它们需要存储多少位以及如何解释它们。
当您创建数据类型的实例时,您将获得一个对象,您的计算机会为它保留一些内存并记住它的位置和该实例的名称。内存中的 PeopleName 实例将占用两个字符串变量的空间以及更多用于簿记的空间。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();
我已经从本教程中获取了示例
班级
它具有逻辑存在性,即创建时不分配内存空间。
它是一组对象。
一个类可以看作是创建对象的蓝图。
它是使用 class 关键字创建的
一个类定义了对象将拥有的方法和数据成员。
目的
它具有物理存在,即在创建时分配内存空间。
它是一个类的实例。
对象是在 OOP 语言中包含数据成员和成员函数的唯一实体。
它是使用 new 关键字创建的
对象指定类中的数据成员将拥有的方法和值的实现。
类是制作对象(= 实例)所需的蓝图。
对象和实例的区别在于,对象是事物,实例是关系。
换句话说,实例描述了一个对象与创建该对象的类之间的关系。
“对象是类的实例”的定义在概念上是错误的,但根据实现是正确的。实际上,面向对象的特性取自现实生活,让程序员的思想由多到少。在现实生活中,课程旨在管理对象。例如,我们人类有种姓、宗教、国籍等等。这些演员、宗教、民族是阶级,没有人就没有存在。但是在实现中,没有类就不存在对象。对象 - 对象是一个离散实体,具有一些明确定义的属性。这里离散的意思是使它与众不同的东西。定义明确的属性在某些情况下是有意义的。类 - 具有某些共同行为的对象或某些共同类型的对象的分类。
虽然上述答案是正确的,但考虑类和对象的另一种方式是使用真实世界的示例:名为 Animal 的类可能包含像 Cat、Dog 或 Fish 这样的对象。标题为 Bible 的对象将属于 Book 类,等等。类是一般的,对象是特定的。当我学习 Java 时,这个思想示例对我有帮助。
类是模板或类型。对象是类的一个实例。
例如:
public class Tweet {
}
Tweet newTweet = new Tweet();
Tweet 是一个类,newTweet 是该类的一个对象。