我们可以改变java的主要方法吗?

时间:2014-01-10 11:37:51

标签: java string object parameters main

Java中的main方法将 String [] 作为main方法的输入参数,但我想将 object 作为参数传递。 Java和所有命令行参数化语言只接受有意义的String数组,因为我们使用命令行调用的能力使我们能够输入可由Java中的 String对象表示的文本

这就是我们过去常用的方法:

public static void main (String[] args) {

for (String text: args) {
System.out.println(text);
}
}

如果我们需要传递整数值,我们需要使用解析  从中获取数值的方法。

 try {
 Arg = Integer.parseInt(args[0]);
 } catch (NumberFormatException e) {
 System.err.println("Number format mismatch");
 }

如果我们需要将整个对象作为参数传递给类怎么办?

此致

5 个答案:

答案 0 :(得分:2)

没有。你无法改变它。这是因为命令行实际上只是一个文本块。命令行尝试找出文本的数据类型是没有意义的。

这意味着命令行需要事先了解即将运行的任何数据类型,并以某种方式创建(在Java的情况下)正确的对象并投射到它们。

答案 1 :(得分:2)

除了字符串之外没有办法传递任何东西,因为在命令行中你实际上只能键入字符串。

答案 2 :(得分:2)

据我所知,您只能传递给String格式的主要知识。这是因为传递给main方法的东西来自System.in,可以通过随机用户输入或管道之类的东西,从而将Strings从一个Java程序传递到另一个Java程序。

话虽如此,您可以做的是在对象类中创建一个方法来解析该对象的String形式以重新创建该对象的原始版本

例如:

public class myRectangle
{
     private int length;
     private int width;

     public myRectangle(int inLength, int inWidth)
     {
         this.length = inLength;
         this.width = inWidth;
     }

     // the rest of your class
     public String toString()
     {
          return "[" + length + ", " + width + "]";
     }

     public static Rectangle parseString(String input)
     {
          int firstBracketIndex;
          int commaIndex;
          int lastBracketIndex;

          firstBracketIndex = 0;
          commaIndex = input.indexOf(",");
          lastBracketIndex = input.length() - 1;

          String aWidth = input.substring(firstBracketIndex, (commaIndex - 1));
          String aLength = input.substring((commaIndex + 2), lastBracketIndex);

          return new Rectangle(Integer.parseInt(aWidth), Integer.parseInt(aLength));
      }

 }

这样的事可以解决你的问题。 (在我的代码中可能有一些错误,我写的很长,所以很明显,但你明白了!)

关键是,您创建的解析方法与toString方法相反,以便您可以从命令行中删除类的副本。

答案 3 :(得分:2)

这是不可能的。但是,作为一种解决方法,您可以将逻辑从main移动到接受对象或您需要的任何单独函数。然后main只解析它的字符串参数并调用你的新函数,也可以直接调用它。

答案 4 :(得分:2)

您只能将字符串传递给main。但是,没有什么能阻止String成为XML / JSon的一大块/然后你将其解析成一个对象。

例如在JAXB中:

 // Needs xml annotations etc
 class T {
 }

 public static void main(String[] args) {
       T t=null;
            JAXBContext jc = JAXBContext.newInstance(T.class); 
            try ( StringReader sr = new StringReader(args[0])) {
                t = (T)jc.createUnmarshaller().unmarshal(sr);   
            } catch (JAXBException ex) {
                // handle failure
            }
  }