Java 类和对象

2025年4月28日 | 阅读 16 分钟

在面向对象编程中,类和对象在编程中起着至关重要的作用。它们是 OOP(面向对象编程)的两个主要支柱。没有类和对象,我们就无法在 Java 中创建程序。因此,在本节中,我们将讨论 Java 中的类和对象。

Java 中的类是什么?

类是具有共同属性的一组对象的集合。它是用于创建对象的模板或蓝图。它是一个逻辑实体。它不是物理实体。

Java 类包含

Class in Java

1. 字段

在类内部声明的、表示由该类创建的对象的状态的变量称为字段,有时也称为实例变量。它们指定将在每个类对象中存储的数据。不同的访问修饰符,如 public、private 和 protected,可以应用于字段,以控制它们的可见性和可用性。

2. 方法

方法是在类内部定义的函数,包含该类对象能够执行的操作或行为。这些方法允许外部世界操作和更改对象的状态(字段)。此外,方法可以是 void(即,它们不返回任何内容)或具有不同的访问修饰符。它们也可以返回值。

3. 构造函数

构造函数是用于初始化类对象的特殊方法。当使用 new 关键字创建类对象时,会调用它们,其名称与类名相同。构造函数可以初始化对象字段或执行在创建对象时所需的任何其他设置。

4. 块

在类中,Java 允许两种不同类型的块:实例块,通常称为初始化块,以及静态块。静态块通常用于静态初始化,仅在类加载到内存时执行一次。实例块可用于初始化实例变量,并在每次创建类对象时执行。

5. 嵌套类和接口

Java 允许将类和接口嵌套在其他类和接口内部。嵌套类(可以是静态或非静态)可以访问封闭类的成员(字段、方法)。嵌套接口可用于将相关的常量和方法逻辑分组在一起,因为它们是隐式静态的。

Java 类语法

Java 中的对象是什么?

对象是具有状态和行为的真实世界实体。换句话说,对象是一个可以触摸和感受到的有形事物,例如汽车或椅子等。银行系统是一个无形对象的例子。每个对象都有一个唯一的标识,通常通过 JVM 内部用于标识的唯一 ID 来实现。

object in Java

对象的特征

  • 状态:它代表对象的数据(值)。
  • 行为:它代表对象的功能(功能),例如存款、取款等。
  • 标识:对象的标识通常通过唯一 ID 来实现。ID 的值对外部用户不可见;但是,JVM 在内部使用它来唯一标识每个对象。

例如,一支笔是一个对象。它的名字是 Reynolds;它的颜色是白色,这被称为它的状态。它用于书写,所以书写是它的行为。

对象是类的实例。类是创建对象的模板或蓝图。因此,对象是类的实例(结果)。

对象定义

  • 对象是真实世界的实体
  • 对象是运行时实体
  • 对象是具有状态和行为的实体。
  • 对象是类的实例

对象语法

Java 中的 new 关键字

new 关键字用于在运行时分配内存。所有对象都在堆内存区域中获得内存。

在 Java 中,使用 new 关键字创建类(也称为对象)的实例。new 关键字动态地为该类的对象分配内存,并在后面跟类名和括号(带可选参数)时返回对它的引用。

要阅读更多内容 Java new 关键字

类示例:类中的 main() 方法

在 Java 中,可以在类中声明 main() 方法,这通常在演示或基本程序中完成。将 main() 方法定义在类内部,允许程序在不创建单独包含它的类的情况下立即运行。

在此示例中,我们创建了一个 Main 类,它有两个数据成员 id 和 name。我们正在使用 new 关键字创建 Main 类的对象,并打印对象的值。

示例

编译并运行

输出

0 
null

说明

在此 Java 程序中,为 Main 类定义了两个字段:一个用于 id 的 int 类型和一个用于 name 的 string 类型。Main 类本身定义了主方法。new 关键字用于在 main() 方法中创建 Main 类的一个对象 s1。由于未显式初始化,因此将打印字段的默认值,int 为 0,String 为 null。程序最后打印 s1 对象 name 和 id 字段的值。

类示例:类外的 main() 方法

在实际开发中,通常将 Java 类组织到不同的文件中,并将 main() 方法放在要执行它的类之外。这种策略提高了代码的可读性、可维护性和可重用性。

在实际开发中,我们创建类并从另一个类中使用它们。这比之前的方法更好。让我们看一个简单的例子,其中另一个类中有一个 main() 方法。

我们可以有多个类在不同的 Java 文件中,或者在单个 Java 文件中。如果在一个 Java 源文件中定义了多个类,那么最好将文件名保存为具有 main() 方法的类名。

示例

编译并运行

输出

0 
null

说明

在上面的 Java 程序中,main() 方法显示在 Student 类之外的另一个类中。Student 类中没有为 name 和 id 这两个字段定义方法。main() 方法随后位于另一个名为 Main 的类中,在该类中使用默认构造函数创建 Student 类型的一个对象 s1。由于未显式初始化字段,因此将 name 和 id 字段写入其默认值,字符串为 null,整数为 0。

在 Java 中初始化对象

