繁体   English   中英

直觉的理解

[英]Intuitive understanding

在此页面上: 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 myBike = new Bicycle(30, 0, 8);

一条语句中发生的两件主要事情:

1。

Bicycle myBike;

这是变量声明,在其中指定了变量名称和类型。

2。

myBike = new Bicycle(30, 0, 8);

这是变量初始化,在其中分配了值。

在JS中,每个变量都称为var类型。 它是一种泛型,但在java每个对象都具有一种类似Bicycle的类型。 因此,它基本上取决于语言遵循的语法。

Bicycle myBike = new Bicycle(30, 0, 8); 在此Bicycle myBike声明了一个类型为Bicyclenew Bicycle(30, 0, 8); myBikeBicycle myBike变量myBike new Bicycle(30, 0, 8); 创建一个初始值为30,0,8Bicycle的新实例,并将=将此实例分配给myBike变量。

第一部分(前=定义一个对象引用 ,第二部分(后=构造一个新的对象。该=确实的分配

Java倾向于使用显式声明来声明预期使用的对象是什么。 例如,当您创建一个整数时,如果使用int作为前缀 Java编译器以类似的方式想要知道您要创建的对象是什么。 因此,我们必须告诉它它将成为特定的类。 就我所知,所有Java变量都遵循相同的模式。 这是语言的设计方式。 其他语言通常使用类似的构造,或者为var变量留出空间。

Bicycle一词的第一个实例声明您正在使用的变量的类型。 第二个用于创建自行车类型的新对象。 单词的第二个用法与调用方法相同。

尽管我同意,但在这种情况下似乎有点多余。 由于Java的面向对象的性质,我认为它是需要限制它的。 (例如,您可能会遇到有趣的情况,即对象从其他对象继承而来)。

在“ 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM