Java:无法调用重载构造函数
在这里,我试图在我的主程序(由变量a给出)中满足某些条件后调用重载构造函数。当我只使用默认构造函数时,代码运行良好,但我需要在某个点调用重载构造函数,结果失败。以下是代码: 重载构造函数:Java:无法调用重载构造函数,java,constructor,Java,Constructor,在这里,我试图在我的主程序(由变量a给出)中满足某些条件后调用重载构造函数。当我只使用默认构造函数时,代码运行良好,但我需要在某个点调用重载构造函数,结果失败。以下是代码: 重载构造函数: public Paddle(int a){ if(a ==1){ ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle1)); image = ii.getImage(); } else
public Paddle(int a){
if(a ==1){
ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle1));
image = ii.getImage();
}
else {
ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle2));
image = ii.getImage();
}
width = image.getWidth(null);
height = image.getHeight(null);
resetState();
}
// further initialization --
public Paddle(){
ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle));
image = ii.getImage();
width = image.getWidth(null);
height = image.getHeight(null);
System.out.println(height+" "+width);
resetState();
}
默认构造函数:
public Paddle(int a){
if(a ==1){
ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle1));
image = ii.getImage();
}
else {
ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle2));
image = ii.getImage();
}
width = image.getWidth(null);
height = image.getHeight(null);
resetState();
}
// further initialization --
public Paddle(){
ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle));
image = ii.getImage();
width = image.getWidth(null);
height = image.getHeight(null);
System.out.println(height+" "+width);
resetState();
}
提前感谢您的帮助,可以进一步询问,但我认为这段代码有一些问题。谢谢你的回答
您没有在重载构造函数中设置实例变量映像
正道
你做这件事的方式是违反规则的,不要重复你自己
最好的方法是让无参数构造函数调用重载的构造函数,然后在一个地方设置实例变量image
public Paddle(final int i)
{
if (i==1) { this.image = one thing }
else
{ this.image = another thing }
}
public Paddle() { this(0); }
更好的方法是只将资源传递给单个构造函数并使用它,而不查看所有代码,这看起来太复杂了。
您没有在重载构造函数中设置实例变量映像
正道
你做这件事的方式是违反规则的,不要重复你自己
最好的方法是让无参数构造函数调用重载的构造函数,然后在一个地方设置实例变量image
public Paddle(final int i)
{
if (i==1) { this.image = one thing }
else
{ this.image = another thing }
}
public Paddle() { this(0); }
更好的方法是只将资源传递给单个构造函数并使用它,而不查看所有代码,这看起来过于复杂。很难读取第一段代码。你能把它格式化成你的第二段代码吗?编辑:谢谢你的新格式!你说失败是什么意思?如果有stacktrace,发布它。格式化完成程序编译成功,但在构造函数调用edit时出现一些运行时错误:我将尝试获取堆栈跟踪,在Padle1和Padle是指向资源的有效链接之前从未使用过。代码不足。也许Packer1是错误的,也许您应该在if案例之前声明ImageIcon ii。程序在哪一行中断?失败的是什么?你应该发布一个堆栈跟踪。很难读取你的第一个代码块。你能把它格式化成你的第二段代码吗?编辑:谢谢你的新格式!你说失败是什么意思?如果有stacktrace,发布它。格式化完成程序编译成功,但在构造函数调用edit时出现一些运行时错误:我将尝试获取堆栈跟踪,在Padle1和Padle是指向资源的有效链接之前从未使用过。代码不足。也许Packer1是错误的,也许您应该在if案例之前声明ImageIcon ii。程序在哪一行中断?失败的是什么?你应该发布一个堆栈跟踪。我们知道吗?他没有向我们展示他的1-arg构造函数的其余部分。这也没用。我将尝试解释这种情况:有一个主类,根据条件设置了a的值,从而加载了构造函数。对于初始默认情况,当构造函数没有参数时,它可以正常工作,但当调用带参数的构造函数时,游戏停止。您必须看到异常的堆栈跟踪打印到标准输出。如果在Eclipse中,请查看Console视图。如果在其他IDE中,请查看与之等效的代码。如果在命令行上,使用java而不是javaw来查看文本窗口中的输出,或者使用java控制台。我使用的是NetBeans IDE,我尝试获取堆栈跟踪,我是新手,我们知道吗?他没有向我们展示他的1-arg构造函数的其余部分。这也没用。我将尝试解释这种情况:有一个主类,根据条件设置了a的值,从而加载了构造函数。对于初始默认情况,当构造函数没有参数时,它可以正常工作,但当调用带参数的构造函数时,游戏停止。您必须看到异常的堆栈跟踪打印到标准输出。如果在Eclipse中,请查看Console视图。如果在其他IDE中,请查看与之等效的代码。如果在命令行上,使用java而不是javaw来查看文本窗口中的输出,或者使用java控制台