2

我知道这可能是一个超级简单的问题,但我似乎无法为我的生活弄明白。

正如标题所述,我只想在 Main 方法中调用构造函数。

class Example{
  public static void main (String[] args)
  {
   //I want to call the constructor in the mpgCalculator class....
  }

  public class mpgCalculator {
    public double compute(double mpg, double sizeOfTank)
    {
      double mpL = mpg * 4;
      double tankSizeL = sizeOfTank * 4;
      double kmpL = mpL * 1.6;
      double result = kmpL / tankSizeL;

      return result;
    }
  }
}
4

3 回答 3

3

该类mpgCalculator只有默认构造函数,因为您没有定义一个。您不会手动调用构造函数;相反,您创建一个新对象并自动调用它。你可能想要这个:

mpgCalculator calc = new mpgCalculator();

在这种特殊情况下,该compute函数实际上与 的任何特定副本无关mpgCalculator,因此您可以根据static需要创建 ( public static double compute)。然后在另一种方法中,您可以说:

double kmpL = mpgCalculator.compute(mpg, size);
于 2013-08-25T02:21:56.293 回答
3

补充问题;您似乎正在使用内部类。如果没有 Example 的对象,您就无法以构建它的方式实例化该类。

编辑:两个可能解决您的问题的示例:

一、静态内部类;本质上类似于 C++ 的嵌套类。内部类不需要与另一个实例相关联。

public class InnerClassTest {
    public static void main(String[] args) {
        InnerClass test = new InnerClass();
    }
    public static class InnerClass {
        InnerClass() {
          System.out.println("test");
        }
    }
}

其次,从外部类实例化的复杂内部类。

public class InnerClassTest {
    public static void main(String[] args) {
        InnerClassTest example = new InnerClassTest();
        InnerClass test = example.new InnerClass();
    }
    public class InnerClass {

        InnerClass() {
            System.out.println("test");
        }

    }
}

如果您只需要一个实用功能,请按照 chrylis 的回答。

于 2013-08-25T02:23:55.720 回答
0

因为,mpgCalculator(应该重命名为MpgCalculatorMPGCalculator与变量名区分开来)是一个内部类,Example你需要一个外部类实例来实例化它。

double value = new Example().new MpgCalculator().compute();

但是,这似乎是一个实用程序类,在这种情况下,您可以通过 make 来嵌套它static

public static class MpgCalculator {
    // ...
}

然后您可以创建它的实例,而无需创建外部类实例。

double value = new MpgCalculator().compute();
于 2013-08-25T02:34:32.103 回答