Können wir die Hauptmethode in Java überladen?

72

Können wir eine main()Methode in Java überladen ?

Mohan
quelle
5
Warum sollten Sie die main () -Methode überladen wollen? Sie können mit main () beliebig viele Klassen erstellen, wenn Sie ein anderes Startverhalten wünschen. Geben Sie einfach die Hauptklasse an, wenn Sie das Glas aufrufen. Oder Sie können einfach ein zusätzliches Argument hinzufügen, das Sie testen, wenn Ihr Hauptstart startet und das sich auf seine Funktionsweise auswirkt.
Locka

Antworten:

127

Sie können die main()Methode überladen , sie wird jedoch nur public static void main(String[] args)verwendet, wenn Ihre Klasse von der JVM gestartet wird. Zum Beispiel:

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

    public static void main(String arg1) {
        System.out.println("main(String arg1)");
    }

    public static void main(String arg1, String arg2) {
        System.out.println("main(String arg1, String arg2)");
    }
}

Dies wird immer gedruckt, main(String[] args)wenn Sie java Test ...über die Befehlszeile ausgeführt werden, auch wenn Sie ein oder zwei Befehlszeilenargumente angeben.

Sie können die main()Methode natürlich selbst aus dem Code aufrufen - an diesem Punkt werden die normalen Überladungsregeln angewendet.

BEARBEITEN: Beachten Sie, dass Sie eine varargs-Signatur verwenden können, da dies vom JVM-Standpunkt aus gleichwertig ist:

public static void main(String... args)
Jon Skeet
quelle
2
Um genau zu sein, mit der JVM kann man jede überladene Version manuell aufrufen.
Péter Török
1
@ Mohan: Das gleiche wie bei jeder anderen Methode. Sie können main()von einer anderen Stelle in Ihrem Code aus anrufen .
Jon Skeet
1
@ Santhosh: Nein, immer noch String[]. Dies ist die einzige Signatur, die als Einstiegspunkt erkannt wird.
Jon Skeet
1
@JavaMan: Nun, das steht in der Spezifikation ... Wenn Sie eine andere Signatur angegeben hätten (z. B. eine mit Ihrer eigenen Klasse als einem der Parameter), wie würde die JVM wissen, welche Argumente zu liefern sind?
Jon Skeet
1
@RiteshPuri: Ich kann nicht viel in Bezug auf einen Zweck sehen, aber es wäre auch seltsam, die Überlastung zu verhindern . Vergessen Sie nicht, dass die mainMethode auch direkt aus anderem Code aufgerufen werden kann. Es ist also nicht so, als wäre eine solche Überladung nicht möglich.
Jon Skeet
17

Ja, Sie können die Hauptmethode in Java überladen. Das Programm führt die überladene Hauptmethode jedoch nicht aus, wenn Sie Ihr Programm ausführen. Sie müssen die überladene Hauptmethode von der eigentlichen Hauptmethode aus aufrufen.

Das bedeutet, dass die Hauptmethode als Einstiegspunkt für den Java-Interpreter fungiert, um die Ausführung der Anwendung zu starten. wo als geladene main von main aufgerufen werden muss.

JVM
quelle
Gute Antwort. Vielen Dank. :)
Vikas Gupta
Tolle Antwort, aber selbst die JVM kann Skeet nicht schlagen.
Arvindh Mani
4

Ja, durch Methodenüberladung. Durch Überladen von Methoden können Sie eine beliebige Anzahl von Hauptmethoden in einer Klasse haben. Sehen wir uns das einfache Beispiel an:

class Simple{  
  public static void main(int a){  
  System.out.println(a);  
  }  

  public static void main(String args[]){  
  System.out.println("main() method invoked");  
  main(10);  
  }  
}  

Es wird die folgende Ausgabe geben:

main() method invoked
10
Shokat
quelle
3

JA, Sie können main () überladen

Aber um klar zu sein - obwohl Sie main überladen können, kann nur die Version mit der Standardsignatur als Anwendung über die Befehlszeile ausgeführt werden. z.B

public static void main(String a,String... args){
// some code
}
2)public static void main(String[] args){//JVM will call this method to start 
// some code 
}
Jaimin Patel
quelle
2

Ja, Sie können die Hauptmethode in Java überladen. Sie müssen die überladene Hauptmethode von der eigentlichen Hauptmethode aufrufen.

praveen
quelle
2

Ja, die Hauptmethode kann überladen sein. Die überladene Hauptmethode muss innerhalb der "public static void main (String args [])" aufgerufen werden, da dies der Einstiegspunkt ist, wenn die Klasse von der JVM gestartet wird. Auch überladene Hauptmethoden können beliebige Qualifikationsmerkmale haben wie normale Methoden.

Vikram
quelle
2

Ja, du kannst.

