java构造函数方法

Java构造函数创建已定义对象的新实例。本文讨论如何使用Java构造函数方法创建Person对象。...

Java构造函数创建已定义对象的新实例。本文讨论如何使用Java构造函数方法创建Person对象。

Young man using his laptop to try to solve problem with code

注意:对于本例,您需要在同一文件夹中创建两个文件:Person.java定义Person类,PersonExample.java包含创建Person对象的主方法。

构造函数方法

让我们首先创建一个Person类,它有四个私有字段:firstName、lastName、address和username。这些字段是私有变量,它们的值一起构成对象的状态。我们还添加了最简单的构造函数方法:

public class Person { private String firstName; private String lastName; private String address; private String username; //The constructor method public Person() { } }

构造函数方法与任何其他公共方法类似,只是它与类共享相同的名称,并且不能返回值。它可以没有、一个或多个参数。

目前,我们的构造函数方法根本不做任何事情,这是一个考虑对对象对象的初始状态意味着什么的好时机。如果我们保持原样,或者在Person类中没有包含构造函数方法(在Java中,您可以定义一个没有构造函数的类),那么字段将没有值——我们当然希望我们的Person具有名称和地址以及其他特征。如果您认为对象可能未按预期使用,并且在创建对象时字段可能未初始化,请始终使用默认值定义它们:

public class Person { private String firstName = ""; private String lastName = ""; private String address = ""; private String username = ""; //The constructor method public Person() { } }

通常,为了确保构造函数方法是有用的,我们将其设计为期望参数。通过这些参数传递的值可用于设置专用字段的值:

public class Person { private String firstName; private String lastName; private String address; private String username; // The constructor method public Person(String personFirstname, String personLastName, String personAddress, String personUsername) { firstName = personFirstName; lastName = personLastName; address = personAddress; username = personUsername; } // A method to display the state of the object to the screen public void displayPersonDetails() { System.out.println("Name: " + firstName + " " + lastName); System.out.println("Address: " + address); System.out.println("Username: " + username); } }

我们的构造函数方法现在期望将四个字符串的值传递给它。然后使用它们设置对象的初始状态。我们还添加了一个名为displayPersonDetails()的新方法,使我们能够在对象创建后查看其状态。

调用构造函数方法

与对象的其他方法不同,必须使用“new”关键字调用构造函数方法:

public class PersonExample { public static void main(String[] args) { Person dave = new Person("Dave", "Davidson", "12 Main St.", "DDavidson"); dave.displayPersonDetails(); } }

以下是我们所做的:

  1. 为了创建Person对象的新实例,我们首先定义一个Person类型的变量来保存该对象。在这个例子中,我们称之为dave。
  2. 在等号的另一端,我们调用Person类的构造函数方法,并将四个字符串值传递给它。我们的构造函数方法将采用这四个值,并将Person对象的初始状态设置为:firstName=“Dave”,lastName=“Davidson”,address=“12 Main St”,username=“DDavidson”。

注意我们是如何切换到Java主类来调用Person对象的。使用对象时,程序将跨越多个.java文件。确保将它们保存在同一文件夹中。要编译和运行程序,只需编译和运行Java主类文件(即PersonExample.Java)。Java编译器足够聪明,可以意识到您也需要编译Person.Java文件,因为它可以看到您已经在PersonExample类中使用了它。

参数命名

如果构造函数方法的参数与私有字段的名称相同,Java编译器就会感到困惑。在本例中,您可以看到,我们通过在参数前面加上单词“person”来区分它们。值得一提的是,还有另一种方法。我们可以使用“this”关键字:

// The constructor method public Person(String firstName, String lastName, String address, String username) { this.firstName = firstName; this.lastName = lastName; this.address = address; this.username = username; }

“this”关键字告诉Java编译器要赋值的变量是由类定义的变量,而不是参数。这是一个编程风格的问题,但是这个方法帮助我们定义构造函数参数,而不必使用多个名称。

多个构造函数方法

在设计对象类时,您不仅限于使用一个构造函数方法。您可能会决定有几种方法可以初始化对象。使用多个构造函数方法的唯一限制是参数必须不同。

假设在创建Person对象时,我们可能不知道用户名。让我们添加一个新的构造函数方法,该方法仅使用firstName、lastName和address设置Person对象的状态:

public class Person { private String firstName; private String lastName; private String address; private String username; // The constructor method public Person(String firstName, String lastName, String address, String username) { this.firstName = firstName; this.lastName = lastName; this.address = address; this.username = username; } // The new constructor method public Person(String firstName, String lastName, String address) { this.firstName = firstName; this.lastName = lastName; this.address = address; this.username = ""; } // A method to display the state of the object to the screen public void displayPersonDetails() { System.out.println("Name: " + firstName + " " + lastName); System.out.println("Address: " + address); System.out.println("Username: " + username); } }

请注意,第二个构造函数方法也称为“Person”,它也不返回值。它与第一个构造函数方法的唯一区别在于参数——这次它只需要三个字符串值:firstName、lastName和address。

现在,我们可以用两种不同的方式创建Person对象:

public class PersonExample { public static void main(String[] args) { Person dave = new Person("Dave", "Davidson", "12 Main St.", "DDavidson"); Person jim = new Person("Jim","Davidson", "15 Kings Road"); dave.displayPersonDetails(); jim.displayPersonDetails(); } }

将使用名字、姓氏、地址和用户名创建人员dave。但是,人员jim不会获得用户名,即用户名将是空字符串:username=“”。

简要回顾

构造函数方法仅在创建对象的新实例时调用。他们:

