2013-12-23 62 views
-3
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

请尝试提供更完整的代码示例,并尝试澄清一点说明。现在确实很难遵循。 – Dukeling

+1

不要问含糊的假设性问题。写下你想问什么,看看结果是什么。 –

回答

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应该叫)和类似的方法,静态的。并且请勿使用,请使用method()

我认为你不可能每次都编译这段代码。那么现在就做,看看你找到了多少错误(如果这是你的真实代码,而不是一个随便的猜测)。

+0

就像我说的那样,这个数字的部分只是一个例子。即使你声明了一个变量,但不要初始化它,如果你正在使用静态方法,那么你会得到一个错误,这就是我想要演示的东西,通过将它初始化为一些值来添加一个工作。 – Oak

+0

问题是要调用一个方法,我调用它们的方法不能是静态的,但要运行,我需要它是静态的 – Oak

+0

即使调用方法是静态方法,也可以调用方法。只是让方法本身是静态的。事实上,为了避免混淆,最好让所有东西都是静态的。 – tbodt