需要一些帮助才能理解教程代码:Java - 类构造函数/初始化程序

时间:2018-01-08 21:08:36

标签: java class methods

我一直在关注Pluralsight上的一些基本的Java教程,我已经达到了一个我不太明白导师试图解释什么的点,他似乎很快就会快速地进行一些练习这有点难以理解。

我有2个课程,一个是“主要”和一个“数学执行”。我完全理解MathExecution中发生了什么,但是我不太了解Main的某些方面,我将会介绍。我将在下面粘贴这两个类:

Main.java:

public class Main {

    public static void main(String[] args) {

//        double[] value1 = {100.0d, 18.0d, 30.0d,  27.0d};
//        double[] value2 = {50.0d, 2.0d, 15.0d, 99.0d};
//        char[] opCodes = {'d', 'm', 's', 'a'};
//        double[] result = new double [opCodes.length];

        MathEquation[] equations = new MathEquation[4];
        equations[0] = create(100.00d, 50.0d, 'd');
        equations[1] = create(25.0d, 92.0d, 'a');
        equations[2] = create(225.0d, 17.0d, 's');
        equations[3] = create(11.0d, 3.0d, 'm');


        for (MathEquation equation: equations){
            equation.execute();
            System.out.print("Result: ");
            System.out.println(equation.getResult());
        }

    }

    public static MathEquation create(double value1, double value2, char opCode){
        MathEquation equation = new MathEquation();
        equation.setValue1(value1);
        equation.setValue2(value2);
        equation.setOpCode(opCode);

        return equation;
    }
}

MathExecution.java:

public class MathEquation {


    private double value2;
    private double value1;
    private char opCode;
    private double result;

    public double getValue1() {return value1;}
    public double getValue2() {return value2;}
    public double getOpCode() {return opCode;}
    public double getResult() {return result;}

    public void setValue1(double value1) {this.value1=value1;}
    public void setValue2(double value2) {this.value2=value2;}
    public void setOpCode(char opCode) {this.opCode=opCode;}






    public void execute(){

        switch (opCode){
            case 'd':
                result = value2 != 0.0d ? value1 / value2: 0.0;
                break;

            case 'm':
                result = value1 * value2;
                break;

            case 's':
                result = value1 - value2;
                break;

            case 'a':
                result = value1 + value2;
                break;

            default:
                System.out.println("Something Broke!");
                result = 0.00d;
                break;
        }

    }
}

我不太明白(我认为我不这么做)这里到底发生了什么:

 MathEquation[] equations = new MathEquation[4];

在查看它时,我假设我们正在创建一个新的MathEquation实例,调用是“方程式”并指定我们将传递4个数组(我们稍后会这样做)。

我要稍稍跳过......

我不太明白这里发生了什么:

public static MathEquation create

我理解我正在声明一个方法(?),它是公开的,这意味着它可以从任何地方访问(?),我不知道静态意味着什么。它被称为“创造”,但我不知道MathEquation在此声明中扮演的角色。

我明白这个方法的主体是怎么回事,

MathEquation equation = new MathEquation();
equation.setValue1(value1);
equation.setValue2(value2);
equation.setOpCode(opCode);

return equation;

我们正在创建另一个MathEquation实例并将其称为等式。然后传递声明“create”时指定的参数。

我不认为我理解return语句是如何完全运作的,为什么它返回整个类(方程式)?

查看“for”循环。我看到它使用之前返回的“等式”,但我不明白这里的语法:

MathEquation equation: equations

我想我理解最后一行......

System.out.println(equation.getResult());

我们只是打印getResult,它只是MathExecution类中的一个公共方法,它返回私有变量的值。

如果有人能够提供一些有关正在发生的事情的信息,我将非常感激。我已经重新播放了视频并尝试使用代码,但我似乎无法理解它是如何连接在一起的。

或者,如果你能指出我可以在回到这个例子之前获得更好理解的任何资源,那也是完美的。

非常感谢您阅读。

3 个答案:

答案 0 :(得分:2)

