Can a main method in Java return something?

Java

Java Problem Overview


I went through an interview recently and they ask me two questions in core Java.

Q 1.

> Can we write a java class with: > > public static int main(String[] args){ > System.out.println("Hello");

I answered: No. The compiler won't compile it as it is expecting the return type of main to be int, though we can overload it.

Q 2: The next question I was unable to answer.

> Write a program so that your Java main method could return something. > > I.e. how can you make public static void main([] args) to return something?

Can any body help me to answer this?

Java Solutions


Solution 1 - Java

> Q 1. Can we write a java class with : public static int main(String[] args){

Yes, you can but you can't run that Java class.

Example class:

class MainTest {

        public static int main(String[] args) {
                return 1;
        }
}

You will receive an error message when trying to run it:

Error: Main method must return a value of type void in class MainTest, please 
define the main method as:
   public static void main(String[] args)

> Q 2: Next question I unable to answer. He asked write a program so > that your java main method could return something.

You can use System#exit(int) to quit your program with a specific exit code which can be interpreted by the operating system.

Solution 2 - Java

Typically, in languages where main returns int (such as C and C++) the return code of main becomes the exit code of the process, which is often used by command interpreters and other external programs to determine whether the process completed successfully. To achieve the same effect in Java, use the System.exit method (analogous to the standard C function exit), like so:

public static void main(String[] args) {
  System.exit(42);
}

Quoting the Java documentation linked above:

> Terminates the currently running Java Virtual Machine. The argument serves as a status code; by convention, a nonzero status code indicates abnormal termination.

Solution 3 - Java

One can not return a value from a Java main function. Programs can however return a status code.

Try the following to exit with an int status in Java System.exit(45)

Solution 4 - Java

One way of doing such thing is by modifying the values of args[i] for i smaller than args.length, at the interior of method main.

Example:

public class Test{
//
public static void main(String[] args){
	   args[0] = "a value";
       args[1] = "another value";
}
}

From another class:

public class Other{ 
public static void main(String[] args){
    String[] result={"",""};
    	Test.main(result);
    	System.out.println(result[0]);
    	System.out.println(result[1]);
}
}

Then the output is:

value
another value

Solution 5 - Java

Yes, we can write main method with a return type other than void. This simply means that we can overload our main method. Some examples are

  1. public static void main(String ... x){ }
  2. public static int main(String []args){ }
  3. public static void main(string array[]){ }

But, note here that the compiler will only know

public static void main(String []args){ }

If above method is not present it will not compile.

Solution 6 - Java

Yes You can return of type void.But the value will go to JVM and no more code after return will be executed because The control will return to JVM which calls main()

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionvibhasView Question on Stackoverflow
Solution 1 - JavajoschiView Answer on Stackoverflow
Solution 2 - JavaMartin TörnwallView Answer on Stackoverflow
Solution 3 - JavasecretformulaView Answer on Stackoverflow
Solution 4 - JavaIsabelView Answer on Stackoverflow
Solution 5 - JavaAnurag SwarnkarView Answer on Stackoverflow
Solution 6 - JavaAndroid KillerView Answer on Stackoverflow