java - 试图理解一个简单的代码

时间:2015-03-30 00:33:29

标签: java

我刚刚开始学习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?如果我的问题看起来很傻,我道歉,但我自己找不到答案,谢谢你的帮助。

2 个答案:

答案 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吗?

排序?但那不是你应该怎么想的。相反,请考虑classobject之间的差异。 PascalTriangle是一个类,WTP是一个对象。对象是一个类的瞬间。

在这种情况下,该行代码声明了一个名为WTP PascalTriangle的变量。

作为类比,将一个班级视为房子的蓝图。把对象想象成一个真正的房子。从蓝图建造房屋的行为就像打电话给班级的建设者一样。它可能需要一些选项,并根据蓝图生成房屋的实例。

在这种情况下,实际上并没有调用构造函数。这看起来像这样:

PascalTriangle WTP = new PascalTriangle();

所以,继续这个比喻,在你的代码行中,房子实际上还没有构建。但是已经选择了特定的蓝图(类类型)并且保留了批次(存储器地址)。在后面一行:

WTP = new PascalTriangle(Integer.parseInt(args[0]));

房子是在那个地段建造的。