首页 > 解决方案 > 使用 main 的输入参数调用构造函数时遇到问题

问题描述

我正在尝试使用 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 不能从静态上下文中引用

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

标签: javaconstructorstaticnon-static

解决方案


该类Card被声明为实例内部类。任何一个:

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

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


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


推荐阅读