我正在学习java编程。所以有时我会看到如下代码:
Shape ball= new Shape();.// takes no parameter
Shape ball= new Shape(1,2); //takes parameter
我的问题是,当一个对象有多个带有不同参数的构造函数时,你怎么知道要使用哪个构造函数?
查看该课程的文档。这是唯一确定的方法。您提供的 Shape 类可能有两个构造函数:
Shape() //default no-args
{
//do something
}
Shape(int a, int b)
{
//do something with a and b
}
创建对象时,您可以有一个不带参数的默认构造函数,它会执行某些操作,因此当您不提供参数时,会调用此构造函数。然后,您可以创建第二个构造函数,该构造函数接受参数,然后执行不同的操作。我相信这个术语被称为重载构造函数。哪个被激活取决于创建对象时参数中提供的内容。
根据您的直接问题,要找出该对象采用哪些参数,您必须阅读该对象的文档。没有其他方法可以查明。Visual Studio 等一些工具将向您展示所有可用的选项。但是,Visual Studio 适用于 c# 等语言,而不是 java。
这是一个你可以学习的例子:http: //www.leepoint.net/JavaBasics/oop/oop-45-constructor-overloading.html
下面的代码
Shape ball = new Shape(); // takes no parameter
实例化一个具有默认状态的新对象。这个无参数构造函数也称为默认构造函数,因为它将对象初始化为其默认值。
调用参数化构造函数时
Shape ball = new Shape(1,2); // takes parameters
您正在实例化一个新对象并为其提供自定义初始状态;与上述无参数构造函数初始化对象的不同。
让多个构造函数采用不同的参数称为构造函数重载。决定使用哪个构造函数取决于您的要求。例如,如果您有以下两个类的构造函数,例如,Circle
public Circle() {
this.center = new Point(0, 0);
this.radius = 1;
}
public Circle(int x, int y, int r) {
this.center = new Point(x, y);
this.radius = r;
}
每当您想要一个圆心不同于 (0,0) 或具有不同半径的圆时,您都可以使用参数化构造函数。
在 Java 中,任何方法都可以被重载,包括构造函数。基本上这意味着您可以拥有多个具有相同名称的方法,但它们必须因它们所采用的参数的类型和/或大小而异。所以,用你的例子:
Shape ball= new Shape();.// takes no parameter
Shape ball= new Shape(1,2); //takes parameter
暗示至少有两个构造函数来创建由 Shape 类在某处定义的新 Shape。一个不带参数,一个带两个整数参数。在某种程度上,您不必担心“选择”正确的调用方法。我的意思是,Java 将仅根据您调用它的参数自动选择它运行的方法。
你的决定是决定你想要传递给构造函数的参数以最快地完成你的工作。
程序员应该知道他需要通过构造函数发送哪些参数。每当他有要发送的参数时,他都会传递该值,否则他将不会传递任何东西。这实际上是开发系统的开发人员设定的逻辑。
假设我们不知道某些类构造函数,那么我们可以依赖该特定类的文档。
你不需要知道,你只需要初始化。
编译器执行所谓的静态绑定
,并将您的调用与函数(在您的情况下为构造函数)的签名(参数的类型和数量)相匹配。
也看看这个http://javarevisited.blogspot.in/2012/03/what-is-static-and-dynamic-binding-in.html
您可以简单地使用关键字this
调用第一个构造函数(即使用一个构造函数调用另一个构造函数)。