以下是我的答案:

  1. 阵列创建
  2.   

    我不太明白(我认为我不这么做)这里到底发生了什么:

    MathEquation[] equations = new MathEquation[4];
    
      

    在查看它时,我假设我们正在创建一个新的MathEquation实例,

    不,代码会创建一个包含四个引用的数组,并调用该数组equations。创建了一个对象,数组及其索引都设置为null

    1. 方法声明
    2.   

      我不太明白这里发生了什么:

      public static MathEquation create
      
        

      我知道我正在声明一个方法(?),它是公开的,这意味着它可以从任何地方访问(?),我不知道静态意味着什么。

      这是超级基础,你应该再次阅读教程。 static表示方法(或字段)未附加到类的任何实例。相反,它对系统中的所有对象都是通用的(全局的)。 MathEquation是方法的返回类型:它返回一个MathEquation对象。

      1. 方法调用
      2. 这里的东西也是超级基础的,它只是调用方法。

        MathEquation equation = new MathEquation();
        equation.setValue1(value1);
        equation.setValue2(value2);
        equation.setOpCode(opCode);
        
        return equation;
        
          

        我们正在创建另一个MathEquation实例并将其称为等式。然后传递声明“创建”时指定的参数。我不认为我理解return语句是如何完全工作的,为什么它返回整个类(方程式)?

        创建MathEquation的另一个实例是正确的。传递参数......好吧,但是更简单的是它只是在刚刚创建的对象上调用方法。它使用的是在调用create时给出的参数,当然。 return语句只能选择返回“整个类”或原语(如intchar),这是您唯一的选择。实际上,只需将引用返回给整个对象,它就会返回“整个对象”。

        1. 对于-每个
        2.   

          查看“for”循环。我看到它使用之前返回的“等式”,但我不明白这里的语法:

          MathEquation equation : equations
          

          这只是一个for-each循环,请阅读文档:https://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

          1. 印刷品
          2.   

            我想我理解最后一行......

            System.out.println(equation.getResult());
            
              

            我们只是打印getResult,它只是MathExecution类中的一个公共方法,它返回私有变量的值。

            正确。

答案 1 :(得分:0)

我会用简单的语言解释它。如果您找到了一个您不了解或不理解的单词,请在Java Tutorials中查找。

作为基础,我们将首先查看create方法。第一行(签名)说的是,你有一个可以从任何地方调用的方法(public),不需要实例来调用它(static,我认为你应该jsut查看the definition,我现在无法提出简单的解释),返回MathEquation,称为create,需要三个parameters作为输入才能创建返回值。

public static MathEquation create(double value1, double value2, char opCode)

然后该方法继续:

    // take the MathEquation class and create an instance by using the constructor
    MathEquation equation = new MathEquation();

    // give the equation the necessary values it needs to be executed later
    equation.setValue1(value1);
    equation.setValue2(value2);
    equation.setOpCode(opCode);

    // return that equation to the caller of the method for them to use
    return equation;
}

好的,主要方法是怎么回事?

首先,我们创建一个数组(它是一种列表),它有4个MathEquation的空间,称为equations。现在空了!

    MathEquation[] equations = new MathEquation[4];

这就是为什么我们必须在这里填写它。我们使用上面的create方法获取MathEquation的4个实例,并将它们放入数组的空插槽(0-3)中。

    equations[0] = create(100.00d, 50.0d, 'd');
    equations[1] = create(25.0d, 92.0d, 'a');
    equations[2] = create(225.0d, 17.0d, 's');
    equations[3] = create(11.0d, 3.0d, 'm');

然后我们接受我们的数组,使用for循环来查看其中的每个方程,并做一些事情。 for循环如下所示:"对于等式中的每个等式"

    for (MathEquation equation: equations) {

对于等式,我们要求它自己解决。这将把结果存储在方程式对象中。然后,我们将该结果的等式打印出来并将其打印到控制台。

        equation.execute();
        System.out.print("Result: ");
        System.out.println(equation.getResult());

答案 2 :(得分:0)

  

在查看它时,我假设我们正在创建一个新的MathEquation实例,调用的是#34;方程式"并指定我们将传递4个数组(我们稍后会这样做)。

不,你实际上是在创建一个包含4个项目的单个数组。它不会创建MathEquation(或数组中的任何项目)的任何实例 - 您只需创建数组。

以这种方式思考:假设我在酒店预订团体。我打电话给酒店告诉他们将有4个家庭进来。经理"搁置" 4个房间彼此相邻。显然,经理"搁置" 4个房间实际上并没有创造房间或家庭,也没有让家庭神奇地出现在房间里。它只是说,一旦家庭到来,经理打算把它们放在那里。

一个有趣的特征是这些家庭彼此相邻:如果您知道第一个家庭所在的房间,您可以立即计算其他家庭所在的房间。例如,如果家庭1在房间100,那么显然家庭2必须在101房间,家庭3必须在房间102,家庭4必须在房间103.

现在,这里是static的类比 - 假设酒店连锁店有一个网站,可以让您进行预订。该网站与整个酒店链相关联,只是该酒店。这就是static所做的事情 - 它与班级(通过类比,整个连锁酒店)相关联,而不仅仅是那个特定的对象(或酒店)。