2014-02-08 5 views
1
public class Test{ 
int Trails; 
int Days 
    public static void main (String []args){ 
    if(args.length!=0){ 
     numT = Integer.parseInt(args[0]); 
     numD = Integer.parseInt(args[1]); 
    } 
    Trails=numT; 
    Days=numD; 
    } 
} 

Я пытаюсь получить входные данные из командной строки, а затем сохранить их в глобалы, но поскольку они выполняются в основном, он хочет, чтобы я сделал все статичным. Есть ли другой способ, которым я должен это делать, чтобы я мог делать что-то с данными?Аргументы командной строки Java

+0

Нет, он не хочет, чтобы вы делали все статичным. – Ingo

+0

Dude u нужен объект, поскольку переменные экземпляра относятся к объекту вместо статических переменных или методов, которые по существу являются членами класса, и вам не нужен объект для их использования. –

+0

Оба ответа не имеют правильной проверки параметров. Вы ожидаете два параметра. Итак, почему вы только проверяете, что установлен хотя бы один параметр? – Hannes

ответ

3

Метод main(String[] args) вызывается JVM «статически», и фактический объект не создается. Но нет никаких оснований против создания объекта класса ограждающей как таковой:

public class Test{ 
    int Trails; 
    int Days 

    public static void main (String[] args){ 
     //Create object of type Test 
     Test t = new Test(); 

     if(args.length!=0){ 
      t.Trails = Integer.parseInt(args[0]); 
      t.Days = Integer.parseInt(args[1]); 
     } 
    } 
} 

Конечно, вы можете также передать параметры через конструктор, как, например:

public class Test{ 
    int Trails; 
    int Days 

    public Test(int numT, int numD){ 
     Trails = numT; 
     Days = numD; 
    } 

    public static void main (String[] args){ 
     int numT; 
     int numD; 

     if(args.length!=0){ 
      numT = Integer.parseInt(args[0]); 
      numD = Integer.parseInt(args[1]); 

      //Create object here 
      Test t = new Test(numT, numD); 
     } 
    } 
} 
0
public class Test{ 
int Trails; 
int Days 
    public static void main (String []args){ 
    if(args.length!=0){ 

     Test test = new Test(); 
     test.Trails= Integer.parseInt(args[0]); 
     test.Days= Integer.parseInt(args[1]); 
    } 
} 

Вам нужен объект для работы с переменным экземпляром

0

Вы должны передать их в экземпляр объекта, который имеет конструктор или метод, который принимает эти аргументы командной строки, затем устанавливает свой переменный экземпляр (скажем, , trails и days) в конструкторе или методе. Единственный способ иметь переменные экземпляра - иметь экземпляр объекта. Также обратите внимание, что вы не должны использовать имена переменных. Соглашение заключается в использовании camelCase с первой буквой строчной буквы. Имена классов начинаются с заглавной буквы.

0

Вы путают понятие объекта с концепцией статического метода:

У вас может быть много экземпляров таких объектов, как Test (test2, test2 и т. д.), каждый экземпляр будет иметь свою собственную жизнь: в реальной жизни аналогия имеет много автомобилей (экземпляры) класса (toyota corolla), например: все автомобили ar e, как описано в модели sepecification (класс)

Затем у вас есть статические методы, которые не используют конкретный экземпляр: например, security ckecks может быть статическим методом: многие автомобили проходят через уникальную безопасность проверить (что не является функцией вы можете запустить из вашего автомобиля: это не зависит от экземпляра)

вы можете использовать этот пример, чтобы лучше понять

public class Test{ 
    int trails; 
    int days; 

    public String toString() { 
    return "trails :"+ trails +", days : "+ days; 
    } 
} 

public class Launcher{ 
    public static void main (String []args){ 
    if(args.length!=0){ 
     Test test = new Test(); 
     test.trails= Integer.parseInt(args[0]); 
     test.days= Integer.parseInt(args[1]); 

     Test test2 = new Test(); 
     test2.trails= 5; 
     test2.days= 2; 

     Command cmd = new Command(); 
     cmd.doSomething(test); 
     cmd.doSomething(test2); 
     cmd.doSomething(test); 
    } 
    } 
} 

public class Command { 
    Test lastTested; 
    public void doSomething(Test data) { 
    lastTested = data; 
    System.out.println("working with "+ lastTested); 
    } 
} 

в приведенном выше примере, вы создаете экземпляр теста, который вы заполняете данными. Затем вы создаете экземпляр Command, который сохранит в своем состоянии последний выполненный экземпляр Test, а затем распечатает данные тестового экземпляра с помощью метода toString().

Вы можете создать второй экземпляр Test с другими данными и передать его одному и тому же cmd (метод экземпляра команды doSomething()). Затем вы увидите, что экземпляр, который находится внутри cmd, изменился, но возврат к вашему испытанию первого экземпляра сохранил значения, как ожидалось

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