我目前正在学习Java,由于这个问题,我经常被卡在编程中。也许因为我的Java词汇还不足以找到正确的答案。如果已经发布或有一个好的网页可以找到答案,请告诉我!
public class Car {
private int numberOfDoors;
private int maxSpeed;
public Car(int doors, int speed) {
numberOfDoors = doors;
maxSpeed = speed;
}
如果已经创建了int doors
和int speed
,为什么还要创建新的int numberOfDoors
和int maxSpeed
?
答案 0 :(得分:1)
如果已经创建了int numberOfDoors和int maxSpeed,为什么还要创建一个新的int门和int速度?
numberOfDoors
和maxSpeed
是对象的当前状态。 int doors
和int speed
定义了要分配给对象的值。
只需将您的班级想象成蛋糕制作机:
您的机器(您的班级)需要2种成分(参数实参)才能制作蛋糕(制作对象)。
糖和面粉槽类似于构造函数参数列表。 (创建对象所需的成分)
添加到机器中的糖和面粉的实际数量是您在本课程中的贡献。
在代码中,这看起来像:
public class CakeMachine{
private Sugar sugarInMachine; //attribute
private Flour flourInMachine; //attribute
//constructor
public CakeMachine(Sugar sugarToBeAdded, Flour flourToBeAdded){
sugarInMachine = sugarToBeAdded; //assign argument to your attribute
flourInMachine = flourToBeAdded; //assign argument to your attribute
}
}
答案 1 :(得分:0)
构造函数可以接收两个整数类型的参数。 每当创建一个类的实例时,它将需要两个参数,例如。
Car carinstance = new Car(4, 50);
在这里传递的这些参数将在构造函数中接收。构造函数变量的作用域是局部的。这些变量只能在构造函数中使用。
现在,这些局部变量将被分配给在类主体中声明的全局变量。这些变量是私有的(在一个类中),因此可以在该类的任何方法和构造函数中使用。
请参考任何Java教程,以了解Java中的类,构造函数,变量范围,访问修饰符和方法的概念。您可以从tutorialspoint开始获得基本概念。
答案 2 :(得分:0)
如果已经创建了int numberOfDoors和int maxSpeed,为什么还要创建一个新的int门和int速度?
首先,您真的不需要。您可以在一种情况下使用相同的名称:必须使用关键字this
来区分这些变量的范围。
具有:
public class Car {
private int numberOfDoors;
private int maxSpeed;
public Car(int doors, int speed){
numberOfDoors = doors;
maxSpeed = speed;
}
}
此构造函数完全相同:
public Car(int numberOfDoors, int maxSpeed) {
this.numberOfDoors = numberOfDoors;
this.maxSpeed = maxSpeed;
}
关键字this
始终引用类变量。如果不存在,并且构造函数的参数不包含任何其他同名变量,则它将根据我的答案中的第一个片段进行工作-找到了类变量。如果类和构造函数的参数都具有相同名称的变量,则会发生冲突并且仅识别构造函数的范围-因此需要用this
来区分它们。
答案 3 :(得分:0)
在Java中,您具有字段,类,实例和本地(这是一种简化)的三种基本“种类”。
Class字段具有 static 修饰符。所有实例和所有方法共享这些字段。
实例字段是在任何方法之外定义的。实例的所有实例(非静态)方法共享这些字段。
局部字段定义在一个块内;方法是一种障碍。这些仅在块内共享。
参数是局部字段的一种特殊形式,其中方法是包含块。
在您的代码中,您有两组具有相同名称的字段,一组是实例,一组是本地(参数)。这导致本地字段“隐藏”了实例字段。
您有两种处理隐藏的方法。一种是重命名一组字段或另一组。这是我使用的方法。另一个是使用“ this”来“限定”实例字段。这告诉编译器您要始终查看实例以查找字段。
将值作为参数传递给构造函数的原因是为了初始化实例字段。这样,一旦构造函数完成并且调用了其他方法,实例将能够使用这些值。
答案 4 :(得分:0)
您想制造一辆汽车,因此您已经计划好汽车,将要开一些门,并为此提供最大速度。但是您只是计划了汽车,即您为汽车创建了一个蓝图(属于类) 您已经摆脱了梦想,开始构建梦想中的汽车,因此您必须使用“ new”关键字创建一个真实的对象。 Car car = new Car(); 现在,您已经制造了一辆汽车,但是它没有按计划的那样开门和达到最大速度。
you can add those doors and max speed by using Car reference
像这样
car.numberOfDoors = 4;
car.maxSpeed = 200;
但是看起来很乏味并且不节省空间吗? 因此,java设计人员添加了一个名为Constructor的工具。
which is
public Car(int doors, int speed){
numberOfDoors = doors;
maxSpeed = speed;
}
the benefit of this is you can directly add numberOfDoors and maxSpeed when you are creating the object.
这是您的问题 您必须明确地告诉JVM哪个参数初始化哪个变量,否则JVM会造成混淆,并最终导致汽车以最大速度4行驶200门。我确定您无法处理它。电脑真的很笨,不要忘了您在屏幕上观看的所有内容都是由沙子制成的。您对他们的期望是您告诉他们的。