Java-Grundlagen
Vorbereitungen
Java ist heutzutage auf fast jedem Computer installiert. Um Java zu entwickeln benötigt man allerdings die Entwicklerversion. Da es aber ebenfalls wenig sinnvoll ist, Java ohne Entwicklungsumgebung zu programmieren, installiert man am besten beides in einem. In meinem Fall NetBeans zusammen mit Java. Beides findet sich auf der Downloadseite .
Das erste Programm
Projekt erstellen und Programm ausführen
Das Hello World Programm ist traditionell das erste Programm in jeder Programmiersprache. Es tut nichts weiter als Hello World auszugeben. Das Programm dient lediglich dazu, die grundlegenden Programmierkonzepte einer Sprache zu demonstrieren. In NetBeans sind Programme immer in Projekte eingebettet. Also startet man ein neues Programm, indem man ein neues Projekt anlegt.
- File -> New Project … -> Categories: Java -> Projects: Java Application -> Next
- Project Name: HelloWorld
- Create Main Class: de.erichweigand.helloworld.HelloWorld
- Finish
Dann legt NetBeans ein neues Projekt an und öffnet die Datei HelloWorld.java mit folgendem Inhalt
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package de.erichweigand.helloworld; /** * * @author erich */ public class HelloWorld { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here } }
Ersetzen Sie die Zeile
// TODO code application logic here
durch
System.out.println("Hello World!");
Wenn sie nun auf den grünen Pfeil in der Menüleiste klicken, wird das Programm übersetzt und gestartet. Im Output Fenster (im unteren Bereich) erscheinen die Worte Hello World!. Herzlichen Glückwunsch. Sie haben ihr erstes funktionstüchtiges Java-Programm geschrieben. NetBeans hat dabei im Hintergrund ein Java-Programm-Paket gebaut und ausgeführt. Nach dem Start des Programms liegt dieses im dist Unterverzeichnis des Projekts und heißt im obigen Beispiel HelloWorld.jar. Will man das Programm ohne NetBeans starten geht das mit dem Befehl
java -jar HelloWorld.jar
Genauere Informationen darüber, wie man sein selbst geschriebenes Programm dann letztendlich auch ohne Entwicklungsumgebung benutzen kann, finden sich auf der Internetseite Packaging and Deploying Desktop Java Applications.
Programmerklärung
- der Text zwischen /* und */ ist ein Kommentar und hat auf das Programm keinerlei Auswirkung. Diese Zeilen sind nur für den Programmierer, dass er auch nach einer Woche noch weis, wieso er das Programm so geschrieben hat.
- die package Anweisung kann weggelassen werden, sollte aber nicht. Wird das Programm später auf die grosse weite Welt losgelassen ist es wichtig, dass der Packagename weltweit eindeutig ist, damit es nicht zu Doppeldeutigkeiten bei Klassennamen kommen kann. Deshalb hat sich eine umgekehrte Domainschreibweise eingebürgert. Da Domains weltweit eindeutig sind, sind auf diese Weise die Package-Namen ebenso eindeutig. Da mir die Domain erichweigand.de gehört, fangen bei mir die Packagenamen alle mit de.erichweigand an, gefolgt vom Projektnamen und eventuell gefolgt von weiteren Unterteilungen des Programms.
- Java-Programme sind aus Klassen aufgebaut. Dieses Programm hat genau eine Klasse die mit public class HelloWorld deklariert wird. Der Quellcode der Klasse steht zwischen den geschweiften Klammern.
- in Java muss die Klasse HelloWorld in der Datei HelloWorld.java stehen.
- jedes Java-Programm muss eine Hauptklasse haben, die beim Programmstart als erstes aufgerufen wird.
- die Hauptklasse muss die main Funktion haben, die wie im Beispiel deklariert sein muss. In dieser Methode ist die Startprozedur des Programms (In unserem Fall das ganze Programm)
Variablen und Datentypen
Primitive Datentypen
- boolean: kann die beiden Werte true und false enthalten
- char: ein Zeichen
- byte: ganze Zahl von -128 bis 127
- short: ganze Zahl von -32.768 bis 32.767
- int: ganze Zahl von -2.147.483.648 bis 2.147.483.647
- long: ganze Zahl von -263 bis 263-1
- float: Fließkommazahlen mit geringer Genauigkeit
- double: Fließkommazahlen mit hoher Genauigkeit
Operationen
- Addition (+)
- Subtraktion (-)
- Multiplikation (*)
- Division (/)
- Modulo (%)
- Kurzschreibweisen
- a += 1 => a = a + 1
- a -= 1 => a = a – 1
- a *= 2 => a = a * 2
- a /= 2 => a = a / 2
- a %= 2 => a = a % 2
- a++ => a = a + 1
- a– => a = a – 1
- gleich (==)
- ungleich(!=)
- kleiner als (<)
- kleiner als oder gleich (<=)
- größer als oder gleich (>=)
- größer als (>)
- Negation (!)
- logisches Und (&&)
- logisches Oder (||)
- logisches XOR (^)
- Bedingungsoperator (Bedingung ? Ausdruck, wenn Bedingung wahr : Ausdruck, wenn Bedingung falsch ; )
- Instanz-Typ testen (instanceof)
Typumwandlung
Durch die Typumwandlung kann Typ einer Variablen (int, float, …) geändert werden. Es gibt 2 Arten der Typumwandlung
Implizite Typumwandlung
Die implizite (automatische) Typumwandlung passiert bei einer Zuweisung oder bei einer Berechnung. Bei einer Wertzuweisung (z.B. float a = 5;) wird der Wert (hier der Integer-Wert 5) automatisch auf den grösseren Werte-Bereich umgewandelt. Erlaubt ist hier nur eine verlustfreie Umwandlung, also eine Umwandlung von einem kleinen Wertebereich auf einen grossen (z.B die Zuweisung eines int an einen float).
Bei einer Berechnung (z.B. 3.5 + 4) werden zuerst alle Werte auf den höchsten verwendeten Wertebereich konveriert (im Beispiel wird aus 4 eine 4.0).
Explizite Typumwandlung
Bei der expliziten Typumwandlung wird der gewünschte Zahlenbereich vor die Variable bzw. den Wert geschrieben (z.B. int p = (int) 3.14; // 3). Hierbei kann es zu einem Datenverlust kommen, weil auf diese Weise auch eine Umwandlung in einen kleineren Zahlenbereich erlaubt ist.
Objekttypen
- Alle nicht primitiven Datentypen sind Objekt-Typen
- Sie werden (bis auf wenige Ausnahmen) durch den new Operator erzeugt.
- Die Objektvariable enthält nicht das Objekt, sondern eine Referenz auf das Objekt.
- Eine Objektvariable eines bestimmten Typs kann eine Referenz auf diesen Typ oder eines abgeleiteten Typs annehmen.
- Wenn die Objektvariable keine Referenz enthält ist ihr Wert null.
- Der == Operator gibt bei Objektvariablen true zurück, wenn beide Variablen dieselbe Referenz enthalten.
- Um den Inhalt zweier Objekte zu vergleichen wird die equals Methode des Objekts benutzt.
- Genaueres hierzu auf der Seite über Objekte.
Gültigkeitsbereich
Auf eine Variable kann nur innerhalb ihres Gültigkeitsbereichs zugegriffen werden. Lesend darf erst auf sie zugegriffen werden, wenn sie initialisiert wurde. Der Gültigkeitsbereich einer Variable ist der Block, in dem sie deklariert wurde und alle inneren Blocks dieses Blocks. Im Gültigkeitsbereich dieser Variable darf keine Variable desselben Namens vorkommen (Auch nicht in inneren Blocks). Ausserhalb des Gültigkeitsbereichs ist es nicht möglich auf die Variable zuzugreifen.
Entscheidungen
if – else
if ( x < 0 ) { System.out.println("x ist kleiner null"); } else if ( x == 0 ) { System.out.println("x ist gleich null"); } else { System.out.println("x ist größer null"); }
switch
swicht(animal) { case "Hund": System.out.println("Es ist ein Hund"); break; case "Katze": System.out.println("Es ist eine Katze"); break; default: System.out.println("Dieses Tier kenn ich nicht"); }
Wiederholungen
while
while (Bedingung) { // Ausführen solange Bedingung true }
do { // Ausführen solange Bedingung true } while (Bedingung);
for
for ( int i = 0 ; i < 10 ; i++ ) { System.out.println( i ); }
for-each
int[] zahlen = new int[]{1, 2, 3}; for (int zahl : zahlen) { System.out.println(zahl); }
Vorteile:
- übersichtlichere Schreibweise
- keine Iterationsvariable
- keine Gefahr über das Ende des Arrays hinauszulaufen
Nachteile:
- die Information zum Index ist nicht verfügbar
- Array kann nicht geändert werden (z.B. neuer Wert zuweisen)
break und continue
- break in einer Schleife bricht die Schleife sofort und endgültig ab
- continue bricht den aktuellen Durchlauf der Schleife ab und beginnt sofort mit dem nächsten Durchlauf