类,对象和实例之间的区别

问题描述 投票:74回答:16

Java中的类,对象和实例是什么?

java class object instance
16个回答
75
投票

Java(和任何其他编程语言)根据类型和值建模。在理论层面,值是一些信息量的表示,而类型是一组值。当我们说值X是Y类型的实例时,我们只是说X是Y类型的值集合的成员。

这就是术语“实例”的真正含义:它描述的是一种关系,而不是一种事物。

Java编程语言的类型系统支持两种类型,基本类型和引用类型。引用类型进一步分为类和数组类型。 Java对象是引用类型的实例。

对象是类实例或数组。 (JLS 4.3.1

这是类型理论观点。

实际上,大多数Java开发人员将单词“instance”和“object”视为同义词。 (那包括我,然后我试图快速解释一下。)并且大多数开发人员使用“值”而不是“实例”来引用基本类型的实例。


2
投票

老实说,我觉得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有两个实例,但每个实例代表一个不同的对象。

所以类,对象和实例是不同的东西。对象和实例不是在选择作为正确答案的答案中建议的同义词。


1
投票

Class

  • 它具有逻辑存在性,即在创建时不分配存储空间。
  • 它是一组对象。
  • 类可以被视为创建对象的蓝图。 它是使用class关键字创建的 类定义了Objects将拥有的方法和数据成员。

Object

  • 它具有物理存在性,即在创建时分配存储空间。
  • 它是一个类的实例。
  • 对象是一个唯一的实体,它以OOP语言一起包含数据成员和成员函数。 它是使用new关键字创建的 对象指定方法的实现以及类中数据成员将拥有的值。

1
投票

类别:结构

对象:物理表现形式

实例:从类创建的每个对象

参考:对象的地址


0
投票

类是创建对象(=实例)所需的蓝图。

对象和实例之间的区别在于,对象是一个对象,而实例是一个关系。

换句话说,实例描述了一个对象与该对象的类的关系。


-1
投票

定义“对象是类的实例”,在概念上是错误的,但根据实现是正确的。实际上,面向对象的功能取自现实生活,使程序员的思维从多到少都集中在一起。在现实生活中,课程旨在管理对象。例如,我们人类有种姓,宗教,国籍等等。这些演员,宗教,国籍是阶级,没有人类就没有存在。但是在实现中没有没有类的对象。 Object-Object是一个具有一些定义良好的属性的离散实体。离散意味着使其与其他产品不同的东西。定义良好的属性在某些上下文中有意义。类 - 具有某些共同行为的对象的分类或某些常见类型的对象。


-1
投票

虽然上面的答案是正确的,但另一种思考类和对象的方法是使用真实世界的例子:名为Animal的类可能包含像Cat,Dog或Fish这样的对象。标题为圣经的对象将属于类Book等。类是通用的,对象是特定的。当我学习Java时,这个思想实例帮助了我。


-2
投票

类是模板或类型。对象是类的实例。

例如:

public class Tweet {

}

Tweet newTweet = new Tweet();

Tweet是一个类,newTweet是该类的一个对象。


84
投票

类是用于创建对象的蓝图。对象是类的实例 - 它是使用特定类创建的具体“事物”。因此,'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中与在所有面向对象编程语言中完全相同。


29
投票

类基本上是一个定义,并包含对象的代码。对象是类的实例

例如,如果你说

String word = new String();

该类是String类,它描述了对象(实例)字。

声明类时,没有分配内存,因此类只是一个模板。

声明类的对象时,将分配内存。


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是一个类型的房子的对象”


6
投票

类是数据类型,您可以使用此类型来创建对象。

  • 实例是逻辑但对象是物理意味着占用一些内存。
  • 我们可以为抽象类和接口创建一个实例,但是我们不能创建一个 那些对象。
  • 对象是类的实例,实例意味着代表类,即对象。
  • 实例是指对象的引用。
  • 对象实际上指向该实例的内存地址。
  • 您无法在图层上传递实例,但可以在图层上传递对象
  • 您不能存储实例,但可以存储对象
  • 单个对象可以有多个实例。
  • 实例将具有类定义和对象定义,而在对象中它将只具有对象定义。

对象语法:

 Classname var=new Classname();

但是例如创建它只返回一个引用对象的指针,语法是:

 Classname varname;

3
投票

在java中,对象是在堆内存上生成的。这些要求参考在我们的应用中被指出和使用。引用具有对象的内存位置,我们可以使用它们在应用程序中使用对象。简而言之,只是变量的名称,它存储在存储器位置实例化的对象的地址。

instanceobject的总称。仅供参考,Object是一个班级。

例如,

Class A{

}

A ref = new A();

对于上面的代码片段,ref是堆上生成的A类对象的引用。


2
投票

如果你有一个模拟汽车的程序,你有一个类来代表汽车,所以在Code中你可以说:

Car someCar = new Car();

someCar现在是Car类的一个实例。如果程序在维修店使用,而someCar在他们的系统中代表你的车,那么你的车就是对象。

所以Car是一个可以代表任何现实世界汽车的类someCar是Car类的一个实例而someCare代表一个真实生活对象(你的汽车)

然而,在讨论编码时,实例和对象经常被互换使用


2
投票

您的计算机存储和处理的任何类型的数据都是最基本的一行表示。解释这些位的方式是通过数据类型完成的。数据类型可以是原始的或复杂的。原始数据类型 - 例如 - int或double。它们具有特定的长度和特定的解释方式。在整数的情况下,通常第一位用于符号,其他位用于值。

复杂数据类型可以是原始数据类型和其他复杂数据类型的组合,在Java中称为“类”。

您可以定义复杂数据类型PeopleName,其中包含两个名为first和last name的字符串。 Java中的每个String都是另一种复杂的数据类型。返回的字符串(可能)使用原始数据类型char实现,Java知道它们需要存储多少位以及如何解释它们。

当您创建数据类型的实例时,您将获得一个对象,并且您的计算机会为其保留一些内存并记住其位置和该实例的名称。内存中PeopleName的一个实例将占用两个String变量的空间以及更多用于簿记的空间。 Java中的整数占用32位。

复杂数据类型可以分配给它们的方法。方法可以对其参数或您调用此方法的数据类型的实例执行操作。如果您有两个名为p1和p2的PeopleName实例,并且您调用方法p1.getFirstName(),它通常会返回第一个人的名字,但不会返回第二个人的名字。


2
投票

类和对象背后的概念是将逻辑封装到单个编程单元中。类是创建对象的蓝图。

这是一个代表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为例

© www.soinside.com 2019 - 2024. All rights reserved.