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