# IntelliJ IDEA Community Edition



## FinnJ (13. Apr 2022)

Hallo,
ich wage gerade meine ersten Schritte in IntelliJ und komme insgesamt recht gut zurecht, allerdings verstehe ich einfach nicht (und finde dazu auch kein Video), wie ich Methoden, welche nicht die static main methode sind, ausführen kann?


```
package Main.Liste;

public class Liste {
    
    Listenelement anfang;
    
    
    public static void main (String[] args) {
        System.out.println("Starting");
    }
    
    Liste () {
        anfang = new Abschluss();
        
    }
    
    public void HintenEinfuegen (Datenelement d) {
        anfang.HintenEinfuegen(d);
    }
    
    public void VorneEinfuegen (Datenelement dNeu) {
        Knoten kNeu = new Knoten(dNeu, anfang);
        kNeu.nachfolger = anfang;
    }
    
}
```

An sich funktioniert das Programm nämlich, aber ich weiß nicht wie ich z.B. die Methode "HintenEinfuegen" aufrufen kann?


----------



## yfons123 (13. Apr 2022)

du erstellst ein objekt davon und dann rufst du es auf


----------



## FinnJ (13. Apr 2022)

yfons123 hat gesagt.:


> du erstellst ein objekt davon und dann rufst du es auf


Da bin ich mir leider nicht ganz sicher wie das funktioniert.


----------



## yfons123 (13. Apr 2022)

im regelfall exakt so wie du es bei dem abschluss gemacht hast und wahrscheinlich genauso wie du es die anderen 10000 mal gemacht hast

```
public static void main (String[] args) {
        System.out.println("Starting");
        Liste liste = new Liste();
    }
```


----------



## FinnJ (13. Apr 2022)

yfons123 hat gesagt.:


> im regelfall exakt so wie du es bei dem abschluss gemacht hast und wahrscheinlich genauso wie du es die anderen 10000 mal gemacht hast
> 
> ```
> public static void main (String[] args) {
> ...


Tut mir leid ich stehe gerade glaube ich etwas auf dem Schlauch. Wenn ich ein Objekt erzeuge, indem ich es in die static main Methode schreibe, dann wird das ja beim starten vom Programm erzeugt, allerdings bin ich dann ja in diesem Screen. Wie rufe ich von hier aus eine Methode auf?


----------



## httpdigest (13. Apr 2022)

Jedes Java-Programm startet _immer_ von der public static void main Methode einer Klasse.
Es ist ja dann völlig dir überlassen, was diese main Methode tun soll.
Du kannst innerhalb dieser main Methode ja andere Methoden aufrufen.
Oder anders gesagt: _Alles_, was dein Programm tun soll, muss _irgendwie_ von dieser main-Methode ausgehen.

Aus der Art, wie du deine Frage formulierst, klingt es so, als wolltest du eher eine interaktive REPL (Read-Eval-Print-Loop) haben. Sowas gibt es z.B. mit der JShell.


----------



## Jw456 (13. Apr 2022)

```
public static void main (String[] args) {
        System.out.println("Starting");
        Liste liste = new Liste();
        liste.HintenEinfuegen (dein Datenelement );
    }
