java中的类方法和构造函数混淆

时间:2013-12-24 22:08:33

标签: java class methods constructor

我有一个类,它有责任使用两个输入参数创建一个简单的方法。该方法需要用于在其他类中创建其他方法。我的问题是,我写它的方式看起来是否正确?当在另一个类中调用此方法时,它会是什么样的?

public class IntlDensity {

    static double p = PhysicalConst.pi; 

    public IntlDensity(double m, double r) {
    }

    public double irho (double mass, double rad) {
       return(mass/(((4.0/3)*p*Math.pow(rad, 3))));
    }
}

5 个答案:

答案 0 :(得分:3)

您可能想要做的是:

public class PhysicalBody {

    private double mass;
    private double rad;

    public PhysicalBody(double m, double r) {
        this.mass = m;
        this.rad = r;
    }

    public double getIrho() {
       return(mass/(((4.0/3)*PhysicalConst.pi*Math.pow(rad, 3))));
    }

    public double getMass() { return mass; }
    public double getRad() { return rad; }
}

这会创建一个新对象,存储您在构造函数中指定的massrad,然后您可以根据需要查询该对象的irho。请注意,我已将该类命名为更好地描述它包含的内容。考虑对象,而不是活动。

您现在可以根据需要添加更多方法。

一般来说,从另一个类中提取静态值并以你的方式复制它们是一个坏主意 - 只需要像我这里一样引用它或者进行静态导入,这样你就不需要PhysicalConst.所有的时间,但实际上仍然引用相同的值。

您还可以考虑使质量和rad保持不变,具体取决于您是否预期它们会发生变化。

答案 1 :(得分:2)

  1. 你的构造函数没用,因为你没有对传入的参数做任何事情。
  2. 不要创建引用现有其他静态字段的新静态字段
  3. Pi在Math中定义为常量,因此不要在其他包中定义
  4. Irho应该是静态的,因为它不使用该类的任何成员。
  5. 根据您的实际代码,您可能希望将质量等传递给构造函数,并且不要将任何内容传递给irho,尽管数学类通常只对静态字段和方法很好。

答案 2 :(得分:1)

首先,无论您是新手还是经验丰富的老手,您都会回顾代码并意识到它可能会更好。

在这种情况下,没有神奇的方法可以知道你是否可以“更好地”编写你的课程,但你提示最好的方法 - 你班级客户的观点。换句话说,想象一下使用IntlDensity的代码将如何显示。

一种方法是使用Test-Driven Development。这需要一些人习惯,但单元测试作为一般事项是改进类的API的好方法,因此它对其调用者有意义。

关于这个类我可以做的一点是你应该使用你的构造函数:

public class IntlDensity {
    private double mass;
    private double rad;

    public IntlDensity(double mass, double rad) {
      this.mass = mass;
      this.rad = rad;
    }

    public double irho() {
       return mass/(((4.0/3) * PhysicalConst.PI * Math.pow(rad, 3)));
    }
}

然后你的客户会这样做:

IntlDensity id = new IntlDensity(5, 10);
System.out.println(id.irho());

当然这取决于你想要做什么。这就是为什么考虑到你的来电者问题。

答案 3 :(得分:0)

我建议你的方法static如此 -

public class IntlDensity {
  private static final double PI = PhysicalConst.pi;     // A local PI constant?

  public static double irho(double mass, double rad) {   // Static
    return (mass / (((4.0 / 3) * PI * Math
        .pow(rad, 3))));
  }
}

答案 4 :(得分:0)

您是否有理由要实例化IntlDensity对象?如果没有,你可以让方法静态并调用它

...
IntlDensity.irho(5,2);

public class IntlDensity {

    static double p = PhysicalConst.pi; 

    public static double irho (double mass, double rad) {
       return(mass/(((4.0/3)*p*Math.pow(rad, 3))));
    }
}