summaryrefslogtreecommitdiffhomepage
path: root/de-de
diff options
context:
space:
mode:
Diffstat (limited to 'de-de')
-rw-r--r--de-de/java-de.html.markdown497
1 files changed, 497 insertions, 0 deletions
diff --git a/de-de/java-de.html.markdown b/de-de/java-de.html.markdown
new file mode 100644
index 00000000..001c6888
--- /dev/null
+++ b/de-de/java-de.html.markdown
@@ -0,0 +1,497 @@
+---
+language: java
+filename: LearnJavaDe.java
+contributors:
+ - ["Jake Prather", "http://github.com/JakeHP"]
+ - ["Jakukyo Friel", "http://weakish.github.io"]
+ - ["Madison Dickson", "http://github.com/mix3d"]
+ - ["Simon Morgan", "http://sjm.io/"]
+translators:
+ - ["Michael Dähnert", "http://github.com/JaXt0r"]
+lang: de-de
+---
+
+Java ist eine Programmiersprache für vielfältige Aufgaben. Sie ist imperative und objektorientiert.
+Oftmals wird sie für Desktop- Webapplikationen sowie als Programmiersprache im Betriebssystem Android verwendet.
+[Weitere Informationen \(Englisch\](http://docs.oracle.com/javase/tutorial/java/)
+
+```java
+// Einzeilige Kommentare starten mit //
+/*
+Mehrzeilige Kommentare sehen so aus.
+*/
+/**
+JavaDoc Kommentare haben dieses Format. Sie werden verwendet um Klassen, Attribute sowie Methoden zu beschreiben.
+*/
+
+// Importieren der Klasse ArrayList aus dem Paket java.util
+import java.util.ArrayList;
+// Importieren aller Klassen innerhalb des Paketes java.security
+import java.security.*;
+
+// Jede .java Datei besteht aus einer äußeren öffentlichen (public) Klasse.
+// Der Name der Klasse muss identisch des Dateinamens sein.
+public class LearnJavaDe {
+
+ // Ein Programm muss eine main Methode als Eintrittspunkt besitzen.
+ public static void main (String[] args) {
+
+ // System.out.println() wird zum Schreiben von zeilenweisen Ausgaben verwendet.
+ System.out.println("Hello World!");
+ System.out.println(
+ "Integer: " + 10 +
+ " Double: " + 3.14 +
+ " Boolean: " + true);
+
+ // Zum Schreiben von Ausgaben ohne Zeilenumbruch wird System.out.print() verwendet.
+ System.out.print("Hello ");
+ System.out.print("World");
+
+
+ ///////////////////////////////////////
+ // Typen & Variablen
+ ///////////////////////////////////////
+
+ // Zum Deklarieren einer Variable nutze <type> <name>
+ // Byte - 8-bit vorzeichenbehaftete (signed), binäre Ganzzahl
+ // (-128 <= byte <= 127)
+ byte fooByte = 100;
+
+ // Short - 16-bit vorzeichenbehaftete (signed), binäre Ganzzahl
+ // (-32,768 <= short <= 32,767)
+ short fooShort = 10000;
+
+ // Integer - 32-bit vorzeichenbehaftete (signed), binäre Ganzzahl
+ // (-2,147,483,648 <= int <= 2,147,483,647)
+ int fooInt = 1;
+
+ // Long - 64-bit vorzeichenbehaftete (signed), binäre Ganzzahl
+ // (-9,223,372,036,854,775,808 <= long <= 9,223,372,036,854,775,807)
+ long fooLong = 100000L;
+ // L wird verwendet um zu kennzeichnen, dass ein Variablenwert vom Typ long ist.
+ // Ohne diesen Buchstaben wird die Zahl automatisch als Integer behandelt.
+
+ // Hinweis: Java besitzt keine vorzeichenlosen (unsigned) Typen.
+
+ // Float - Typ mit einfacher Genauigkeit (Single-precision), 32-bit IEEE 754 Fließkommazahl
+ float fooFloat = 234.5f;
+ // f wird verwendet um zu kennzeichnen, dass ein Variablenwert vom Typ float ist;
+ // Ohne diesen Buchstaben wird die Zahl automatisch als Integer behandelt.
+
+ // Double - Typ mit doppelter Genauigkeit (Double-precision), 64-bit IEEE 754 Fließkommazahl
+ double fooDouble = 123.4;
+
+ // Boolean - Wahr & Falsch (true & false)
+ boolean fooBoolean = true;
+ boolean barBoolean = false;
+
+ // Char - Ein einfacher 16-bit Unicode Buchstabe
+ char fooChar = 'A';
+
+ // final Variablen können von einem anderen Objekt nicht erneut zugeordnet werden.
+ final int HOURS_I_WORK_PER_WEEK = 9001;
+
+ // Zeichenketten (Strings)
+ String fooString = "My String Is Here!";
+
+ // \n ist ein Escape Zeichen welcher eine neue Zeile startet.
+ String barString = "Schreiben auf einer neuen Zeile?\nKein Problem!";
+ // \t ist ein Escape Zeichen welcher einen Tab-Zeichen anhängt.
+ String bazString = "Möchtest du einen Tabulator anhängen?\tKein Problem!";
+ System.out.println(fooString);
+ System.out.println(barString);
+ System.out.println(bazString);
+
+ // Arrays
+ // Die Arraygröße muss bei Instanziierung entschieden werden.
+ // Das folgende Format funktioniert bei Deklaration eines Arrays
+ // <datentyp>[] <variablenname> = new <datentyp>[<arraygröße>];
+ // <datentyp> <variablenname>[] = new <datentyp>[<arraygröße>];
+ int[] intArray = new int[10];
+ String[] stringArray = new String[1];
+ boolean boolArray[] = new boolean[100];
+
+ // Eine weitere Möglichkeit ein Array zu deklarieren & initialisieren.
+ int[] y = {9000, 1000, 1337};
+ String names[] = {"Bob", "John", "Fred", "Juan Pedro"};
+ boolean bools[] = new boolean[] {true, false, false};
+
+ // Indexierung eines Arrays - Zugriff auf ein Element
+ System.out.println("intArray @ 0: " + intArray[0]);
+
+ // Arrays sind 0-indexiert und veränderbar.
+ intArray[1] = 1;
+ System.out.println("intArray @ 1: " + intArray[1]); // => 1
+
+ // Weitere nennenswerte Typen
+ // ArrayLists - Ähnlich Arrays, allerdings werden mehr Funktionen geboten,
+ // ebenso ist die Arraygröße verwänderbar
+ // LinkedLists - Implementierung einer doppelt verlinkten Liste.
+ // Alle Operationen funktioneren so, wie es von einer doppelt verlinkten Liste erwartet wird.
+ // Weitere Informationen: https://de.wikipedia.org/wiki/Liste_(Datenstruktur)#Doppelt_.28mehrfach.29_verkettete_Liste
+ // Maps - Eine Sammlung von Objekten, welche eine Verknüpfung von Schlüsseln zu Werten (key => value) vornimmt.
+ // Eine Map kann keine Duplikate enthalten; Jeder Schlüssel kann genau einen Wert beinhalten.
+ // HashMaps - Diese Klasse nutzt eine Hashtabelle zur Implementierung eines Map Interfaces.
+ // Dies erlaubt es zur Laufzeit Standardoperationen wie gib (get) und einfügen (insert)
+ // selbst für große Mengen in einer konstanten Zeit auszuführen (Laufzeitverhalten O(n)).
+
+ ///////////////////////////////////////
+ // Operatoren
+ ///////////////////////////////////////
+ System.out.println("\n->Operatoren");
+
+ int i1 = 1, i2 = 2; // Kurform zur Deklaration mehrerer Variablen.
+
+ // Arithmetische Operationen sind einfach nutzbar.
+ System.out.println("1+2 = " + (i1 + i2)); // => 3
+ System.out.println("2-1 = " + (i2 - i1)); // => 1
+ System.out.println("2*1 = " + (i2 * i1)); // => 2
+ System.out.println("1/2 = " + (i1 / i2)); // => 0 (0.5 Nachkommazahl abgeschnitten)
+
+ // Modulo
+ System.out.println("11%3 = "+(11 % 3)); // => 2
+
+ // Vergleichsoperationen
+ System.out.println("3 == 2? " + (3 == 2)); // => false
+ System.out.println("3 != 2? " + (3 != 2)); // => true
+ System.out.println("3 > 2? " + (3 > 2)); // => true
+ System.out.println("3 < 2? " + (3 < 2)); // => false
+ System.out.println("2 <= 2? " + (2 <= 2)); // => true
+ System.out.println("2 >= 2? " + (2 >= 2)); // => true
+
+ // Bitwise Operatoren!
+ /*
+ ~ Unäres (unary) bitweise Komplement
+ << Vorzeichenbehaftete (signed) linke Verschiebung
+ >> Vorzeichenbehaftete (signed) rechte Verschiebung
+ >>> Vorzeichenlose (unsigned) linke Verschiebung
+ & Bitweise UND (AND)
+ ^ Bitweise exklusive ODER (OR)
+ | Bitweise inklusive ODER (OR)
+ */
+
+ // Inkrementierungen
+ int i = 0;
+ System.out.println("\n->Inc/Dec-rementierung");
+ // Die ++ und -- operatoren inkrementieren und dekrementieren jeweils um 1.
+ // Werden sie vor die Variable gesetzt, ink-/dekrementieren sie und geben anschließend ihren Wert zurück.
+ // Hinter der Variable geben sie ihren Wert zurück und ändern ihn anschließend.
+ System.out.println(i++); // i = 1, schreibt 0 (post-increment)
+ System.out.println(++i); // i = 2, schreibt 2 (pre-increment)
+ System.out.println(i--); // i = 1, schreibt 2 (post-decrement)
+ System.out.println(--i); // i = 0, schreibt 0 (pre-decrement)
+
+ ///////////////////////////////////////
+ // Kontrollstrukturen
+ ///////////////////////////////////////
+ System.out.println("\n->Kontrollstrukturen");
+
+ // If Bedingungen sind wie in den C-Sprachen aufgebaut
+ int j = 10;
+ if (j == 10){
+ System.out.println("Ich wurde geprinted");
+ } else if (j > 10) {
+ System.out.println("Ich nicht");
+ } else {
+ System.out.println("Ich auch nicht");
+ }
+
+ // While Schleife
+ int fooWhile = 0;
+ while(fooWhile < 100) {
+ System.out.println(fooWhile);
+ // Den Zähler inkrementieren
+ // 100x iterieren, fooWhile 0,1,2...99
+ fooWhile++;
+ }
+ System.out.println("fooWhile Wert: " + fooWhile);
+
+ // Do While Schleife
+ int fooDoWhile = 0;
+ do {
+ System.out.println(fooDoWhile);
+ // Den Zähler inkrementieren
+ // 99x iterieren, fooDoWhile 0->99
+ fooDoWhile++;
+ } while(fooDoWhile < 100);
+ System.out.println("fooDoWhile Wert: " + fooDoWhile);
+
+ // For Schleife
+ int fooFor;
+ // for Schleifenstruktur => for(<start_statement>; <Bedingung>; <Schritt>)
+ for (fooFor = 0; fooFor < 10; fooFor++) {
+ System.out.println(fooFor);
+ // 10x iterieren, fooFor 0->9
+ }
+ System.out.println("fooFor Wert: " + fooFor);
+
+ // For Each Schleife
+ // The for Schleife kann verwendet werden um über Arrays ebenso wie Objekte,
+ // welche das Interface Iterable implementieren zu iterieren.
+ int[] fooList = {1, 2, 3, 4, 5, 6, 7, 8, 9};
+ // for each Schleifenstruktur => for (<Objekt> : <iterable>)
+ // Wird gelesen als: Iteriere für jedes Element im Iterable
+ // Hinweis: Der Objekttyp muss dem Elementtyp des Iterable entsprechen.
+
+ for (int bar : fooList) {
+ System.out.println(bar);
+ //9x iterieren und die Werte 1-9 auf jeweils einer neuen Zeile schreiben
+ }
+
+ // Switch Case
+ // A Schalter (switch) funktioniert mit den Datentypen byte, short, char und int.
+ // Ebenso kann er für Aufzählungen (Enums) verwendet werden (Enum Typen folgen weiter unten)
+ // der String Klasse (ab Java SE7) und ein paar spezielle Klassen, welche die primitiven Typen ummanteln (wrap):
+ // Character, Byte, Short, and Integer.
+ int monat = 3;
+ String monatsString;
+ switch (monat) {
+ case 1: monatsString = "Januar";
+ break;
+ case 2: monatsString = "Februar";
+ break;
+ case 3: monatsString = "März";
+ break;
+ default: monatsString = "Ein anderer Monat";
+ break;
+ }
+ System.out.println("Switch Case Ergebnis: " + monatsString);
+
+ // Bedingungsoperator (Conditional Shorthand)
+ // Der Operator '?' kann für schnelle Zuweisungen oder logische Verzweigungen genutzt werden.
+ // Er ist wie folgt zu lesen: Wenn die Bedingung wahr ist, nutze <erster Wert>
+ // ansonsten nutze <zweiter Wert>
+ int foo = 5;
+ String bar = (foo < 10) ? "A" : "B";
+ System.out.println(bar); // Schreibt A, denn die Bedingung ist wahr.
+
+
+ ////////////////////////////////////////
+ // Typkonvertierung und Type-Casting
+ ////////////////////////////////////////
+
+ // Konvertierung von Daten
+
+ // Konvertiere String nach Integer
+ Integer.parseInt("123");// Gibt die Integer Repräsentation von "123" zurück
+
+ // Konvertiere String nach Integer
+ Integer.toString(123);// Gibt die String Repräsentation von 123 zurück
+
+ // Für andere Konvertierungen sind die folgenden Klassen zu betrachten:
+ // Double
+ // Long
+ // String
+
+ // Tpe-Casting
+ // Java Objekte können benfalls konvertiert werden, hierbei gibt es vielfältige Konzepte.
+ // Weitere Informationen finden sich hier (englisch):
+ // http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
+
+
+ ///////////////////////////////////////
+ // Klassen und Funktionen
+ ///////////////////////////////////////
+
+ System.out.println("\n->Klassen & Funktionen");
+
+ // (Die Definition der Klasse Fahrrad folgt)
+
+ // Verwendung einer neuen Klasseninstanz
+ Fahrrad trek = new Fahrrad();
+
+ // Aufruf von Methoden des Objektes
+ trek.erhöheGeschwindigkeit(3); // Es sollten immer getter- und setter- Methoden verwendet werden
+ trek.setTrittfrequenz(100);
+
+ // toString gibt die StringRepräsentation des Objektes zurück.
+ System.out.println("trek info: " + trek.toString());
+
+ } // Ende der Main Methode
+} // Ende der LearnJavaDe Klasse
+
+
+// In einer .java-Datei können zusätzliche nicht öffentliche (non-public) äüßere Klassen vorhanden sein.
+
+
+// Syntax der Klassendeklaration:
+// <public/private/protected> class <Klassenname> {
+// // Es folgen Datenfelder, Konstruktoren, Funktionen.
+// // Funktionen werden in Java Methoden genannt.
+// }
+
+class Fahrrad {
+
+ // Felder/Variablen der Klasse Fahrrad
+ public int trittfrequenz; // Public: Kann von überall her angesprochen werden
+ private int geschwindigkeit; // Private: Nur innerhalb der Klasse sichtbar
+ protected int gang; // Protected: Erreichbar innerhalb der Klasse oder Subklassen (sub classes)
+ String name; // default: Nur innerhalb des Paketes verwendbar
+
+ // Eine Klasse kann mittelst Konstruktoren erstellt werden.
+ // Das ist ein Konstruktor
+ public Fahrrad() {
+ gang = 1;
+ trittfrequenz = 50;
+ geschwindigkeit = 5;
+ name = "Bontrager";
+ }
+
+ // Das ist ein Konstruktor mit Argumenten
+ public Bicycle(int initialTrittfrequenz, int initialGeschwindigkeit, int initialGang,
+ String name) {
+ this.gang = initialGang;
+ this.trittfrequenz = initialTrittfrequenz;
+ this.geschwindigkeit = initialGeschwindigkeit;
+ this.name = name;
+ }
+
+ // Syntax von Methoden (Funktionen):
+ // <public/private/protected> <Rückgabetyp> <Funktionsname>(<Argumente>)
+
+ // Java Klassen implementieren oftmals getter- und setter-Methoden ihrer Felder
+
+ // Syntax von Methodendeklarationen:
+ // <Sichtbarkeit> <Rückgabetyp> <Methodenname>(<Argumente>)
+ public int getTrittfrequenz() {
+ return tri;
+ }
+
+ // void Methoden benötigen kein return Statement.
+ public void setCadence(int newValue) {
+ cadence = newValue;
+ }
+
+ public void setGear(int newValue) {
+ gear = newValue;
+ }
+
+ public void erhöheGeschwindigkeit(int increment) {
+ speed += increment;
+ }
+
+ public void verringereGeschwindigkeit(int decrement) {
+ speed -= decrement;
+ }
+
+ public void setName(String newName) {
+ name = newName;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ //Methode zur Darstellung der Attributwerte des Objektes.
+ @Override
+ public String toString() {
+ return "Gang: " + gang + " Trittfrequenz: " + trittfrequenz + " Geschwindigkeit: " + geschwindigkeit +
+ " name: " + name;
+ }
+} // Ende der Klasse Fahrrad
+
+// Hochrad ist eine Subklasse von Fahrrad
+class Hochrad extends Fahrrad {
+ // (Hochräder sind Fahrräder mit einem extrem großen Vorderrad.
+ // Sie haben keine Gänge.)
+
+ public Hochrad(int initialTrittfrequenz, int initialGeschwindigkeit){
+ // Aufruf des Vater-Konstruktors (parent constructor) mit dem Wort super.
+ super(initialTrittfrequenz, initialGeschwindigkeit, 0, "Hochrad");
+ }
+
+ // Überschriebene Methoden sollten die Annotation @Override besitzen.
+ // Mehr zu Annotationen und deren Verwendungszwecken kann hier nachgelesen werden:
+ // (englisch) http://docs.oracle.com/javase/tutorial/java/annotations/
+ @Override
+ public void setGang(int gang) {
+ gang = 0;
+ }
+}
+
+// Schnittstellen (Interfaces)
+// Interface Deklaration
+// <Zugriffsrecht> interface <Name> extends <super-Interface> {
+// // Konstanten
+// // Methodendeklarationen
+// }
+
+// Beispiel - Nahrung:
+public interface Essbar {
+ public void essen(); // Jede Klasse, die dieses Interface implementiert
+ // muss auch diese Methode implementieren.
+}
+
+
+public interface Verdaulich {
+ public void verdauen();
+}
+
+
+// Nun können wir eine Klasse erstellen, die beide Interfaces implementiert.
+public class Frucht implements Essbar, Verdaulich {
+ @Override
+ public void essen() {
+ // ...
+ }
+
+ @Override
+ public void verdauen() {
+ // ...
+ }
+}
+
+// Mit Java kann man nur eine Klasse erweitern (extends) jedoch mehrere Interfaces implementieren.
+// z.B.:
+public class BeispielKlasse extends ParentBeispielKlasse implements InterfaceEins,
+ InterfaceZwei {
+ @Override
+ public void methodeInterfaceEins() {
+ }
+
+ @Override
+ public void methodeInterfaceZwei() {
+ }
+}
+```
+
+## Weitere Informationen (in englisch)
+
+Die folgenden Links dienen lediglich dazu Verständnis für die Kapitel aufzubauen.
+Für tiefergreifende Fragen ist Google der beste Startpunkt.
+
+**Offizielle Oracle Guides**:
+
+* [Java Tutorial Trail from Sun / Oracle](http://docs.oracle.com/javase/tutorial/index.html)
+
+* [Java Access level modifiers](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)
+
+* [Object-Oriented Programming Concepts](http://docs.oracle.com/javase/tutorial/java/concepts/index.html):
+ * [Inheritance](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)
+ * [Polymorphism](http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html)
+ * [Abstraction](http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)
+
+* [Exceptions](http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html)
+
+* [Interfaces](http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html)
+
+* [Generics](http://docs.oracle.com/javase/tutorial/java/generics/index.html)
+
+* [Java Code Conventions](http://www.oracle.com/technetwork/java/codeconv-138413.html)
+
+**Online Tutorials**
+
+* [Learneroo.com - Learn Java](http://www.learneroo.com)
+
+* [Codingbat.com](http://codingbat.com/java)
+
+
+**Bücher**:
+
+* [Head First Java](http://www.headfirstlabs.com/books/hfjava/)
+
+* [Thinking in Java](http://www.mindview.net/Books/TIJ/)
+
+* [Objects First with Java](http://www.amazon.com/Objects-First-Java-Practical-Introduction/dp/0132492660)
+
+* [Java The Complete Reference](http://www.amazon.com/gp/product/0071606300)