Передача переменных в основную функцию в другом классе JAVA

В моей основной функции класса Helloworld.java я создал строку или объект. Затем я создал еще один класс HelloAnotherClass.java. Я хочу передать свою переменную из Helloworld main() в основную функцию HelloAnotherClass.java.

package helloworld;
        public class HelloAnotherClass {
           public static void main(String[] args) throws IOException, ParseException {
        //... for example print passed variables
        }

Как я могу отправить переменные из HelloWorld main() в HelloAnotherClass main(), используя аргументы или другую структуру данных, а затем снова вернуть их в HelloWorld.java? Вкратце, я хочу использовать функцию main() другого класса Java в качестве функции в классе HelloWorld.

это пример кода, который я написал

    HelloWorld { 
    /** * @param args the command line arguments */ 
    public static void main(String[] args) { 
    HelloAnotherClass.main("example"); 
    } 

public class HelloAnotherClass { 
    public static void main(String coming) throws IOException, ParseException { 
System.out.println(coming); 
    }

person Saliha Uzel    schedule 14.10.2012    source источник


Ответы (4)


Это зависит от того, как вы хотите запустить другой класс.

Если вы хотите запустить его в текущей JVM, то вы делаете это очевидным образом:

  • Создайте массив строк, содержащий аргументы.
  • Вызовите метод main с массивом в качестве параметра.

Если вы хотите запустить его в новой JVM, вы используете System.exec(...) (или эквивалент) с командной строкой, которая выглядит так, как если бы вы сами запускали java из командной строки. (Если строки аргументов содержат пробелы, вы хотите использовать конкретную установку Java, вы хотите использовать те же параметры JVM и т. д., это будет сложнее.)

Оба подхода имеют преимущества и недостатки:

  • Вызов других классов main дает вам быстрое время "запуска", но:

    1. the other class won't have an independent set of System.in/out/err streams because it shared statics with the original main class,
    2. если он вызывает System.exit(), вся JVM выйдет,
    3. если он ведет себя неправильно, исходный класс main, вероятно, не сможет от него избавиться, и так далее.
  • Запуск отдельной JVM приведет к значительному замедлению времени запуска, но дочерняя JVM не сможет мешать работе родительской JVM.


Кстати, причина того, что ваша первоначальная попытка не удалась, заключается в том, что вы передаете строку, а не массив строк. Компилятор не позволит вам сделать это...

person Stephen C    schedule 14.10.2012

Если вы запускаете две независимые программы и хотите, чтобы они обменивались данными, прочитайте Взаимодействие между процессами< /а>.

person Eng.Fouad    schedule 14.10.2012

Это HelloWorld с некоторыми аргументами (я передал «Hello Crazy World»)

public static void main(String args[]) {
    //call static main method of Main2 class
    HelloAnotherWorld.main(args);
      //Modifcation made on Main2 is reflected
    System.out.println(args[1].toString());
}

}

Это HelloAnotherWorld

public static void main(String args[]) {        
    args[1]="foobar";
}

Так как main является статическим в HelloAnotherWorld, вы можете вызывать метод main как HelloAnotherWorld.main("массив идет сюда"); Также обратите внимание, что main возвращает void, поэтому любая попытка передать примитивы и вернуть их будет безуспешной, если только вы не перегрузили основной метод.

person Jimmy    schedule 14.10.2012

По умолчанию main принимает аргумент как String[]. Обновите HelloAnotherClass, как показано ниже:

public class HelloWorld { 

   /** * @param args the command line arguments */ 
   public static void main(String[] args) { 
        HelloAnotherClass.main(new String[]{"example"}); 
   }
}

Если вы попытаетесь напечатать аргументы в классе HelloAnotherClass, это будет выглядеть так:

public class HelloAnotherClass { 

  public static void main(String[] coming) throws IOException, ParseException {  
    System.out.println(coming[0]); 
  }
}

Если вы хотите иметь другой основной метод с параметром String, это также можно сделать:

public class HelloWorld { 

    /** * @param args the command line arguments */ 
    public static void main(String[] args) { 
       HelloAnotherClass.main("example"); 
    }
 }

 public class HelloAnotherClass { 

    public static void main(String coming) throws IOException, ParseException {  
       System.out.println(coming); 
    }
 }

Пожалуйста, дайте мне знать, если вы ищете другие/дополнительные детали.

person Yogendra Singh    schedule 14.10.2012