【问题标题】:I have trouble with static main method and inputting non-static values [duplicate]我在使用静态主要方法和输入非静态值时遇到问题 [重复]
【发布时间】:2013-05-05 01:39:37
【问题描述】:

我正在做一个学校项目,开发一个国际象棋游戏。我有我的板子,它创建数组并用碎片填充板子。

现在,我想在游戏类中实例化一个新棋盘并使用控制台输入玩家动作。为了使这尽可能简单,我的麻烦是输入非静态变量。

例如:

public class Test extends ConsoleProgram{

public static double a1;

 public static void main(String[] args) {
    a1 = readLine("Insert value of a1"); 
    System.out.println(a1);
 }
} 

more info on readLine() here

正如您可能看到的,这不起作用,因为 java 正在抱怨 cannot make static reference to the non-static method readLine()

我该如何解决这个问题?也许有一些非常基本的东西我只是不明白..

与往常一样,非常感谢您快速而有见地的回答!

【问题讨论】:

  • 你为什么不把readLine()设为静态?此外,由于您没有显示相关代码(readLine()),因此无法真正回答您的问题。
  • 啊哈,我会尝试编辑它!谢谢
  • 而且,如果您真的在测试您的代码,请使用 JUnit。它会得到回报。

标签: java


【解决方案1】:

如果您不想将 readLine 方法设为静态,请调用实例:

public static void main(String[] args) {

    Test me = new Test();

    a1 = me.readLine("Insert value of a1");

    System.out.println(a1);

 }

【讨论】:

  • 嘿!我的大脑有点融化,试图理解发生了什么。为什么这样可以?你能像我五岁一样向我解释这是怎么回事吗?非常感谢!
  • @tore - “测试”是你的班级名称。当您在该类中定义方法而不将其标记为“静态”时,它将成为实例方法。这意味着只有当你有你的类的一个实例(即一个“对象”)时你才能调用它。 new Test() 创建您的类的一个实例(其中将包含您可能定义的任何非静态字段)。我们将该实例的“引用”分配给me(当然也可以是aardvark)。现在我们可以使用me 来引用那个实例,然后me.readLine 来引用实例方法。
  • @tore - (这些是非常基本的“面向对象”概念。你需要找到一个可以有组织地学习它们的参考资料——这不是你应该“学习的东西”在街上”。)
【解决方案2】:

将readline 定义为static 或

创建一个类的对象,然后调用方法,new Test().readline();

【讨论】:

  • 嘿!你是指什么课?具有 main 方法的类?谢谢!
  • @tore 不,使用 readLine() 方法的类
【解决方案3】:

将readLine()`设为静态即可访问

如果你将方法设为静态,那么你可以在 main() 方法中使用它

否则为 Test 类创建一个对象然后使用它

【讨论】:

    【解决方案4】:

    我发现的最简单的解决方法是在 main 方法中实例化对象,然后从构造函数中调用相关方法。

    public static void main(String[] args)
    {
         new ClassThing();
    }
    
    public ClassThing()
    {
        // Make your method calls here.
    }
    

    这意味着您可以访问实例方法,而无需从static context 调用所有内容。

    【讨论】:

      【解决方案5】:

      在main中创建Test实例并调用它的实例方法。

      public class Test extends ConsoleProgram {
          public double a1;
      
          public void run() {
              a1 = readLine("Insert value of a1");
              System.out.println(a1);     
          }
      
          public static void main(String[] args) {
              Test main = new Test();
              main.run();
          }
      
      }
      

      【讨论】:

      • 感谢您的意见!你能告诉我你为什么使用run()方法吗?那是不是有什么特别之处,还是你可以给它取个别的名字?
      • 名称run 是任意的。您可以选择任何方法名称。方法也可以是private。
      【解决方案6】:

      您应该实例化具有readLine() 方法的类的一个对象。

      如果该类的名称是 Reader,您应该执行以下操作:

       Reader r= new Reader();
       a1 = r.readLine("Insert...");`
      

      【讨论】:

        猜你喜欢
        • 2016-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多