有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OOP是否需要构造函数?

所以我看了一段youtube视频,youtube说:“当你创建‘this’对象时,你需要将它设置为这个对象的新‘类型’。”

该类称为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());
}
}

我的问题是,为什么我的对象在没有构造函数的情况下工作? 在汽车类中,我没有一个方法说“公共汽车(){ }“,而youtuber表示这是必需的

有人能澄清一下吗?我想我没有在写上下文中使用术语构造函数和方法,有人能解释一下这些术语的定义吗?还有一些例子

谢谢


共 (5) 个答案

  1. # 1 楼答案

    一切都在Java tutorial

    You don't have to provide any constructors for your class, but you must be careful when doing this. The compiler automatically provides a no-argument, default constructor for any class without constructors.

    此外,约定是将类名大写,将方法参数小写,并对通常是私有的成员变量使用getter/setter

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

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

  2. # 2 楼答案

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

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

  3. # 5 楼答案

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

    If a class contains no constructor declarations, then a default constructor with no formal parameters and no throws clause is implicitly declared.

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

    但是一旦你写了一个构造器,只有那个构造器会被用来创建一个类实例

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