【问题标题】:Using a instance of a method使用方法的实例
【发布时间】:2016-12-06 06:11:11
【问题描述】:

我想知道是否有人可以帮助解释如何调用类的实例。

例如,最初我有一个名为“Driver”的文件

然后它有一个 main 方法,其中包含文件运行所需的所有实例。

然后在该主文件中访问另一个名为“游戏”的文件。

所以当我运行具有以下代码的程序“驱动程序”时:

import java.util.*;

public class Driver
{

      public static void main (String[] args)
      {
  
            GameRunner roul = new GameRunner ();
       }
}

然后调用我有类似的其他文件的实例。另外为了使代码正常工作,我应该有如下主要方法: 导入 java.util.*;

public class Driver
{

      public static void main (String[] args)
      {
           Scanner in = new Scanner(System.in);
           int number = 3;
           int userChoice = 0;
           GameRunner roul = new GameRunner ();
       }
}

然后我的另一个文件有类似的内容: 导入 java.util.*;

class GameRunner
{   
     public static void roul(Scanner in, int number, int userChoice)
     { 

猜测这仍然是错误的,因为驱动程序类应该只有:

  GameRunner roul = new GameRunner ();

我知道很难解释我在问什么。我希望有人能理解。

谢谢。

【问题讨论】:

  • 没有“方法的实例”之类的东西,只有类的实例(有可以调用的方法)。
  • 啊,这就是我的意思:)
  • 正如@Travis 建议的那样,恐怕您问题的最佳答案是阅读更多教程。 StackOverflow 答案中没有足够的空间来解释所有这些概念。
  • 即使同一个类的不同实例共享方法代码,只是每个实例中的变量是在不同的堆栈中创建的。

标签: java class methods


【解决方案1】:

我强烈推荐阅读 Java 开发者的这篇(官方)教程:https://docs.oracle.com/javase/tutorial/java/concepts/index.html

(不,认真的。阅读该教程。我链接到专门针对面向对象编程的部分,该部分解释了您的问题。这非常有用)。


现在更直接地回答您的问题。

您的roul 方法是“类方法”(而不是“实例方法”),因为它的定义前面有关键字static。这意味着您使用类的名称调用它,而不是使用您创建的特定对象(实例)。

因此,为了调用GameRunnerroul 方法,请在您的main 中执行以下操作:

GameRunner.roul(in, number, userChoice);

没有必要实例化GameRunner,除非它具有您需要调用的非静态方法。因此,除非是这种情况,否则不要执行以下操作:

GameRunner roul = new GameRunner ();

最后,请注意,参数的名称不必与参数的名称相同,只要它们的 类型 相同即可。 “参数”是您在定义方法时使用的变量。 “参数”是您传递给方法的实际变量。

例如,方法定义有参数:

public static void myMethod(int parameter1, int parameter2) {
  /* do stuff */
}

而方法调用的参数可以具有不同的名称:

MyClass.myMethod(number1, number2);

【讨论】:

    【解决方案2】:
    public class Driver {
    
        public static void main (String[] args) {
            Scanner in = new Scanner(System.in);
            int number = 3;
            int userChoice = 0;
            GameRunner runner = new GameRunner ();
    
            // The following line will invoke the target method of your game runner instance.
            runner.roul(in, number, userChoice);
        }
    }
    

    【讨论】:

    • 谢谢,我看到这个就明白了!谢谢
    【解决方案3】:

    将类和方法声明为静态,然后像这样调用:

    GameRunner.roul(); // pass in arguments if needed
    

    【讨论】:

    • 类不需要声明为静态的。 Java 没有静态外部类。
    【解决方案4】:

    public static void run() 是您的应用程序的入口点,您不需要另一个入口点。看来您需要复习面向对象的基础知识。

    如果您正在尝试制作游戏,也许您可​​以从教程开始?我建议使用轻量级 Java 游戏库之类的游戏库。去谷歌搜索一些教程。

    【讨论】:

    • public static void run() 在哪里定义?它绝对不是任何Java程序的入口点。
    • 那么像 game.roul(in, number) 一样的东西会去哪里呢?
    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多