Die mainMethode in Java ist keine außerirdische Methode. Abgesehen von der Tatsache, dass main()JVM wie jede andere Methode auf ähnliche Weise überladen werden kann, sucht es immer nach der Methodensignatur, um das Programm zu starten.

  • Die normale mainMethode fungiert als Einstiegspunkt für die JVM, um die Ausführung des Programms zu starten.

  • Wir können die mainMethode in Java überladen . Das Programm führt
    die überladene mainMethode jedoch nicht aus , wenn wir Ihr Programm ausführen. Wir müssen die überladene mainMethode nur von der eigentlichen Hauptmethode aus aufrufen .

    // A Java program with overloaded main()
    import java.io.*;     
    public class Test {         
      // Normal main()
      public static void main(String[] args) {
        System.out.println("Hi Geek (from main)");
        Test.main("Geek");
      }     
      // Overloaded main methods
      public static void main(String arg1) {
        System.out.println("Hi, " + arg1);
        Test.main("Dear Geek","My Geek");
      }
      public static void main(String arg1, String arg2) {
        System.out.println("Hi, " + arg1 + ", " + arg2);
      }
    }
    

    Gültige Varianten von main () in Java

Roottraveller
quelle
1

Ja, wir können die Hauptmethode überladen. Hauptmethode darf keine statische Hauptmethode sein.

praveen
quelle
1

Das ist völlig legal:

public static void main(String[] args) {

}

public static void main(String argv) {
    System.out.println("hello");
}
Ankur Tewari
quelle
1

Ja. Die Methode 'main ()' kann überladen werden. Ich habe versucht, einen Code einzugeben, um Ihre Frage zu beantworten.

public class Test{
static public void main( String [] args )
        {
                System.out.println( "In the JVMs static main" );
                main( 5, 6, 7 );    //Calling overloaded static main method
                Test t = new Test( );
                String [] message  = { "Subhash", "Loves", "Programming" };
                t.main(5);
                t.main( 6, message );
        }

        public static void main( int ... args )
        {
                System.out.println( "In the static main called by JVM's main" );
                for( int val : args )
                {
                        System.out.println( val );
                }
        }

        public void main( int x )
        {
                System.out.println( "1: In the overloaded  non-static main with int with value " + x );
        }

        public void main( int x, String [] args )
        {
                System.out.println( "2: In the overloaded  non-static main with int with value " + x );
                for ( String val : args )
                {
                        System.out.println( val );
                }
        }
}

Ausgabe:

$ java Test
In the JVMs static main
In the static main called by JVM's main
5
6
7
1: In the overloaded  non-static main with int with value 5
2: In the overloaded  non-static main with int with value 6
Subhash
Loves
Programming
$

Im obigen Code werden sowohl die statische Methode als auch eine nicht statische Version der Hauptmethoden zu Demonstrationszwecken überladen. Beachten Sie, dass beim Schreiben von JVMs main die Hauptmethode ist, mit der JVM zuerst ein Programm ausführt.

Subhash KU
quelle
1

Ja, Sie können die Hauptmethode überladen, aber der Interpreter sucht immer nach der richtigen Syntax der Hauptmethode, um mit der Ausführung zu beginnen. Und ja, Sie müssen die überladene Hauptmethode mit Hilfe des Objekts aufrufen.

class Sample{
public void main(int a,int b){
System.out.println("The value of a is "  +a);
}
public static void main(String args[]){
System.out.println("We r in main method");
Sample obj=new Sample();
obj.main(5,4);
main(3);
}
public static void main(int c){
System.out.println("The value of c  is"  +c);
}
}

The output of the program is:
We r in main method
The value of a is 5
The value of c is 3
Mehul Sancheti
quelle
1

Ja Meiner Ansicht nach können wir die Hauptmethode überladen, aber das Überladen der Methode ist es. Zum Beispiel

class main_overload {
    public static void main(int a) {
        System.out.println(a);
    }
    public static void main(String args[]) {
        System.out.println("That's My Main Function");
        main(100);
    }
}

In diesem Double Back-Schrägstrich rufe ich nur die Hauptmethode auf ....

Abhishek Sanan
quelle
1

Ja, eine Hauptmethode kann überladen werden, da andere Funktionen überladen werden können. Es muss darauf geachtet werden, dass mindestens eine Hauptfunktion mit " String args [] " als Argumenten vorhanden ist. Und es kann eine beliebige Anzahl von Hauptfunktionen enthalten Ihr Programm mit verschiedenen Argumenten und Funktionen. Lassen Sie uns anhand eines einfachen Beispiels verstehen:

Class A{

public static void main(String[] args)
{
System.out.println("This is the main function ");
A object= new A();
object.main("Hi this is overloaded function");//Calling the main function
}

public static void main(String argu)     //duplicate main function
{
System.out.println("main(String argu)");
}
}

Ausgabe: Dies ist die Hauptfunktion.
Hi, dies ist eine überladene Funktion

m_prasu
quelle
0

Ja, Sie können die Hauptmethode überladen, aber in jeder Klasse sollte es nur eine Methode mit Signatur geben, public static void main(string args[])bei der Ihre Anwendung die Ausführung startet, wie wir in jeder Sprache wissen. Die Ausführung beginnt mit der Hauptmethode.

package rh1;

public class someClass 
{

    public static void main(String... args)
    {
        System.out.println("Hello world");

        main("d");
        main(10);
    }
    public static void main(int s)
    {

        System.out.println("Beautiful world");
    }
    public static void main(String s)
    {
        System.out.println("Bye world");
    }
}
Sumanth
quelle