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表示这是必需的
有人能澄清一下吗?我想我没有在写上下文中使用术语构造函数和方法,有人能解释一下这些术语的定义吗?还有一些例子
谢谢
# 1 楼答案
一切都在Java tutorial
此外,约定是将类名大写,将方法参数小写,并对通常是私有的成员变量使用getter/setter
有时您可能会注意到,您无法执行
new MyClass()
,或者根本无法使用new
实例化和对象。这种情况有时会发生,因为编码器提供了一个无参数私有构造函数。例如,当您希望用户使用工厂方法(您在该类中提供的方法)实例化对象等,但仍然不会改变构造函数必须存在的事实(这是语言规范的一部分)时,可以执行此操作如果您想了解有关默认构造函数的更多信息,可以参考java language spec.
# 2 楼答案
如果没有构造函数,则有一个隐式构造函数将所有成员设置为其默认值,例如
0
forint
构造函数和方法之间的区别在于构造函数创建并初始化对象,而方法用于已存在的对象。您可以将构造函数看作是在新创建的对象上调用的函数,以某种方式初始化数据
# 3 楼答案
即使没有在类中显式创建构造函数,也会在编译时创建并使用默认构造函数
https://msdn.microsoft.com/en-us/library/aa645608(v=vs.71).aspx
# 4 楼答案
问题的答案是,如果不为类提供构造函数,JVM将隐式调用没有参数的默认构造函数
有关构造函数的详细信息,请参阅下面的链接 https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
# 5 楼答案
JLS特别关注没有构造函数的类:
这意味着,如果您不为类编写任何构造函数,编译器将为您提供一个构造函数,Java虚拟机将把所有类成员初始化为默认值
但是一旦你写了一个构造器,只有那个构造器会被用来创建一个类实例
这种行为通常适用于充当数据结构的类,而普通类将使用默认初始化代码定义一些构造函数