# Intellij IDEA Programm ohne Main-Methode starten



## markjoahnnes (15. Mai 2018)

Liebe Community
Wenn ich BlueJ benutze um folgendes Hello Word Programm zu schreiben, kann ich es ausführen und es gibt Hello World aus: 

public class test {
    public static void df () {
        System.out.println("Hello");
    }
    public static void dh () {
        System.out.println("Hello World");
    }
}

Wenn ich dies in Intellij eingebe, kann ich es nicht ausführen; erst wenn ich ein Main-Methode implementiere.
Hoffe ihr könnt mir helfen

Mit freundlichen Grüßen
Johannes


----------



## Robat (15. Mai 2018)

Jedes Java-Programm braucht eine main-Methode .. es ist der Einstiegspunkt eines Programmes.
BlueJ will es damit dem (Anfänger) Programmierer nur einfacher machen ..


----------



## markjoahnnes (15. Mai 2018)

Und wie führt BlueJ das dann aus?


----------



## Robat (15. Mai 2018)

Wie genau BlueJ das im Hintergrund macht kann ich dir nicht sagen.
BlueJ wird für den User eine main-Methode anlegen..


----------



## markjoahnnes (15. Mai 2018)

Du sagtest, dass jedes Programm eine Main-Methode braucht. Ich habe aber mal gelsen, dass wenn man dieses Hello World Programm mit Objekten macht, man keine Main-Methode braucht. Ist eine Main-Methode also zwingend bei jedem Programm erforderlich?


----------



## httpdigest (15. Mai 2018)

Jedes Java Programm (bzw. jedes Programm, das auf der JVM ausgeführt werden möchte - also auch Scala, Groovy, etc.), egal was es tut, benötigt eine statische Methode, die "main" heißt, void als Rückgabetyp hat und einen einzelnen Parameter vom Typ String[] hat.
Der Grund: Man gibt dem java/javaw Launcher-Programm, welches Teil des JRE ist, den Namen der auszuführenden Klasse als Kommandozeilenargument (oder lässt das automatisch durch die IDE tun) (bzw. im Falle eines ausführbaren jars, liest der Launcher diesen Klassennamen aus der /META-INF/MANIFEST.MF Datei im Jar).
Man kann dem Launcher nicht auch noch den Namen der auszuführenden Methode mitgeben.
Das ist einzig und allein eine Limitation des java/javaw Launchers im JRE. Mit Hilfe der "Java Invocation API" (https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html) könnte man sich einen eigenen Launcher bauen, um eine beliebige andere Methode aufzurufen.
Ich habe aber keine Ahnung, ob BlueJ einen eigenen JVM-Launcher hat, den sie intern mit dem Namen der Methode füttern.
Eher denke ich, wie @Robat auch schon sagte, dass BlueJ eine synthetische "main" Methode in die Klasse generiert, bevor sie vom java/javaw Launcher ausgeführt wird.


----------



## markjoahnnes (15. Mai 2018)

Ja vielen Dank. Kann man hier Themen auf gelöst setzen?


----------

