使用Class.Method调用,用于非静态类/方法

时间:2013-12-23 01:02:41

标签: java class methods

public class MainClass { 
    public void main(String[] args) {
        Grid.simulator(args); //static method that I can actually call
        Engine.main;//what I want to call
    }
}

问题是:Engine.main不能是静态的。这就是原因:

class Engine {
    String command;
    public void main() {
        this.CommandLine(command); //Calls the Method which has the user input
        this.ProcessCommand(command); //Calls the Method that will process the input
    }
}

我知道我不能称之为非静态方法,但我正在考虑解决方法: 如果我将某些内容分配给CommandLineProcessCommand,就好像它是静态上下文中的非初始化变量一样。像这样:

class SomeClass {
    public static void main(String[] args) {
        int number = null; 
        number = System.Nextint;
        System.out.print(number);
    }
}
     //In this code, either don't put it as static OR initialize 'number', even if as null.

类似会为this.Something工作吗?如果是,那怎么回事?

1 个答案:

答案 0 :(得分:1)

你似乎以一种非常基本的方式对Java感到困惑。

  1. 在Java中,您通常使用大写字母命名方法而不启动它们。
  2. 如果main不是静态的,它将不会被调用,当您尝试运行该程序时,您将收到一条非常明确的错误消息。
  3. 无论是否有任何参数,您都必须在方法调用周围加上括号。您必须使用Engine.main()代替Engine.main
  4. 如果您尝试获取用户输入,则无法将该字符串传递给该方法,并希望该方法可以更改传递给它的内容。您需要返回它或在类变量中返回它。
  5. 无论您尝试多么努力,都无法将数字设置为null。实际上,此处不需要将号码设置为null。只需将其设置为System.Nextint
  6. 顺便说一下,将用户输入作为int更加复杂。

    Scanner in = new Scanner(System.in);
    int number = in.nextInt();
    
  7. 而且,你真正的问题:只需要getInput(应该调用CommandLine)和其他静态的方法。并且请勿使用this.method(),请使用method()
  8. 我认为你不可能每次都编译这段代码。好吧,现在就看看你发现了多少错误(如果这是你的真实代码,而不仅仅是一个随便的猜测。)