我在为我的入门编程课程做家庭作业。我们最近了解了构造函数,以及它们如何工作以及它们如何工作,但我不明白为什么每个对象都需要它。这似乎只是额外的工作,因为你可以实例化对象并在它们之外运行语句。例如,在测试不同的方式来写相同的代码后,我发现,构造函数是必需的还是仅用于方便?
public class MyCartoon extends Frame {
StickFigure man = new StickFigure();
public static void main(String[] args) {
new MyCartoon();
}
}
产生正是因为这个同样的效果:
public class MyCartoon extends Frame {
StickFigure man;
public MyCartoon() {
man = new StickFigure();
}
public static void main(String[] args) {
new MyCartoon();
}
}
我可以请得到一些澄清?
但是,当我尝试使用上面代码实例化的另一个类中的类似代码时,它在尝试编译时会抛出100多个错误。以下代码运行良好。同样的代码,除了与StickFigure()
构造函数中的代码,不会:
import wheels.users.*;
import java.awt.Color;
public class StickFigure {
Ellipse head;
Line torso;
Line leftBackArm;
Line leftForeArm;
Line rightBackArm;
Line rightForeArm;
Line leftUpperLeg;
Line leftLowerLeg;
Line rightUpperLeg;
Line rightLowerLeg;
StickFigure() {
head = new Ellipse();
head.setColor(Color.WHITE);
head.setFrameThickness(4);
head.setFrameColor(Color.BLACK);
head.setSize(80, 80);
head.setLocation(140, 130);
torso = new Line(180, 210, 160, 340);
torso.setColor(Color.BLACK);
torso.setThickness(4);
leftBackArm = new Line(180, 210, 145, 280);
leftBackArm.setColor(Color.BLACK);
leftBackArm.setThickness(4);
leftForeArm = new Line(145, 280, 132, 340);
leftForeArm.setColor(Color.BLACK);
leftForeArm.setThickness(4);
rightBackArm = new Line(180, 210, 190, 290);
rightBackArm.setColor(Color.BLACK);
rightBackArm.setThickness(4);
rightForeArm = new Line(190, 290, 225, 350);
rightForeArm.setColor(Color.BLACK);
rightForeArm.setThickness(4);
leftUpperLeg = new Line(160, 340, 140, 420);
leftUpperLeg.setColor(Color.BLACK);
leftUpperLeg.setThickness(4);
leftLowerLeg = new Line(140, 420, 105, 490);
leftLowerLeg.setColor(Color.BLACK);
leftLowerLeg.setThickness(4);
rightUpperLeg = new Line(160, 340, 180, 420);
rightUpperLeg.setColor(Color.BLACK);
rightUpperLeg.setThickness(4);
rightLowerLeg = new Line(180, 420, 180, 500);
rightLowerLeg.setColor(Color.BLACK);
rightLowerLeg.setThickness(4);
}
}
为什么会变成这样的代码,而不是第一个代码块,抛出错误没有提供的构造?
谢谢!这解释了很多。然而,你的第一个子弹给我带来了一些困惑。我写了一些更多的代码,并且在等待答案时也尝试了包含的构造函数/无构造函数测试。新代码不需要抛出任何异常或任何其他项目符号,但是如果我拿出表示构造函数的语法,它就会失败。我将在短时间内编辑代码。 – Eunkai
@refusetocompile:是的,我的例子不包括任何异常 - 但看看'FileInputStream'就是一个例子。 –
您能否根据我编辑的新代码进行说明?为什么这段代码除了构造函数内部的所有语句外,都会抛出这么多的错误? – Eunkai