1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
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)
|