Java 中初始化对象的以下三种方法

  1. 通过引用变量
  2. 通过方法
  3. 通过构造函数

1) 通过引用变量初始化对象

初始化对象意味着将数据存储在对象中。让我们看一个简单的例子,其中我们将通过引用变量初始化对象。

示例

编译并运行

输出

101 Sonoo

说明

在上面的 Java 程序中,有两个类:Student 和 Main。在 student 类中,我们定义了 id 和 name 两个字段。main() 方法是程序的入口点,它在 Main 类中指定。new 关键字用于在 main() 方法中创建 Student 类型的一个对象 s1。接下来,将值 101 和 "Sonoo" 初始化到 s1 的 id 和 name 字段中。

我们还可以创建多个对象并通过引用变量存储信息。

示例

编译并运行

输出

101 Sonoo
102 Amit

说明

上面的 Java 程序展示了如何在 Main 类中创建和初始化多个 Student 类对象。我们使用 new 关键字创建了 Student 类的对象 s1 和 s2。随后,独立初始化每个对象的 name 和 id 字段。ID 设置为 101,name 设置为 "Sonoo" 用于 S1,而 S2 分别设置为 102 和 "Amit"。

2) 通过方法初始化对象

在此示例中,我们创建了 Student 类的两个对象,并通过调用 insertRecord 方法将值初始化到这些对象中。

在这里,我们通过调用 displayInformation() 方法显示对象的状态(数据)。

示例

编译并运行

输出

111 Karan
222 Aryan

说明

提供的 Java 代码包含两个类:Student 和 Main。Student 类包括 rollno 和 name 作为字段,以及用于初始化和打印相应字段数据的 insertRecord() 和 displayInformation() 方法。在 Main 类的 main() 方法中创建了两个 Student 对象,并调用了它们相应的 insertRecord() 方法来设置它们的 rollno 和 name。

Object in Java with values

正如我们在上图中看到的,对象在堆内存区域中获得内存。引用变量引用在堆内存区域中分配的对象。这里,s1 和 s2 是引用变量,它们引用内存中分配的对象。

3) 通过构造函数初始化对象

通过构造函数初始化对象的概念对于 Java 中的面向对象编程至关重要。类中的特殊方法称为构造函数,当使用 new 关键字创建类对象时调用它们。它们通过在字段中输入初始值或执行任何必需的设置过程来初始化对象的状态。构造函数在对象实例化时自动调用,确保在使用对象之前对其进行正确初始化。

如果您是初学者,请跳过此部分,因为我们稍后将学习构造函数。

这是一个演示通过构造函数初始化对象的示例。

示例

编译并运行

输出

Student ID: 1
Student Name: John Doe
Student ID: 2
Student Name: Jane Smith

说明

在此示例中,Student 对象的 id 和 name 字段使用 Student 类定义的构造函数进行初始化,该构造函数接受两个参数:id 和 name。使用此构造函数创建 student1 和 student2 对象后,将使用提供的这些值初始化每个对象的字段。此方法确保对象以正确的初始值创建,从而更轻松地在程序稍后实例化和使用对象。

对象和类示例:Employee

让我们看一个维护员工记录的示例。

示例

编译并运行

输出

101 ajeet 45000.0
102 irfan 25000.0
103 nakul 55000.0

说明

在上面的程序中,Employee 类有三个字段:id、name 和 salary。它还有两个方法:insert(),用于设置这些字段的值,display(),用于打印值。Main 类的 main() 函数创建了三个 Employee 对象(e1、e2 和 e3)。它使用精确的值初始化每个对象的 id、name 和 salary 字段,并对每个对象调用 insert() 方法。然后,调用每个对象的 display() 方法,通过方法调用显示对象初始化和信息显示。每个对象的 id、name 和 salary 值都将打印到控制台。

对象和类示例:Rectangle

提供了另一个示例,用于维护 Rectangle 类的记录。

示例

编译并运行

输出

55 
45     

说明

此 Java 代码定义了一个 Rectangle 类,其中包含 length 和 width 字段,以及用于插入尺寸和计算面积的方法。在 Main 类的 main() 方法中,实例化了两个 Rectangle 对象,并使用 insert 方法设置了它们的尺寸。

在 Java 中创建对象的不同方法有哪些?

Java 中创建对象的以下方法

1. 使用 new 关键字

在 Java 中创建对象的常用方法是使用 new 关键字后跟一个构造函数。例如,

它为对象分配内存并调用其构造函数对其进行初始化。

2. 使用 newInstance() 方法

此方法属于 java.lang.Class 类,用于在运行时动态创建类的新实例。它调用类的无参数构造函数。例如,

3. 使用 clone() 方法

clone() 方法通过执行浅拷贝来创建现有对象的副本。它返回一个新对象,该对象是原始对象的副本。例如,

4. 通过反序列化

可以通过将对象从字节流反序列化来创建对象。我们可以使用 Java 中的 ObjectInputStream 类来实现这一点。将序列化的对象从文件或网络读取,然后调用 readObject() 方法来重新创建对象。

5. 通过工厂方法