```

PS . Methoden schreibt man klein


----------



## Jw456 (13. Apr 2022)

> public void HintenEinfuegen (Datenelement d) {
> anfang.HintenEinfuegen(d);
> }


frage gibt es auch in der Klasse "Datenelement" eine Methode "Hinteneinfügen" die gibt es doch in der Klasse "List"


Jetzt siehst du auch warum man Methoden klein  und Klassen groß schreibt.



> Listenelement anfang;
> .....
> anfang = new Abschluss();


glaube nicht das das OK ist
Die DatenTypen passen eigentlich nicht.


Ist die "main"  Methode in der Klasse "List" wirklich deine echte main Methode?


----------



## FinnJ (13. Apr 2022)

httpdigest hat gesagt.:


> Jedes Java-Programm startet _immer_ von der public static void main Methode einer Klasse.
> Es ist ja dann völlig dir überlassen, was diese main Methode tun soll.
> Du kannst innerhalb dieser main Methode ja andere Methoden aufrufen.
> Oder anders gesagt: _Alles_, was dein Programm tun soll, muss _irgendwie_ von dieser main-Methode ausgehen.
> ...


Ahh okay, also kann ich nicht nachdem ich die Main methode gestartet habe einzelne Methoden aufrufen, sondern muss diese Methoden schon in die Main Methode schreiben um sie aufzurufen


----------



## FinnJ (13. Apr 2022)

Jw456 hat gesagt.:


> ```
> public static void main (String[] args) {
> System.out.println("Starting");
> Liste liste = new Liste();
> ...


Vielen Dank


----------



## FinnJ (13. Apr 2022)

Jw456 hat gesagt.:


> frage gibt es auch in der Klasse "Datenelement" eine Methode "Hinteneinfügen" die gibt es doch in der Klasse "List"
> 
> 
> Jetzt siehst du auch warum man Methoden klein  und Klassen groß schreibt.
> ...


Nein, Datenelement ist nur ein interface, welches von der Klasse Knoten verwaltet wird und die Klasse Knoten extended die abstrakte Klasse Listenelement. Dass ich Klassen in Caps schreibe hatte ich mir eigentlich mal angewöhnt, aber heute hab ich irgendwie aus Faulheit alles klein geschrieben.. war wahrscheinlich ein Fehler :/


----------



## FinnJ (13. Apr 2022)

Jw456 hat gesagt.:


> glaube nicht das das OK ist
> 
> 
> Ist die "main"  Methode in der Klasse "List" wirklich deine echte main Methode?


Das sollte Okay sein, der anfang der Liste soll zu Beginn auch der Abschluss sein, da die Liste zu Beginn leer sein soll. Ja diese Main Methode ist meine echte.


----------



## Jw456 (13. Apr 2022)

FinnJ hat gesagt.:


> Dass ich Klassen in Caps schreibe hatte ich mir eigentlich mal angewöhnt, aber heute hab ich irgendwie aus Faulheit alles klein geschrieben.. war wahrscheinlich ein Fehler :/


du hast es nicht klein sondern  gross geschreiben. 

das ist auch in deiner Stucktur falsch wenn das für Java ist.


----------



## yfons123 (13. Apr 2022)

so wie du die Methoden geschrieben hast ist es pascal case und das macht man in c# bei Methoden aber nicht in java.. da ist es camel case


----------



## FinnJ (13. Apr 2022)

Jw456 hat gesagt.:


> du hast es nicht klein sondern  gross geschreiben.
> 
> das ist auch in deiner Stucktur falsch wenn das für Java ist.


Meinte, dass ich den Anfangsbuchstaben groß geschrieben habe aber den Rest nicht ^^


----------



## FinnJ (13. Apr 2022)

yfons123 hat gesagt.:


> so wie du die Methoden geschrieben hast ist es pascal case und das macht man in c# bei Methoden aber nicht in java.. da ist es camel case


Habe bisher in BlueJ "programmiert" und dort haben wir die Methoden immer so geschrieben und BlueJ ist ein Programm für Java.


----------



## yfons123 (13. Apr 2022)

blue j ist für Anfänger geeignet 

aber du willst ja professionell sein


----------



## FinnJ (13. Apr 2022)

yfons123 hat gesagt.:


> blue j ist für Anfänger geeignet
> 
> aber du willst ja professionell sein


An sich will ich das schon auf einem professionellerem Level machen, allerdings merke ich auch, dass das nicht gerade leicht ist. BlueJ war halt extrem leicht, man konnte die klassen einzeln erzeugen und dann mit rechtsklick die methoden einzeln aufrufen, aber ich finde die Fehler die man eventuell macht werden bei intelliJ besser dargestellt, da fällt es einem viel leichter die zu lösen


----------



## yfons123 (13. Apr 2022)

bluej ist halt dafür gemacht daß ein Anfänger schnell was zu sehen bekommt... intellij ist gemacht für Programmierer 


das was du programmiert hast sieht nicht falsch aus, dir fehlt Grundwissen das du noch nicht gelernt hast aber jetzt kannst du es ja nach holen


----------



## FinnJ (13. Apr 2022)

yfons123 hat gesagt.:


> bluej ist halt dafür gemacht daß ein Anfänger schnell was zu sehen bekommt... intellij ist gemacht für Programmierer
> 
> 
> das was du programmiert hast sieht nicht falsch aus, dir fehlt Grundwissen das du noch nicht gelernt hast aber jetzt kannst du es ja nach holen


Werde ich machen, muss mich jz leider noch die nächsten Wochen aufs Abi konzentrieren aber danach werde ich mich mal richtig einlesen und das gescheit üben.
Danke für die Hilfe!


----------



## FinnJ (13. Apr 2022)

yfons123 hat gesagt.:


> bluej ist halt dafür gemacht daß ein Anfänger schnell was zu sehen bekommt... intellij ist gemacht für Programmierer
> 
> 
> das was du programmiert hast sieht nicht falsch aus, dir fehlt Grundwissen das du noch nicht gelernt hast aber jetzt kannst du es ja nach holen


Da hätte ich jetzt doch noch eine Frage, welche IDE sollte ich benutzen, wenn ich wie in diesem Fall eine Liste erzeugen will und die Methoden dieser testen will? BlueJ funktioniert zwar, allerdings finde ich die Farbgebung nicht so toll, da gefällt mir die von z.B. IntelliJ bei weitem besser.


----------



## temi (13. Apr 2022)

FinnJ hat gesagt.:


> Da hätte ich jetzt doch noch eine Frage, welche IDE sollte ich benutzen, wenn ich wie in diesem Fall eine Liste erzeugen will und die Methoden dieser testen will? BlueJ funktioniert zwar, allerdings finde ich die Farbgebung nicht so toll, da gefällt mir die von z.B. IntelliJ bei weitem besser.


Die IDE ist doch nur ein Hilfsmittel zur Programmierung. Es ist egal, welche du verwendest. Du kannst auch einen einfachen Texteditor hernehmen.

```
package Main.Liste;

public class Liste {
   
    Listenelement anfang;
   
   
    public static void main (String[] args) {
        System.out.println("Starting");
        Liste meineListe = new Liste(); // hier wird eine Liste erzeugt.
       
        meineListe.HintenEinfuegen(...); // und da wird sie verwendet
       
        // .. hier kommt der Rest des Programms, das die Liste verwendet
    }
   
    Liste () {
        anfang = new Abschluss();
       
    }
   
    public void HintenEinfuegen (Datenelement d) {
        anfang.HintenEinfuegen(d);
    }
   
    public void VorneEinfuegen (Datenelement dNeu) {
        Knoten kNeu = new Knoten(dNeu, anfang);
        kNeu.nachfolger = anfang;
    }
   
}
```


Ein guter Ansatz wäre es eine separate Hauptklasse (mit der main() Methode) zu erstellen und dort die Klasse Liste zu verwenden (wie oben gezeigt).  In der Klasse Liste kann dann die main() Methode entfallen. Später werden deine Programme ja noch viel mehr Klassen haben, da ist es sinnvoll, gleich sauber zu trennen.


----------



## FinnJ (13. Apr 2022)

temi hat gesagt.:


> Die IDE ist doch nur ein Hilfsmittel zur Programmierung. Es ist egal, welche du verwendest. Du kannst auch einen einfachen Texteditor hernehmen.


Ich weiß, aber ich frage deshalb, da mir BlueJ von der Farbgebung nicht allzu gut gefällt, ich aber den Umgang damit sehr gerne mag. Beispielsweise, dass man Methoden direkt nach dem Erstellen eines Objekts aufrufen kann und diese somit einzeln testen kann. Würde dir da eine Alternative einfallen die recht ähnlich zu handhaben ist?


----------



## temi (13. Apr 2022)

FinnJ hat gesagt.:


> Ich weiß, aber ich frage deshalb, da mir BlueJ von der Farbgebung nicht allzu gut gefällt, ich aber den Umgang damit sehr gerne mag. Beispielsweise, dass man Methoden direkt nach dem Erstellen eines Objekts aufrufen kann und diese somit einzeln testen kann. Würde dir da eine Alternative einfallen die recht ähnlich zu handhaben ist?


Vergiss das, was BlueJ da macht. Das ist nur eine Krücke für den Anfang und wird dir später nie wieder so begegnen.

Einzeln testen kannst du sie auch, du musst sie halt einzeln z. B. in der main() Methode aufrufen.


----------



## FinnJ (13. Apr 2022)

temi hat gesagt.:


> Vergiss das, was BlueJ da macht. Das ist nur eine Krücke für den Anfang und wird dir später nie wieder so begegnen.
> 
> Einzeln testen kannst du sie auch, du musst sie halt einzeln z. B. in der main() Methode aufrufen.


Okay, dann werde ich mich mal etwas damit beschäftigen. Danke für die Hilfe! Schönen Abend noch


----------



## temi (13. Apr 2022)

Hier mal ein Beispiel, wie ich das meine. In IntelliJ erstellst du dazu zwei Klassen.

```
// Hauptklasse
public class HelloWorld {
 
    public static void main(String[] args) {
        Greeter greeter = new Greeter();
        greeter.greet(); // aufrufen (testen) der Methode greet()
    }
}
```


```
// Weitere Klasse
public class Greeter {
 
    public void greet() {
        System.out.println("Hallo Welt!");
    }
}
```

Gestartet wird immer über die main() Methode der Hauptklasse, egal wie viele weitere Klassen es noch gibt. In der Hauptklasse und mittels der main() Methode, wird alles "zusammen gebaut".


----------



## FinnJ (13. Apr 2022)

temi hat gesagt.:


> Hier mal ein Beispiel, wie ich das meine. In IntelliJ erstellst du dazu zwei Klassen.
> 
> ```
> // Hauptklasse
> ...


Okay, also das was BlueJ quasi für mich alles gemacht hat muss ich jetzt selber machen indem ich erstmal (beim Beispiel der Liste) ein Datenelement erstelle und damit dann die Methode aufrufe und zum testen dann am besten noch mir irgendwie den Knoten der jetzt am Anfang der Liste ist returne.
Ist ja recht logisch soweit, mal schauen wo ich demnächst dran hängen bleib😆


----------

