我刚刚开始学习java,我们的老师给了我们一个代码来分析和解释下一讲课。我理解其中的大部分内容,但是我遇到了一行代码问题。
public class Test {
public static void main(String[] args) {
PascalTriangle WTP;
try {
WTP = new PascalTriangle(Integer.parseInt(args[0]));
} catch (NegativeArraySizeException ex) {
System.out.println(args[0] + "\t- incorrect data");
return;
} catch (NumberFormatException ex) {
System.out.println(args[0] + "\t- incorrect data");
return;
}
for (int i = 1; i < args.length; i++) {
try {
System.out.println(args[i] + "\t-> " + WTP.wspolczynnik(Integer.parseInt(args[i])));
} catch (ArrayIndexOutOfBoundsException ex) {
System.out.println(args[i] + "\t- incorrect number");
} catch (NumberFormatException ex) {
System.out.println(args[i] + "\t- incorrect data");
}
}
}
}
其余的代码在我的问题中并不重要,所以我跳过它(这个程序是关于pascal三角形的)。我不明白这一行:
PascalTriangle WTP;
PascalTriangle是另一个类的名称,负责该程序中的所有操作。你能解释一下这行代码中会发生什么吗?这是某种&#34;捷径&#34; ,所以我们可以只写WTP而不是每次都输入PascalTriangle?如果我的问题看起来很傻,我道歉,但我自己找不到答案,谢谢你的帮助。
答案 0 :(得分:2)
请注意您所说的int i = 1
。这实际上是两个不同事物的简写:变量声明和初始化。您也可以将其分为两部分:
int i; // declaration
i = 1; // initialisation
声明部分告诉编译器您打算i
表示整数变量。初始化表达式将其值设置为1
。
同样,你有两个关于变量WTP
的部分:
PascalTriangle WTP; // declaration
WTP = new PascalTriangle(Integer.parseInt(args[0])); // initialisation
这两行中的第一行表示你打算在这个函数中有一个名为WTP
的变量,它的类型将是PascalTriangle
。然后,您创建一个新的PascalTriangle
并将其分配给变量。
WTP
绝不是PascalTriangle
的捷径。 PascalTriangle
的类型为Class
; WTP
的类型为PascalTriangle
。或者,简单地说,PascalTriangle
是一个类,WTP
是该类的实例。想想&#34; doghood&#34;和#34;我的狗Fido&#34;。 &#34;我的狗Fido&#34;可能有四条腿。 &#34; Doghood&#34;没有腿;或者,如果我们确实计算,它将有数百万美元。但是#34;我的狗Fido&#34;如果这是有道理的,那就是&#34; doghood&#34;的一个很好的例子。以同样的方式,我们分配给WTP
的东西是PascalTriangle
的一个例子(&#34;一个实例&#34;);你可以拥有其他PascalTriangle
,就像我可以拥有另一只狗一样。当您编写WTP.wspolczynnik
时,这是引用实例方法;如果你写了PascalTriangle.wspolczynnik
,那只有在方法被声明为类方法(使用static
关键字)时才会有效,例如&#34; doghood&#34;有人口但是&#34;狗&#34;有腿。
答案 1 :(得分:0)
这是某种“快捷方式”,所以我们每次都可以写WTP而不是输入PascalTriangle吗?
排序?但那不是你应该怎么想的。相反,请考虑class
和object
之间的差异。 PascalTriangle
是一个类,WTP
是一个对象。对象是一个类的瞬间。
在这种情况下,该行代码声明了一个名为WTP
PascalTriangle
的变量。
作为类比,将一个班级视为房子的蓝图。把对象想象成一个真正的房子。从蓝图建造房屋的行为就像打电话给班级的建设者一样。它可能需要一些选项,并根据蓝图生成房屋的实例。
在这种情况下,实际上并没有调用构造函数。这看起来像这样:
PascalTriangle WTP = new PascalTriangle();
所以,继续这个比喻,在你的代码行中,房子实际上还没有构建。但是已经选择了特定的蓝图(类类型)并且保留了批次(存储器地址)。在后面一行:
WTP = new PascalTriangle(Integer.parseInt(args[0]));
房子是在那个地段建造的。