Metoden main() findes i be­gyn­del­sen og slut­nin­gen af hvert program i Java. Kun sætninger, der ligger inden for dens ræk­ke­vid­de, tages i be­tragt­ning under ud­fø­rel­sen. Derfor er det så vigtigt at være opmærksom på alle detaljer i metodens syntaks. Hvis den er forkert, vil pro­gram­met ikke blive udført.

Hvad er main() i Java?

Uanset hvilket projekt du ønsker at im­ple­men­te­re med pro­gram­me­rings­spro­get, eller hvilken kort­fat­tet eller om­fat­ten­de kode du bruger til det, starter alle ap­pli­ka­tio­ner i Java med metoden main(). Hvis den ikke er til­gæn­ge­lig, kan koden ikke udføres. Inden dette vi­de­re­gi­ves til main(), indlæses Java Virtual Machine (JVM) i hukom­mel­sen, og koden kom­pi­le­res. Når disse trin er gen­nem­ført, kon­trol­le­res koden med main() metoden. Derefter udføres den for­hå­bent­lig korrekt. I prin­cip­pet er det også muligt at bruge flere af disse metoder, hvor det maksimale antal er én ho­ved­me­to­de pr. klasse.

Hvad er syntaksen for Java-metoden main()?

Syntaksen i Java’s main() metode er altid den samme. Den består af flere vigtige dele og ser således ud:

public static void main(String[] args)
java

Disse kom­po­nen­ter udfører følgende funk­tio­ner:

  • public: Denne komponent sikrer, at en klasse også kan tilgås udefra.
  • static: Denne del erklærer metoden som statisk, hvilket betyder, at den kan eksistere uden at der på forhånd er oprettet et objekt af en bestemt klasse.
  • void: Dette sikrer, at metoden main() i Java ikke behøver at returnere en værdi. main: Dette er det, Java Virtual Machine bruger til at iden­ti­fi­ce­re metoden, når den udfører et program.
  • String[] args: Dette er en matrix, hvor kom­man­do­linje­ar­gu­men­ter­ne gemmes og modtages.

Hvorfor er de enkelte kom­po­nen­ter i main() vigtige?

For bedre at forstå, hvordan main() -metoden fungerer, og hvorfor alle kom­po­nen­ter­ne er så vigtige, vil vi se nærmere på dem hver for sig i de følgende afsnit. Vigtigst af alt vil vi vise dig, hvad der sker, hvis en del af sig­na­tu­ren mangler. Til dette vil vi vælge et meget simpelt ko­de­ek­sem­pel, som vi vil udskrive med Java-kom­man­do­en System.out.println.

public class main {
	public static void main(String[] args) {
		System.out.println("Here is your sample text.");
	}
}
java

Når du udfører denne kode, får du følgende output:

Here is your sample text.
java

public

public fungerer som en ad­gangs­spe­ci­fi­ka­tor og sig­na­le­rer til Java Virtual Machine , hvor det til­sva­ren­de program udføres. Der findes andre ad­gangs­mo­di­fi­ka­to­rer, såsom default, private og protected. Hvis du bruger disse sammen med main() i Java, vil du dog modtage en fejl­med­del­el­se:

public class main {
	private static void main(String[] args) {
		System.out.println("Here is your sample text.");
	}
}
java

Det til­sva­ren­de problem er:

Error: Main method not found in class, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
java

Denne fejl­med­del­el­se angiver, at der ikke er offentlig adgang til metoden.

static

Nøg­le­or­det static bekræfter, at den anvendte metode er statisk. Det betyder, at den kan bruges uaf­hæn­gigt af klas­se­in­stan­ser. Hvis du fjerner denne komponent, vil koden se således ud:

public class main {
	public void main(String[] args) {
		System.out.println("Here is your sample text.");
	}
}
java

Her får du også en fejl­med­del­el­se:

Error: Main method is not static in class test, please define the main method as:
public static void main(String[] args)
java

void

void er et nøgleord, der angiver, at main() i Java ikke skal returnere nogen værdier. Da main() er start- og slut­punk­tet for et program i Java, er rendering unød­ven­dig. Sådan ser koden ud uden void:

public class main {
	public static main(String[] args) {
		System.out.println("Here is your sample text.");
	}
}
java

Dette er den fejl­med­del­el­se, du får, hvis du udelader void:

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

main

For hvert program i Java søger JVM først efter iden­ti­fi­ka­to­ren main. Dette angiver, hvor ud­fø­rel­sen skal begynde og slutte. Så snart metoden main() i Java har afsluttet sin udførelse, afsluttes pro­gram­met. Derfor bør sig­na­tu­ren aldrig ændres eller tilføjes. Her er et eksempel på, hvordan en ændring af sig­na­tu­ren ser ud:

public class main {
	public static void replacementMain(String[] args) {
		System.out.println("Here is your sample text.");
	}
}
java

Da JVM ikke kan finde iden­ti­fi­ka­to­ren, afslutter den pro­gram­met direkte og viser følgende fejl­med­del­el­se:

Error: Main method not found in class, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
java

String[] args

String[] args svarer til klassen java.lang.String og in­de­hol­der data, som den gemmer som streng­vær­di­er. Hvis du udelader denne spe­ci­fi­ka­tion, vil koden se således ud:

public class main {
	public static void main() {
		System.out.println("Here is your sample text.");
	}
}
java

Uden ar­gu­men­tet kan Java main() -metoden ikke udføres. Som følge heraf vil du igen modtage følgende fejl­med­del­el­se:

Error: Main method not found in class, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
java

Hvilke al­ter­na­ti­ve sta­ve­må­der findes der?

Det her viste ko­de­ek­sem­pel er skrevet i henhold til den mest al­min­de­li­ge syntaks. Du kan dog nemt tilpasse det, så du får et bedre overblik. Du kan f.eks. placere de fir­kan­te­de pa­ren­te­ser direkte efter args. Sådan vil det se ud:

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

Du kan også gemme ar­gu­men­ter som variable ar­gu­men­ter (varargs). For at gøre dette skal du bruge en ellipse:

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

e279a09d81cf2d9a80f3ef29e7d04b0b

9355e88a23274d30eaac66bea1050fdd

Gå til ho­ved­me­nu­en