我刚刚开始学习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的快捷方式。 PascalTriangleClass类型; WTPPascalTriangle类型。或者,简单地说,PascalTriangle是一个类,而WTP是该类的实例。想一想“狗狗时期”和“我的狗菲多”之间的区别。 “我的狗菲多”可能有四只脚。 “狗狗”没有腿;或者如果我们算过的话,那将会有数百万。但是,如果我觉得“我的狗菲多”是“狗狗式”的一个很好的例子。同样,我们分配给WTP的东西是PascalTriangle的示例(“实例”);您可以有其他PascalTriangle,就像我可以有另一只狗一样。当您编写WTP.wspolczynnik时,这是在引用实例方法。如果您编写了PascalTriangle.wspolczynnik,则仅当该方法被声明为类方法(使用static关键字)时才有效,例如“ doghood”具有填充,而“ dog”具有分支。

10-08 01:58