在此页面上:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
一个类包含被调用以从中创建对象的构造函数 班级蓝图。构造函数声明看起来像方法 声明 - 除了他们使用类的名称而没有 返回类型。例如,
Bicycle
有一个构造函数:public Bicycle(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; }
要创建一个名为
myBike
的新Bicycle对象,构造函数是 由新运营商召集:Bicycle myBike = new Bicycle(30, 0, 8);
new Bicycle(30, 0, 8)
在内存中为对象创建空间 初始化其字段。"
所以我在那之前和那之前完成了JS,声明一个新对象就像var newObject = new Bicycle(params);
但是,我在此注意到的是,当您创建新对象时,您说Bicycle myBike = new Bicycle(params);
为什么单词Bicycle使用了两次?这有什么作用?
答案 0 :(得分:3)
Bicycle myBike = new Bicycle(30, 0, 8);
在一个陈述中发生了两件主要的事情:
1
Bicycle myBike;
这是变量声明,其中指定了变量名称和类型。
2
myBike = new Bicycle(30, 0, 8);
这是变量初始化,其中赋值。
答案 1 :(得分:2)
在JS中,每个变量都被称为var
类型。它的通用类型,但在java
中,每个对象都有一个类似Bicycle
的类型。所以它基本上取决于语言所遵循的语法。
Bicycle myBike = new Bicycle(30, 0, 8);
中的 Bicycle myBike
声明了myBike
类型&的引用变量Bicycle
。 new Bicycle(30, 0, 8);
创建了一个Bicycle
的新实例,其初始值为30,0,8
,=
将此实例分配给myBike
变量。
答案 2 :(得分:1)
第一部分(在=
定义对象引用之前,第二部分(在=
之后)构造一个新对象。{ {1}}执行分配。
答案 3 :(得分:1)
Java倾向于明确声明对象的用途。例如,当您创建一个整数时,如果使用 int ,则为前缀。以类似的方式,Java编译器想要知道您正在创建的对象是什么。因此,我们必须告诉它它将成为一个特定的类。所有Java变量(据我所知)都遵循相同的模式。这是语言的设计方式。其他语言通常使用类似的结构,或者有 var 变量的空间。
单词Bicycle的第一个实例声明了您正在使用的变量类型。第二个用于创建自行车类型的新对象。第二次使用该单词与调用方法相同。
虽然我同意,但在这种情况下似乎有点多余。我认为它是因为Java的面向对象性质,我们需要限制它。 (例如,你可能会遇到对象从其他对象继承的有趣情况)。
答案 4 :(得分:1)
还有另外一种方法可以解释为" Head First Java"您可能会发现更直观一点(这对我来说更有意义)
接受声明
Bicycle myBike = new Bicycle(params);
并将其分解为:
Bicycle myBike;
myBike = new Bicycle(params);
现在将myBike
想象为遥控器,将Bicycle(params)
想象为遥控器控制的对象。
所以这两行说:
第一行:
Make a remote called myBike that will control an object of type Bicycle
。
然后第二行说:The specific Bicycle that myBike will control is a new Bicycle with these parameters.
我认为这是一个更直观的解释。
你呈现它的方式,它只是将这些语句分成一行(以节省一些空间)。
所以在等号左边你告诉编译器创建一个名为myBike
的变量,该变量只能链接到Bicycle
类型的对象,并且等号正好告诉你您将此引用Bicycle
链接到:在这种情况下,new Bicycle(params)
。