我在爲我的入門編程課程做家庭作業。我們最近了解了構造函數,以及它們如何工作以及它們如何工作,但我不明白爲什麼每個對象都需要它。這似乎只是額外的工作,因爲你可以實例化對象並在它們之外運行語句。例如,在測試不同的方式來寫相同的代碼後,我發現,構造函數是必需的還是僅用於方便?
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