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