Java.Core.What do you know about the main() function?

main() Method in Java

The main() method is the entry point for Java applications. It is where execution begins when you run a Java program.


1. main() Method Signature





public static void main(String[] args)

Each part of the method signature has a specific purpose:

KeywordMeaning
publicThe method is accessible from anywhere (must be public so JVM can call it).
staticAllows main() to run without creating an object of the class.
voidmain() does not return any value.
mainThis is the method name that the JVM searches for as the starting point.
String[] argsAn array of command-line arguments passed to the program.

2. Why Must main() Be public static?

  • public → The JVM must be able to call main() from outside the class.
  • static → The JVM does not need to create an object of the class to execute main().

If main() were not static, the JVM would need to create an instance before calling it, but without main(), it wouldn’t know how!


3. Can We Change the main() Method?

Valid Variations of main()

The following variations work because they retain the correct method signature:

Different parameter name

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

Varargs instead of array

public static void main(String... args) { }

Final modifier (allowed but unnecessary)

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

Invalid main() Methods

These will not be recognized by the JVM:

Missing static (JVM doesn’t know how to call it)

public void main(String[] args) { }

Wrong parameter type (must be String[])

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

Wrong return type (main() must be void)

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

4. Command-Line Arguments (args)

You can pass arguments to main() from the command line.

Example: Using args

public class CommandLineExample {
    public static void main(String[] args) {
        System.out.println("Number of arguments: " + args.length);
        for (String arg : args) {
            System.out.println("Argument: " + arg);
        }
    }
}

Run in Terminal:

java CommandLineExample Hello World 123

Output:

Number of arguments: 3
Argument: Hello
Argument: World
Argument: 123

5. main() in Multi-Threaded and GUI Applications

Even in Java applications with multiple threads or GUI interfaces, main() still serves as the starting point.

✔ In multi-threading, main() launches other threads:

public class MultiThreadExample {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> System.out.println("Thread running"));
        t1.start();
    }
}

✔ In Swing/GUI apps, main() launches the UI:

import javax.swing.*;

public class GUIExample {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Hello");
            frame.setSize(300, 200);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        });
    }
}

6. Can We Have Multiple main() Methods?

✔ Yes! You can have multiple main() methods in different classes, but only one main entry point when running the program.

class A {
    public static void main(String[] args) {
        System.out.println("Main in A");
    }
}

class B {
    public static void main(String[] args) {
        System.out.println("Main in B");
    }
}

Run Command:

java A

Output:

Main in A

Only the specified class’s main() runs.

7. Can We Call main() Manually?

Yes, you can call main() like a normal method:

public class MainCall {
    public static void main(String[] args) {
        System.out.println("Main method called!");
        main(new String[]{"Hello", "World"}); // Recursively calling main()
    }
}

✔ Be careful! Recursive calls to main() can cause a StackOverflowError.


Final Thoughts

main() is the entry point for Java programs.
✔ It must be public static void main(String[] args).
✔ You can pass command-line arguments using args.
✔ GUI and multi-threaded applications still need main() to start execution.
✔ You can’t change the method signature, but variations (like String... args) are allowed.

This entry was posted in Без рубрики. Bookmark the permalink.

Leave a Reply

Your email address will not be published.