2013-12-23 4 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 
    } 
} 

Я понимаю, что я не могу назвать, не статический метод, но я думал о обходным: Будет ли это работать, если я назначить что-то к CommandLine и ProcessCommand , как если бы это была неинициализированная переменная в статическом контексте. Как так:

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

Смежные вопросы