OOP - 是否需要构造函数?

时间:2015-06-19 02:47:05

标签: java oop object constructor

所以我正在观看youtube视频,youtubube说:"当你正在制作这个'这个'对象,你需要将它设置为一个新的'类型'这个对象" ...

该类名为objectIntro,构造函数为:

                public objectIntro(){
//Object Constructor (Method)
}

所以,这是我的问题......

我试图创建一个对象,它基本上告诉我汽车中的汽油水平......

public class car {

double petrolLevel;
double tankSize;

public void refillPetrol(double I){

    if(I>tankSize){
        I = tankSize;
        petrolLevel = petrolLevel + I;
    }
    else{
        petrolLevel = petrolLevel + I;
    }
}

public void fuelConsumption(double O){

    if(O>tankSize){
        O=tankSize;
        petrolLevel = petrolLevel - O;
    }
    else{
        petrolLevel = petrolLevel - O;
    }
}

public String returnPetrolLevel(){
    return String.format("%sL", petrolLevel);
}

}

然后创建对象的类是......

public class carObject {
public static void main(String[] args){

car object1 = new car();


object1.tankSize = 50;//Litres
object1.petrolLevel = 0;    

object1.refillPetrol(50);
object1.fuelConsumption(20);
object1.returnPetrolLevel();

System.out.printf("Petrol Level: %s", object1.returnPetrolLevel());
}
}

我的问题是,如果没有构造函数,我的对象怎么工作? 在汽车类中,我没有一种方法可以说" public car(){ }",而youtuber表示这是必需的?

有人可以清楚这一点,我也认为我没有在写上下文中使用术语构造函数和方法,有人可以解释这些术语的定义,以及一些例子。

谢谢

5 个答案:

答案 0 :(得分:4)

全部在Java tutorial

  

您不必为您的班级提供任何构造函数,但在执行此操作时必须小心。编译器会自动为没有构造函数的任何类提供无参数的默认构造函数。

此外,惯例是大写您的类名,小写您的方法参数,并使用通常为私有的成员变量的getters / setter。

有时你实际上可能会注意到你无法做new MyClass()或者你无法实例化new。这有时会发生,因为编码器提供了一个无参数的私有构造函数。例如,当您希望用户使用工厂方法(您在该类中提供)等实例化对象时,可以执行此操作。但仍然不会更改构造函数具有的事实(这是语言规范的一部分)。

如果您想了解有关默认构造函数的更多信息,可以参考java language spec.

答案 1 :(得分:1)

如果您没有构造函数,则会有一个隐式构造函数将所有成员设置为其默认值,例如0

int

构造函数和方法之间的区别在于构造函数创建并初始化对象,而方法用于已存在的对象。您可以将构造函数视为在新创建的对象上调用的函数,以某种方式初始化数据。

答案 2 :(得分:1)

JLS特别关注没有构造函数的类:

  

如果类不包含构造函数声明,则为默认值   没有形式参数且没有throws子句的构造函数   隐含地宣布。

这意味着如果您没有为您的类编写任何构造函数,编译器将为您提供一个构造函数,并且Java虚拟机将所有类成员初始化为默认值。

但是一旦你编写了一个构造函数,只有那个将被用来创建一个类实例。

这种行为通常适用于充当数据结构的类,而普通类将使用默认初始化代码定义一些构造函数。

答案 3 :(得分:1)

你的问题的答案是,如果你没有为类提供构造函数,JVM将隐式调用没有参数的默认构造函数。

有关构造函数的详细信息,请参阅下面的链接 https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

答案 4 :(得分:0)

即使您没有在类中显式创建构造函数,也会在编译期间创建一个默认构造函数并使用它。

https://msdn.microsoft.com/en-us/library/aa645608(v=vs.71).aspx