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

Posted

技术标签:

【中文标题】如何在主方法中从类中调用构造函数【英文标题】:How to call a constructor from a class, in main method 【发布时间】:2013-08-27 19:35:58 【问题描述】:

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

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

【问题讨论】:

在 Java 中,类名应以大写字母 (MpgCalculator) 开头。这不是语言要求,但它是一种通用约定,它可以让您更轻松地阅读代码。 【参考方案1】:

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

mpgCalculator calc = new mpgCalculator();

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

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

【讨论】:

【参考方案2】:

补充问题;您似乎正在使用内部类。如果没有 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 的回答。

【讨论】:

喜欢这个? class Example public static void main (String[] args) public class 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; 上帝,我很讨厌这个。【参考方案3】:

由于mpgCalculator(应重命名为MpgCalculatorMPGCalculator 以区别于变量名)是Example 的内部类,因此您需要一个外部类实例来实例化它。

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

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

public static class MpgCalculator 
    // ...

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

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

【讨论】:

以上是关于如何在主方法中从类中调用构造函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中从另一个构造函数调用一个构造函数?

如何在 Java 中从另一个构造函数调用一个构造函数?

在 perl 中调用基本构造函数

为啥从类构造函数调用的方法应该是最终的? [复制]

通过其他类构造函数在主方法中创建对象时访问对象属性

如何使用 Visual Studio(和/或 ReSharper)从类字段生成构造函数?