【问题标题】:Trouble calling constructor with input parameters from main使用 main 的输入参数调用构造函数时遇到问题
【发布时间】:2020-03-12 21:36:11
【问题描述】:

我正在尝试使用 Java,并使用面向对象的原则创建一个小型扑克游戏。但是,我遇到了从 main 调用构造函数的问题。

class Card
{
    private char face;
    private char suit;

    Card(char face, char suit)
    {
      this.face = face;
      this.suit = suit;
    }

    @Override
    public String toString()
    {
      return Character.toString(face) + Character.toString(suit);
    }
}

public static void main(String[] args)
{
    Card oneCardHand = new Card('A', 'c');

    System.out.println("Made it this far");
    System.out.println(oneCardHand);
}

我收到以下错误:

非静态变量 this 不能从静态上下文中引用

所以我觉得我要么错过了一个愚蠢的语法,要么更可能的是,没有理解关于静态和非静态变量的关键见解。

【问题讨论】:

    标签: java constructor static non-static


    【解决方案1】:

    Card 类被声明为实例内部类。要么:

    • 将其转换为静态内部类:
    static class Card
    
    • 或者,创建外部类的实例来获取内部类的实例(假设外部类被称为Outer):
    Outer.Card oneCardHand = new Outer().new Card('A', 'c');
    
    • 或者,移动Card类中的main方法。

    • 或者,将 Card 类移动到单独的源文件 (Card.java),这通常是更可取的方法。


    阅读有关嵌套类的更多信息:

    【讨论】:

    • 我将两个类包裹在一个更大的 Deck 类中,所以 main 实际上在 Deck 类中。但是将卡类更改为静态修复了它。您能否详细说明为什么将 Card 类更改为 static 可以解决此问题?
    【解决方案2】:

    您可以在 .java 文件中创建单独的类

    • Application.java 中的公共类 Application,其中包含 main 方法
    • Card.java 中的公共类 Card

    您也可以制作单独的包,但这可能是为了以后...

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多