工厂方法是类中的静态方法,它们返回类的实例。它们提供了一种在不直接调用构造函数的情况下创建对象的方法,并且可以用于封装对象创建逻辑。例如,

我们将在稍后学习这些创建对象的方法。

Different Ways to create an Object in Java

匿名对象

匿名仅仅意味着无名。没有引用的对象称为匿名对象。它只能在创建对象时使用。例如

如果对象只需要使用一次,那么匿名对象是一个不错的选择。例如

通过匿名对象调用方法

通过匿名对象调用方法

让我们看一个 Java 中匿名对象的完整示例。

示例

编译并运行

输出

Factorial is 120

说明

上面的 Java 程序计算给定数字 n 的阶乘。Main 类有一个 fact() 方法来计算阶乘。之后,控制台打印结果。在 main() 方法中创建匿名 Main 类对象并立即调用其 fact 函数(参数为 5),演示了如何在 Java 中使用匿名对象进行一次性方法调用。

仅通过一种类型创建多个对象

我们可以仅通过一种类型创建多个对象,就像我们处理原始类型一样。

初始化原始变量

初始化引用变量

让我们看一个示例。

示例

编译并运行

输出

55 
45     

说明

此 Java 程序演示了使用具有 length 和 width 作为其数据成员的 Main 类。类中有用于计算矩形面积和插入尺寸的方法。Main 类的 main() 方法使用逗号分隔的列表在一行中创建了两个 Rectangle 对象(r1 和 r2),这表明了同时实例化同一类型的多个对象的可能性。然后通过调用 insert 方法指定每个对象的尺寸,然后通过调用 calculateArea() 方法计算并打印每个矩形的面积。

真实世界示例:Account

文件:TestAccount.java

示例

编译并运行

输出

832345 Ankit 1000.0
Balance is: 1000.0
40000.0 deposited
Balance is: 41000.0
15000.0 withdrawn
Balance is: 26000.0

说明

此 Java 程序中的 Account 类具有存款、取款、查询余额和显示账户详细信息的方法,模仿了简单的银行系统。其他特征包括账号、姓名和金额。在 Main 类的 main() 方法中,创建、初始化并显示了一个 Account 对象 a1,并包含账户信息。接下来,该账户用于存款和取款,并在每次交易后检查余额。

Java 中类与对象区别

特性ClassObject
定义类是创建对象的蓝图或模板。它是类的实例。
类型它是一个逻辑实体。它是一个真实世界的实体。
内存分配类定义不占用内存。创建对象时占用内存。
关键字它是通过使用 class 关键字创建的。它是通过使用 new 关键字和类构造函数创建的。
包含它包含对象将拥有的属性和行为。它用于访问类中定义的属性和行为。
存在形式仅存在于源代码中。存在于运行时(内存中)。
用途定义对象的结构和行为。代表具有实际值的实体。
语法class ClassName{ }ClassName objectName = new ClassName();
寿命它一直存在直到程序运行。只要对象在程序中被引用,它就存在。
继承类可以通过继承进行扩展。它不能被继承,因为对象是特定的实例。

Java 中的类和对象选择题

1. Java 中类和对象之间的主要区别是什么?

  1. 类是对象的实例。
  2. 对象是类的蓝图。
  3. 类是对象的蓝图,对象是类的实例。
  4. 在 Java 中,对象和类是相同的。
 

答案:C)

解释:Java 中的类充当创建对象的模板或蓝图。对象是类的实例,具有类定义的属性和行为。


2. 关于 Java 中的实例变量,以下哪项是正确的?

  1. 它们在方法内定义,并且仅限于这些方法。
  2. 它们在类的所有实例之间共享。
  3. 它们在对象实例化时创建,并在对象销毁时销毁。
  4. 它们是静态变量,属于类本身。
 

答案:C)

解释:实例变量在类内但任何方法外定义。它们在对象实例化时创建,并且特定于该对象。它们在对象销毁时销毁。


3. 在 Java 中创建对象时,'new' 关键字是如何工作的?

  1. 它复制现有对象。
  2. 它创建一个新类。
  3. 它为新对象分配内存并对其进行初始化。
  4. 它在类中定义了一个新方法。
 

答案:C)

解释:'new' 关键字在 Java 中用于创建新对象。它在堆中为对象分配内存,并通过调用类的构造函数对其进行初始化。


4. 什么是 Java 中的匿名对象,以及它通常在何时使用?

  1. 没有方法的对象。
  2. 没有引用变量的对象。
  3. 未使用 'new' 关键字创建的对象。
  4. 在多个类之间共享的对象。
 

答案:B)

解释:匿名对象是没有分配给任何引用变量的对象。它通常在对象只需要使用一次且以后不需要重用时使用。


5. 关于 Java 中方法调用的哪个说法是正确的?

  1. 方法只能在类名上调用。
  2. 方法不能在匿名对象上调用。
  3. 方法暴露了对象行为。
  4. 方法必须始终返回值。
 

答案:C)

解释:Java 中的方法定义了对象行为,并且可以在类的实例(对象)上调用以执行操作。方法不一定必须返回值;它们可以是 void。


下一个主题Java 中的方法