Java Tutorial #1 - "Hello World"

Benutzeravatar
Zweistein2
Administrator
Beiträge: 93
Registriert: Di Apr 23, 2013 6:43 pm

Java Tutorial #1 - "Hello World"

Beitragvon Zweistein2 » Mo Jan 13, 2014 11:38 pm

Heyho,

Und willkommen bei dieser kleinen Tutorial-Serie. Hier möchte ich euch alles beibringen, was ich so weiß, vor allem im Hinblick auf Spiele-Programmierung. Am Ende sollte jeder in der Lage sein, einen eigenen Tetris-Klon zu entwickeln, was auch hoffentlich im letztem Tutorial behandelt wird.

Nun, bevor wir mit dem Coden beginnen, müssen wir erst einmal ein paar Sachen installieren. Dazu gehören Java, das JDK und eine IDE ("integrated development environment", zu Deutsch: "Integrierte Entwicklungsumgebung"). Java findet ihr hier: *klick*, normalerweise ist das aber schon installiert. Dann brauchen wir das JDK: *klick*. Und zu guter Letzt eine IDE. Ich persönlich würde euch BlueJ empfehlen. Es ist klein, einfach zu bedienen, zeigt die Objekt-Beziehungen zueinander und es hat nen Debugger (Wichtig zur Fehleranalyse). Mehr braucht man eh nicht. Wer auf mehr "Schnick-Schnack" steht kann sich auch Eclipse holen.

Nachdem alles heruntergeladen und installiert wurde, müssen wir evtl. noch ein paar Kleinigkeiten regeln. Ab und an wird der Pfad zum JDK/Java nicht in die Path-Variable eingetragen. Dann muss das manuell gemacht werden, damit es nicht zu blöden Fehlern kommt. Dazu geht man bei Windows auf Systemsteuerung -> System und Sicherheit -> System -> Erweiterte Systemeinstellungen (links) -> Umgebungsvariablen (im neuen Fenster rechts unten), sucht dort die Path/PATH-Variable (am besten bei Global für alle User/Benutzerkonten des PC) und bearbeitet diese. Dort wird dann folgendes angehängt: ";C:\Pfad\zum\JDK\bin" (ohne die "". Das Semikolon (";") ist wichtig!). Dann speichern und fertig.

#1 - Hello World


Als Erstes öffnen wir BlueJ. Daraufhin öffnet sich ein Fenster, in welchem wir oben links auf "Project" -> "New Project..." klicken. Dann noch schnell einen Speicherort auswählen und fertig, wir haben unser erstes Projekt angelegt. Nun klicken wir oben links auf "New Class...", um eine neue Java-Klasse anzulegen. Wir nennen sie einfach mal "Tutorial". Jetzt öffnen wir diese Klasse mit einem Doppelklick, wählen den kompletten Inhalt (Strg+A) im neugeöffnetem Fenster und löschen diesen. Nun zum eigentlichen Teil des Tutorials.

In die nun leere Tutorial-Klasse (In Zukunft: Tutorial.java) schreiben wir nun folgendes:

Code: Alles auswählen

public class Tutorial
{
    public String Ausgabe;
   
    public Tutorial()
    {
        Ausgabe = "Hello World";
       
        TextSchreiben();
    }
   
    public void TextSchreiben()
    {
        System.out.println(Ausgabe);
    }
}


So, fangen wir ganz oben an.

Code: Alles auswählen

public class Tutorial


Diese Zeile sagt Java, wie die Klasse heißt, nämlich "Tutorial" und dass sie eine Standard-Klasse ist (class). Das ist wichtig, denn es gibt versch. Arten von Klassen, wie z.B.: abstract class (Abstrakte Klasse), Enum, etc. Das "public" davor regelt, welche Klassen oder Methoden Zugriff auf diese Klasse haben. Welche Klassen/Methoden denn nun Zugriff haben, erkläre ich am Ende dieses Absatzes.
Zeitgleich bildet diese Zeile auch den Klassenkopf. Die geschweifte Klammer in der nächsten Zeile, sowie die geschweifte Klammer am Ende gehören zusammen. Daher stehen sie auch auf einer "Vertikalen Linie" (beide sind nicht eingerückt). Sie bilden den Klassenrumpf. Innerhalb dieser geschweiften Klammern werden Variablen und Funktionen definiert, initialisiert und ausgeführt.

Neben Public gibt es folgende Zugriffsmodifikatoren:

Bild

Was Paket/Innere-Klassen oder Unterklassen sind, wird in späteren Tutorials geklärt.

Code: Alles auswählen

public String Ausgabe;


Diese Zeile steht innerhalb des Klassenrumpfs und definiert eine Variable. String gibt dabei den Typ der Variable an, also welche Art von Werten (Zahlen, Buchstaben, Zeichenketten) sie beinhalten kann. Public kennen wir ja bereits. Doch was ist Ausgabe?

