Execution of a Java application starts with the main() method, this is one of an important Java interview questions for both freshers and experienced. In this article, we will discuss some of the possible java interview questions on main() method.
1. Why main method is public static ?
If main() method is declared non-static then JVM (Java virtual Machine) cannot call it without creating instance of the class which contains the main() method.
While creating instance ambiguity might arises when the constructor takes argument as which one to call.
public class Test { public Test (int a) { //One argument constructor } public Test (int a, int b) { //Two arguments constructor } public void main(String[] args) { //Non Static main method } }
2. can we overload main method in Java ?
Yes, we can overload main method in Java but the execution will start from the main() method with signature “public static void main(String[] args)” or“public static void main(String args…)”
import java.util.Arrays; public class Test { /** Actual main method with String[] args**/ public static void main(String[] args) { System.out.println("String[] args main method called"); main(new Double[] {1.0, 2.0, 3.0}); } /** Overloaded main method with Double[] args**/ public static void main(Double[] args) { System.out.println("Double[] args main method called"); System.out.println(Arrays.toString(args)); } }
Once when we run the above code we will get the below output
String[] args main method called Double[] args main method called [1.0, 2.0, 3.0]
This clearly tells you that you can overload a main() method in java.
3. Can we override main method in Java ?
No, we cannot override main method in Java, because main() method is declared as static and you are not allowed to override a static method in java. It does not makes sense to “override” it, since the concept of “overriding” is only for instance methods.
4. What will happen if we declare main() method as non-static ?
If you declare a main() method as non-static the compilation will be successful but it will throw a Runtime error
public class Test { /** Non Static main method with String[] args**/ public void main(String[] args) { System.out.println("String[] args main method called"); } }
Output
Error: Main method is not static in class Test, please define the main method as: public static void main(String[] args)
5. Can we define a class without main method ?
No, We cannot define a class without main() method starting from Java 7. In previous release of Java we can have Static Initalizers as an alternative
public class Test { static { System.out.println("Static Initalizer"); System.exit(0); } }
Output: (From JDK 7)
Error: Main method not found in class Test, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application
Output: (JDK 6)
Static Initalizer
6. Can we declare main() method with different access modifier other than public ?
No, main() method cannot have any access modifier other public, if you use private, protected or default access modifier the compilation will be fine but it will throw Runtime error.
Error: Main method not found in class Test, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application
7. Can we make main final in Java ?
Yes, you can make the main() method final
8. Can we change return type of main() method ?
No, you cannot change the return type of a main() method, it must be void. If you change the return type then we will get a Runtime error “Main method must return a value of type void in class”
public class Test { /** static main method returning int**/ public static int main(String[] args) { System.out.println("String[] args main method called"); return 1; } }
Output:
Error: Main method must return a value of type void in class Test, please define the main method as: public static void main(String[] args)
Leave a Reply