Java中的类,对象和实例是什么?
Answers:
Java(和任何其他编程语言)是根据类型和值建模的。从理论上讲,值是某些信息量的表示,类型是一组值。当我们说值X是类型Y的实例时,我们只是说X是类型Y的值集合的成员。
这就是“实例”一词的真正含义:它描述的是一种关系而不是事物。
Java编程语言的类型系统支持两种类型,原始类型和引用类型。引用类型进一步分为类和数组类型。Java对象是引用类型的实例。
对象是类实例或数组。(JLS 4.3.1)
这就是类型理论的观点。
实际上,大多数Java开发人员将单词“ instance”和“ object”视为同义词。(这包括我在内,然后我试图快速地解释一些事情。)大多数开发人员使用“值”一词而不是“实例”来指代原始类型的实例。
user2390183
。您将变量视为“名称”。他们不是。变量是“引用持有人”,其中包含对对象的引用。对象没有内部名称。引用是对象的“名称”最接近的东西,除了它们没有常量表示。(GC可以移动一个对象,该对象会更改用于表示引用的位模式。)
一类是用来创建一个蓝图的对象。对象是实例类-这是您使用特定类制作的具体“东西”。因此,“对象”和“实例”是同一件事,但是“实例”一词表示对象与其类的关系。
如果看一个例子,这很容易理解。例如,假设您有一个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
描述房屋的概念,并且有一些具体的混凝土房屋,它们是class的对象和实例House
。
注意:在Java中,这与所有面向对象的编程语言完全相同。
class House {
// blue print for House Objects
}
class Car {
// blue print for Instances of Class Car
}
House myHouse = House new();
Car myCar = Car new();
类基本上是一个定义,并且包含对象的代码。对象是类的实例
例如,如果你说
String word = new String();
该类是String类,它描述对象(实例)字。
当声明一个类时,没有分配内存,所以类只是一个模板。
声明该类的对象时,将分配内存。
static
该类的变量。(以及与类的类型标识有关的其他事情。)
我喜欢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是一个实例的类屋”,这是等于说“的MyHouse是对象的类型屋”
类是数据类型,您可以使用此类型创建对象。
实例是逻辑的,而对象是物理的,则意味着占用一些内存。
我们可以为抽象类以及接口创建实例,但是不能
为这些对象创建对象。
对象是类的实例,实例是类的代表,即对象。
实例是指对象的引用。
对象实际上指向该实例的内存地址。
您不能在层上传递实例,但可以在层上传递对象
您不能存储实例,但可以存储对象
一个对象可以有多个实例。
实例将具有类定义和对象定义,而在对象中,实例将仅具有对象定义。
对象的语法:
Classname var=new Classname();
但是对于实例创建,它仅返回引用对象的指针,语法为:
Classname varname;
老实说,我对Alfred博客定义更满意:
对象:现实世界中的对象共有2个主要特征,即状态和行为。人类具有状态(名称,年龄)和行为(跑步,睡觉)。轿厢具有状态(当前速度,当前档位)和行为(施加制动器,换档)。软件对象在概念上与现实世界中的对象相似:它们也由状态和相关行为组成。对象将其状态存储在字段中,并通过方法公开其行为。
类:是用于创建对象的“模板” /“蓝图”。基本上,一个类将由字段,静态字段,方法,静态方法和构造函数组成。字段用于保存类的状态(例如:Student对象的名称)。方法用于表示类的行为(例如:Student对象如何站起来)。构造函数用于创建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有两个实例,但是每个实例代表一个不同的对象。
因此,类,对象和实例是不同的东西。对象和实例不是同义词,如在选择为正确答案的答案中所建议的那样。
您的计算机存储和处理的任何类型的数据都以其最基本的表示形式排成一行。这些位的解释方式是通过数据类型完成的。数据类型可以是原始的也可以是复杂的。基本数据类型为-例如,int或double。它们具有特定的长度和特定的解释方式。对于整数,通常第一位用于符号,其他位用于值。
复杂数据类型可以是原始数据类型和其他复杂数据类型的组合,在Java中称为“类”。
您可以定义复杂的数据类型PeopleName,该数据类型由两个名为名字和姓氏的字符串组成。Java中的每个String是另一种复杂的数据类型。返回的字符串(可能)使用原始数据类型char实现,Java知道该类型的原始数据类型存储多少位以及如何解释它们。
创建数据类型的实例时,您将获得一个对象,并且计算机为其保留了一些内存,并记住了它的位置和该实例的名称。内存中的PeopleName实例将占用两个String变量的空间,外加更多簿记空间。Java中的整数占32位。
可以为复杂数据类型分配方法。方法可以对其参数或您从中调用此方法的数据类型的实例执行操作。如果您有两个名为p1和p2的PeopleName实例,并且调用了方法p1.getFirstName(),则它通常返回第一个人的名字,而不是第二个人的名字。
它具有逻辑上的存在,即在创建时没有分配存储空间。
它是一组对象。
类可以被视为创建对象的蓝图。
它是使用class关键字创建的
一个类定义对象将拥有的方法和数据成员。
它具有物理存在,即在创建时分配内存空间。
它是一个类的实例。
对象是一个唯一的实体,其中包含OOP语言中的数据成员和成员函数。
它是使用new关键字创建的
对象指定方法的实现以及类中的数据成员将拥有的值。
定义“对象是类的实例”在概念上是错误的,但根据实现是正确的。实际上,面向对象的功能是从现实生活中获取的,以便使程序员的思想从多一点或少一点集中。在现实生活中,班级是为管理对象而设计的。例如,我们人类有种姓,宗教,国籍等等。这些演员,宗教,国籍是阶级,没有人类就不存在。但是在实现中,不存在没有类的对象。对象对象是具有一些定义明确的属性的离散实体。在这里,离散意味着某种使其与众不同的东西。定义明确的属性在某些情况下很有意义。类-具有某些常见行为的对象或某种常见类型的对象的分类。