Nun, "Ausgabe" ist in diesem Fall einfach der Name, also die eindeutige Zuweisung der Variable. Es können NIE 2 Variablen selben Typs mit selben Namen in der selben Klasse existieren!

Folgende Variablentypen kann man verwenden:

Bild

byte, short, int und long beinhalten alle Ganzzahlen (1, 3913 oder 941471). Sie unterscheiden sich nur im Hinblick auf den Speicherplatz. Am Häufigsten wird int verwendet, was ich euch auch nahelege. Bei float und double ist es dasselbe, nur mit Gleitkommazahlen (1.3, 8714.4813 oder 1841.41).
String ist in etwa wie char, kann also auch Unicode-Zeichenketten speichern. Der Unterschied ist allerdings, das char wirklich ein Datentyp ist, String aber eine eigene Java-Klasse (daher auch die andere Farbe bei BlueJ im Syntax-Highlight). Mehr müsst ihr dazu aber auch (noch) nicht wissen. ;)

Als Nächstes ziehen wir den untersten Teil etwas vor:

Code: Alles auswählen

    public void TextSchreiben()
    {
        System.out.println(Ausgabe);
    }


Dies ist eine Methode. Sie besteht genau wie eine Klasse aus einem Kopf und einem Rumpf. Der Methodenkopf hier ist wie immer die erste Zeile:

Code: Alles auswählen

public void TextSchreiben()


"public" kennen wir bereits. "void" hingegen ist neu. Dazu solltet ihr erstmal wissen, wie so ein Methodenkopf, aber auch ein Klassenkopf aufgebaut ist:

Bild

Nun, wie ihr seht kommt zuerst der Zugriffsmodifikator ("public"), dann der Typ des Rückgabewerts ("void") und zu guter Letzt der Methodenname ("TextSchreiben()" Die Klammern am Ende des Namens sind wichtig, da sie eine Variable von einer Methode unterscheiden. Zudem können dort Anfangsparameter für die Methode mitgegeben werden. Siehe unten). Doch was macht void denn nun genau?

Nun, manche Funktionen (=Methoden) können einen Wert ausgeben, der dann in einer anderen Funktion weiterverwendet wird. So wird z.B.: In einer Funktion ein Wert verrechnet, welcher dann von einer anderen Funktion gebraucht wird:

Code: Alles auswählen

public class Tutorial2
{
    public int X;
    public int Ergebnis;
   
    public Tutorial2()
    {
        X = 4;

        Ergebnis = Rechnen(3);
       
        ErgebnisAnzeigen();
    }
   
    public int Rechnen(int Y)
    {
        X = X + Y;
       
        return X;
    }
   
    public void ErgebnisAnzeigen()
    {
        System.out.println(Ergebnis);
    }
}


X und Ergebnis sind klar. Beides Variablen des Typs "int", also Ganzzahlen. Im Konstruktor (siehe unten was das ist) wird der Variable X gleich ein Wert zugewiesen. Sie wird also initialisiert (=Wertzuweisung). Danach wird die Methode "Rechnen" aufgerufen. Da die Methode "Rechnen" einen Wert erwartet (Y) wird dieser innerhalb der Klammern des Methodenaufrufs mitgegeben, daher das (3) am Ende des Methodenaufrufs. Erwartet eine Funktion keinen Wert, so sind die Klammern leer ().

Nun wirds interessant. Denn der Methodenaufruf fungiert hierbei gleichzeitig als Initialisierung der Variable Ergebnis!

Schauen wir uns doch mal an, was die Funktion "Rechnen" denn genau macht. Sie bekommt den Anfangsparameter (Y) vom Konstruktor geliefert. Dieser Wert wird in einer neu angelegten Variable Y gespeichert und mit X verrechnet. Dann wird dieser Wert ausgegeben (engl. "returned") und zwar mithilfe des Schlüsselworts "return". Dieses "return X;" gibt im Endeffekt den Wert der X-Variable aus. So können wir also *theoretisch* statt "Ergebnis = Rechnen(3);" auch lesen "Ergebnis = 7;" (da 4 + 3 = 7, also Wert von X). Das ist genau das, was dieses "return" macht. X ist hierbei dann der Rückgabewert.

Sollte kein Wert ausgegeben werden, wenn z.B.: also nur eine Nachricht in ein Fenster geschrieben wird, etc. dann brauchen wir weder ein "return", noch müssen wir einen Rückgabewert angeben. Da wir aber immer den Typ des Rückgabewerts angeben müssen, mogeln wir uns mit "void" etwas drumherum. Denn "void" bedeutet übersetzt "Leere/leer" oder "nichts". Und genau das ist es auch, was wir zurückgeben. Nämlich nichts :)

