What will public static int[] main (int[] ) return and where?

class Half  {
    public int evaluate(int arg) {
        return arg/2;
    }
}

public class Box {

     public static int [] main (int[] arrIn) {

        int[] arrOut = new int[arrIn.length];
        Half func = new Half();

        for (int i=0; i< arrIn.length; i++)
            arrOut[i] = func.evaluate(arrIn[i]);
        return arrOut;
}
}

So contents of arrOut are the elements in arrIn divided by two. I want to take integer array from command line arguments and print array with new contents to screen.(I don't want to take it as string values then convert to int and blah blah) Is there any way to take direct integers as arguments?

Secondly the above code gives an error.(Obviously)

Error: Main method not found in class Box, please define the main method as:
   public static void main(String[] args)

Which brings me to my next question.

Should it always be public static void main(String[] args)? Can't it be public static int main with some arguments other than string type?(Don't explain the static part.. As per my understanding main method needs to be invoked without an object which is why it is static. but if it is forced(somehow) to return an integer, where will it return it?(I mean to which method? or will it directly print to the screen?)I know it doesn't print to the screen (duh!) but then where is the control returned basically after main method finishes execution?

Jon Skeet
people
quotationmark

Should it always be public static void main(String[] args)?

Yes, if you want it to act as an entry point.

Can't it be public static int main with some arguments other than string type?

No. Section 12 of the JLS explains JVM start-up, and includes this in 12.1.4:

Finally, after completion of the initialization for class Test (during which other consequential loading, linking, and initializing may have occurred), the method main of Test is invoked.

The method main must be declared public, static, and void. It must specify a formal parameter (ยง8.4.1) whose declared type is array of String.

Basically, the only bits which are optional are:

  • The name of the parameter
  • Whether you make it a varargs parameter or not

You can overload the method if you want, providing extra main methods with different parameter types and possibly a return value - but only the void one with a String[] parameter will be treated as an entry point.

I want to take integer array from command line arguments and print array with new contents to screen.(I don't want to take it as string values then convert to int and blah blah) Is there any way to take direct integers as arguments?

No. You have to do it yourself. It's pretty trivial though:

int[] integers = new int[args.length];
for (int i = 0; i < args.length; i++)
{
    integers[i] = Integer.parseInt(args[i]);
}

people

See more on this question at Stackoverflow