Java 如何在main方法中从类调用构造函数

Java 如何在main方法中从类调用构造函数,java,methods,constructor,main,Java,Methods,Constructor,Main,我知道这可能是一个超级简单的问题,但我似乎一辈子都搞不懂 正如标题所述,我只想在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

我知道这可能是一个超级简单的问题,但我似乎一辈子都搞不懂

正如标题所述,我只想在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;
    }
  }
}

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

mpgCalculator calc = new mpgCalculator();
在这种特殊情况下,
compute
函数实际上与
mpgCalculator
的任何特定副本都不相关,因此,如果需要(
public static double compute
)。然后用另一种方法你可以说:

double kmpL = mpgCalculator.compute(mpg, size);

使问题更加复杂;您似乎正在使用内部类。如果不先有一个示例对象,就不能按照构建类的方式实例化该类

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

第一,静态内部类;本质上就像嵌套的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的回答进行操作。

因为,
mpgCalculator
(应该重命名为
mpgCalculator
mpgCalculator
以区分它与变量名)是
示例的内部类。
您需要外部类实例来实例化它

double value = new Example().new MpgCalculator().compute();
但是,这看起来像是一个实用程序类,在这种情况下,您可以通过使其
静态
来嵌套它

public static class MpgCalculator {
    // ...
}
然后,您可以创建它的实例,而无需创建外部类实例

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

在Java中,类名应该以大写字母(
MpgCalculator
)开头。这不是语言要求,但它是一种通用的约定,它使阅读代码变得更容易。像这样<代码>类示例{public static void main(String[]args){}public类mpgCalculator{mpgCalculator calc=new mpgCalculator();public double result=calc.compute(1.0,2.0);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;}}}}}天哪,我真是糟透了。