  • 必须与类具有相同的名称
  • 不要返回值
  • 可以没有、一个或多个参数
  • 只要每个构造函数方法具有不同的参数集,就可以对多个参数进行编号
  • 只要使用“this”关键字,参数名称就可以与私有字段相同
  • 使用“new”关键字调用

  • 发表于 2021-09-25 14:00
  • 阅读 ( 175 )
  • 分类:编程

你可能感兴趣的文章

属性(attribute)和参数(parameter)的区别

...程序,Rhombus类有两个属性:diagonal1和diagonal2。它还具有构造函数和计算面积的方法。在主程序中,创建了一个菱形对象。将两个值传递给构造函数,这些值将分配给diagonal1和diagonal2属性。调用calArea方法时,计算菱形的面积,它...

  • 发布于 2020-10-19 02:04
  • 阅读 ( 607 )

垃圾收集器(garbage collector)和析构函数(destructor)的区别

...程序执行结束时,可以销毁对象。析构函数与类名同名。构造函数用于创建对象。它可以接受参数。构造函数也可以有返回值。但在析构函数中,没有返回类型或接受参数。一个类只能由一个析构函数组成。析构函数是使用颚化...

  • 发布于 2020-10-19 13:14
  • 阅读 ( 186 )

这(this)和超级java(super in java)的区别

...变量。类变量由所有对象共享。id和名称将传递给Employee构造函数。如果程序员写id=id;它不会初始化实例变量,因为构造函数已经有id和名称。实例变量没有值。因此,打印它们将显示空值。当使用它时,它引用当前对象。因此...

  • 发布于 2020-10-19 18:17
  • 阅读 ( 378 )

入门时应学习的10个核心java概念

... 构造函数是类中的一种特殊方法,在创建对象时调用它。在构造过程中通过传入的参数调用它。然后使用这些参数将对象初始化为正确的状态。在下面的示例中,Circle类提...

  • 发布于 2021-03-13 05:33
  • 阅读 ( 237 )

建造师(constructor)和析构函数(destructor)的区别

...据或变量称为实例变量。 什么是建造师(a c***tructor)? 构造函数是类的特殊成员函数,在创建对象实例时调用它。有时很难在每次创建实例时初始化类中的所有变量。由于初始化需求在面向对象编程中很常见,因此它允许对象...

  • 发布于 2021-06-25 08:36
  • 阅读 ( 260 )

建造师(constructor)和方法(method)的区别

...据的代码。它更像是一个作用于数据并返回值的子程序。构造函数与方法非常相似,只是在创建对象实例时调用它。本文解释了两者的区别。 什么是java中的一种方法(a method in java)? 方法只不过是一组代码,这些代码按名称命...

  • 发布于 2021-06-25 08:37
  • 阅读 ( 427 )

散列表(hashmap)和哈希表(hashtable)的区别

...p实现,它为**和定位对提供了恒定的时间性能。可以使用构造函数来调整性能,这些构造函数允许您设置哈希表的容量和负载因子。基本哈希表与HashMap非常相似,甚至包括方法名。它将密钥/值对存储在哈希表中。在Hashtable中,...

  • 发布于 2021-06-25 20:14
  • 阅读 ( 244 )

建造师(constructor)和方法(method)的区别

构造函数和方法之间的主要区别在于,构造函数是类中的一个特殊方法,用于初始化该类的对象,而方法是执行与类关联的一组指令的过程或函数。 大多数高级编程语言都支持面向对象编程(OOP),这是一种允许程序员在计算...

  • 发布于 2021-07-01 05:24
  • 阅读 ( 243 )

违约(default)和参数化构造函数(parameterized constructor)的区别

默认构造函数是一种在程序员没有在程序中定义任何构造函数时自动调用的构造函数。相反,参数化构造函数是程序员通过传递参数给类中的实例变量初始值而定义的一种构造函数。这就是默认构造函数和参数化构造函数的主要...

  • 发布于 2021-07-01 05:25
  • 阅读 ( 672 )

复制构造函数(copy constructor)和赋值运算符(assignment operator)的区别

复制构造函数和赋值运算符的主要区别在于,复制构造函数是一种有助于创建已存在对象的副本而不影响原始对象值的构造函数,而赋值运算符是一种有助于将新值赋给程序中变量的运算符。 构造函数是一种特殊的方法,在创...

  • 发布于 2021-07-01 05:44
  • 阅读 ( 529 )
dwef9922
dwef9922

0 篇文章

相关推荐