Das System.out.println("TEXT"); macht nichts anderes, als einen Text/Zeichenketten in die Windows-Konsole (bzw. bei BlueJ in die dortige Konsole) zu schreiben. Sie kann aber auch Variablen ausgeben. Das passiert hier mit Ergebnis, bzw. oben mit Ausgabe. Dabei ist der Typ der Variable egal. Ihr könnt sowohl float's und int's, als auch String's oder boolean's in die Konsole schreiben lassen.

Huch. Nun haben wir sogar schon Methoden und Methodenaufrufe durchgemacht! Nun, dann gucken wir uns die übersprungene "Methode" an.

Code: Alles auswählen

    public Tutorial()
    {
        Ausgabe = "Hello World";
       
        TextSchreiben();
    }


Dieser Block sieht auf den ersten Blick vlt. wie eine normale Methode aus, doch fehlt etwas Entscheidendes. Richtig, der Typ des Rückgabewerts. Nicht mal ein "void" steht dort! Normalerweise gibt das beim Compiler eine hübsche Fehlermeldung (Error), doch hier geht alles in Ordnung. Warum?

Das liegt daran, dass das hier eine besondere Methode ist. Sie ist der so genannte Konstruktor. Das ist eine Methode, die am "Start" jeder Klasse aufgerufen und ausgeführt wird. Sie ist nicht umbedingt notwendig, d.h. man kann sie auch weglassen. Dennoch würde ich euch empfehlen sie jedes Mal mithinzuschreiben. Selbst wenn sie leer ist. Wichtig dabei ist, dass der "Methodenname" gleich dem Klassennamen ist. Doch wie funktioniert das mit dem "Klassenstart" überhaupt?

Nun, in BlueJ ist das ganz einfach. Nachdem man seinen Code geschrieben hat oder man etwas testen möchte, klickt man oben links auf "Compile". Dadurch geht die IDE alle Klassen des Projekts durch und überprüft auf Fehler (Syntaxfehler wie X 0 1 statt X = 1. Logische Fehler wie X = 2 statt X = 1 werden NICHT berücksichtigt. Woher soll den der Compiler wissen, was ihr machen wollt? ;) ). Nachdem der Compiler fertig ist, bekommt ihr entweder einen Fehler (oder mehrere) oder euer Programm funktioniert und ihr könnt es starten. Dazu machen wir einen Rechtsklick auf die Tutorial-Klasse und drücken "new Tutorial()", bestätigen das sich öffnende Fenster und sehen unser "Hello World!" in der Konsole.

Zum Schluss noch ein kleines Schaubild zum Verdeutlichen des Aufbaus einer typischen Java-Klasse:

Bild

Im nächsten Tutorial kommen dann Comments (Kommentare), Imports, Arrays, Globale und lokale Variablen, und, und, und... ;)

Achja, für konstruktive Kritik bin ich immer offen. Ist ja das erste Tutorial in dieser Richtung von mir.
BildBild

Benutzeravatar
XDClaner
Globaler Moderator
Beiträge: 40
Registriert: Di Apr 23, 2013 9:19 pm

Re: Java Tutorial #1 - "Hello World"

Beitragvon XDClaner » Mo Feb 03, 2014 2:10 am

Ein wirklich tolles Tutorial (obwohl ich Java als Sprache nicht mag :smug: ) :)

Ist allerdings eher was für jemanden, der schon irgendeine grobe Ahnung von Programmieren hat. Direkt mit Klassen anzufangen ist für echte Anfänger dann doch etwas hart :D


regards,
XDClaner

Benutzeravatar
Zweistein2
Administrator
Beiträge: 93
Registriert: Di Apr 23, 2013 6:43 pm

Re: Java Tutorial #1 - "Hello World"

Beitragvon Zweistein2 » Mo Feb 03, 2014 6:45 pm

XDClaner hat geschrieben:Ein wirklich tolles Tutorial (obwohl ich Java als Sprache nicht mag :smug: ) :)

Ist allerdings eher was für jemanden, der schon irgendeine grobe Ahnung von Programmieren hat. Direkt mit Klassen anzufangen ist für echte Anfänger dann doch etwas hart :D


regards,
XDClaner


Von der Benennung her?

Geb ich zu, ist evtl. etwas gewöhnungsbedürftig, aber bevor ich dann mit "Dateien", o.ä rumhantiere. :derp:

Vom Programmiertechnischem geht das aber nicht anders. Ist halt die Basis, denn Java funktioniert halt nur mit Klassen ;)
BildBild

Benutzeravatar
XDClaner
Globaler Moderator
Beiträge: 40
Registriert: Di Apr 23, 2013 9:19 pm

Re: Java Tutorial #1 - "Hello World"

Beitragvon XDClaner » Mo Feb 03, 2014 11:23 pm

Ich mag Java nicht, weil es in einer VM läuft. Da geht mir der direkte Draht zur Maschine verloren :D


Zurück zu „Java“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast