Qui si può vedere che ci sono 2 public static void main (String args[])
in un unico file con il nome Test.java
(in particolare non ha utilizzato il nome del file come uno dei nomi di 2 classi) e le 2 classi sono con il default identificatore di accesso.
class Sum {
int add(int a, int b) {
return (a+b);
}
public static void main (String args[]) {
System.out.println(" using Sum class");
Sum a = new Sum();
System.out.println("Sum is :" + a.add(5, 10));
}
public static void main (int i) {
System.out.println(" Using Sum class main function with integer argument");
Sum a = new Sum();
System.out.println("Sum is :" + a.add(20, 10));
}
}
class DefClass {
public static void main (String args[]) {
System.out.println(" using DefClass");
Sum a = new Sum();
System.out.println("Sum is :" + a.add(5, 10));
Sum.main(null);
Sum.main(1);
}
}
Quando si compila il codice Test.java che genererà 2 .class
file (viz Sum.class
e DefClass.class
) e se corriamo Test.java non possiamo eseguirlo come non troverà alcuna classe principale con il nome Test. Invece se facciamo java Sum
o java DefClass
entrambi forniranno uscite differenti usando diversi main()
. Per utilizzare il metodo principale della classe Sum, è possibile utilizzare il nome della classe Sum.main(null)
o Sum.main(1)//Passing integer value in the DefClass main()
.
In ambito classe, è possibile avere un solo public static void main (String args[])
per classe poiché un metodo statico di una classe appartiene a una classe e non ai suoi oggetti e viene chiamato utilizzando il nome della classe. Anche se creiamo oggetti multipli e chiamiamo gli stessi metodi statici che li usano, allora l'istanza del metodo statico a cui queste chiamate faranno riferimento sarà la stessa.
Possiamo anche fare l'overloading del metodo main passando diversi set di argomenti nel main. L'esempio simile è fornito nel codice precedente ma, per impostazione predefinita, il flusso di controllo inizierà con public static void main (String args[])
del file di classe che abbiamo richiamato utilizzando java classname
. Per invocare il metodo principale con un altro insieme di argomenti, dobbiamo chiamarlo esplicitamente da altre classi.
Questo sarebbe legale Java, ma la firma del punto di ingresso è chiaramente specificato come 'String [ ] '. Puoi avere un entry point ** per classe **. Puoi persino creare una ** classe nidificata statica ** con il suo 'principale'. –