我刚刚开始学习Java,我们的老师给了我们一个代码,可以在下一次讲座中向他分析和解释。我了解其中的大部分内容,但是我对1行代码有疑问。
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是另一个类的名称,负责该程序中的所有操作。您能告诉我这段代码会发生什么吗?这是某种“捷径”,因此我们可以编写WTP而不是每次都键入PascalTriangle吗?抱歉,我的问题很傻,但是我自己找不到答案,谢谢您的帮助。
最佳答案
请注意您说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
是该类的实例。想一想“狗狗时期”和“我的狗菲多”之间的区别。 “我的狗菲多”可能有四只脚。 “狗狗”没有腿;或者如果我们算过的话,那将会有数百万。但是,如果我觉得“我的狗菲多”是“狗狗式”的一个很好的例子。同样,我们分配给WTP
的东西是PascalTriangle
的示例(“实例”);您可以有其他PascalTriangle
,就像我可以有另一只狗一样。当您编写WTP.wspolczynnik
时,这是在引用实例方法。如果您编写了PascalTriangle.wspolczynnik
,则仅当该方法被声明为类方法(使用static
关键字)时才有效,例如“ doghood”具有填充,而“ dog”具有分支。