0% fanden dieses Dokument nützlich (0 Abstimmungen)
840 Ansichten

Java Cheatsheet

Hochgeladen von

giovanni8080
Copyright
© Attribution Non-Commercial (BY-NC)
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
840 Ansichten

Java Cheatsheet

Hochgeladen von

giovanni8080
Copyright
© Attribution Non-Commercial (BY-NC)
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
Sie sind auf Seite 1/ 15

Java Cheat Sheet

Eine ganz, ganz kurze Einfhrung in Java (ohne Anspruch auf Vollstndigkeit) fr Leute, die schon programmieren knnen.
Version: 0.6 Datum: 8.12.2007 Autor: Sascha Leib

1. Hello World
Das folgende Beispiel zeigt das Grundgrst fr ein einfaches Java-Programm:
class HelloWorld { public static void main (String args[]) { System.out.println("Hallo Welt!"); System.exit(0); }

Zur Erklrung:

Der Name der Datei (plus Dateiendung .java) muss mit dem Namen der Klasse (hier HelloWorld) bereinstimmen - in diesem Fall also HelloWorld.java. Es wird zuerst die Funktion main aufgerufen. Diese muss hier statisch deklariert sein (static), da keine Klasseninstanz erzeugt wird, und sie muss ffentlich sein (public), damit sie von auen, also in diesem Fall beim Programmstart, aufgerufen werden kann. Der Rckgabewert des Programmes wird in Java nicht als Funktions-Rckgabe spezifiziert, sondern am Ende als Parameter von System.exit (hier 0), daher hat main einen leeren Rckgabetyp (void). Die Funtion main erhlt als Parameter ein Array (gekennzeichnet durch die eckigen Klammern) von Strings. Dies enthlt ggf. die Kommandozeilenparameter, die beim Programmstart mitgegeben werden. Die vordefinierten Funktionsaufrufe sind in einer Klassenbibliothek organisiert. Die Klasse System enthlt z.B. zahlreiche systemnahe Funktionen und Unterklassen, die sich mit Laufzeitsteuerung (z.B. hier: exit) oder Ein- und Ausgabe (z.B. out) befassen.

2. Kompilieren und Starten


Java-Sourcedateien haben die Dateiendung .java und der eigentliche Dateiname sollte mit dem

Klassennamen bereinstimmen. Das obige Programm sollte man also unter dem Namen HelloWorld.java abspeichern. Zum Kompilieren auf der Kommandozeile gibt man dann einfach ein:
> javac HelloWorld.java

Bei Erfolg erzeugt javac dann eine neue Datei mit der Endung .class, hier also entsprechend HelloWorld.class. Diese kann dann mit dem folgenden Befehl gestartet werden:
> java HelloWorld

Wichtig ist hier, dass java nicht (direkt) nach der Datei sucht, sondern nach dem Klassennamen der natrlich schon etwas mit dem Dateinamen zu tun hat; Jedenfalls hier bitte keine Dateiendung angeben, sonst erscheint eine Fehlermeldung!

Java Cheat Sheet

Seite 2

3. Datentypen
Java kennt die folgenden Grunddatentypen:
Datentyp
boolean char byte short int long float double

Standardwert
false '\u0000' 0 0 0 0L 0.0F 0.0D

Beschreibung Wahrheitswert (true oder false) Ein einzelnes Zeichen (\u0000 bis \uFFFF*) Ganzzahl 8-Bit mit Vorzeichen (-128 bis 127) Ganzzahl 16-Bit mit Vorzeichen (-32768 bis 32767) Ganzzahl 32-Bit mit Vorzeichen Ganzzahl 64-Bit mit Vorzeichen 32-Bit Fliekommazahl 64-Bit Fliekommazahl

Suffix

L F D

4.1 Ganzzahltypen
Fr Variablen der Typen byte, short, int und long gilt:

Wenn nicht explizit ein anderer Typ angegeben wurde, wird fr alle Berechnungen intern int verwendet. Negative Zahlen werden (intern) als 2-Komplement gespeichert. Es findet keine berlaufprfung statt! Als Seiteneffekt gilt daher:
Integer.MAX_VALUE + 1 = Integer.MIN_VALUE Integer.MIN_VALUE - 1 = Integer.MAX_VALUE

Fr byte und short mssen Ausdrcke in vielen Rechenfunktionen explizit gecastet werden, um eine Compiler-Warnung zu vermeiden.
byte b = (byte)( 3 + 5 )

4.2 Fliekommatypen
Fr die Typen float und double findet eine berlaufprfung statt. In diesem Fall bekommt die Variable einen speziellen, reservierten Wert positiv unendlich (POSITIVE_INFINITY), bzw. negativ unendlich (NEGATIVE_INFINITY) zugewiesen. So z.B. als Ergebnis einer Division durch Null. Zustzlich kennen diese Typen noch die speziellen Werte NaN (not a number = keine [gltige] Zahl) und sowohl eine positive als auch eine negative Null!
float a = 0.0F; float b = -0.0F;

Wird kein Typensuffix angegeben, wird normalerweise double as Typ angenommen. Entsprechend wird normalerweise fr alle Fliekommaberechnungen intern double benutzt. Achtung: Bei der Rechnung mit Fliekommavariablen kann es zu Rundungsfehlern kommen, die im Extremfall zu signifikanten Abweichungen vom korrekten Ergebnis fhren knnen! Zum Beispiel:
1.0 / 3 * 100000 * 3 / 100000 = 0.9999999999999999

* Laut Spezifikation sind \uFFFF und \uFFFE keine gltigen Unicode-Symbole. Das letzte nutzbare Zeichen ist folglich \uFFFD, was fr das Ersatzzeichen fr nicht darstellbare Symbole steht, und damit mitunter optisch nicht von den beiden zuvor erwhnten zu unterscheiden ist.

Java Cheat Sheet

Seite 3

4.3 Strings
Java benutzt durchweg die utf16-Kodierung fr Strings, d.h. es werden jeweils mindestens 2 Byte pro Zeichen verwendet. Fr Symbole mit einem Unicode-Wert ab \u10000 werden entsprechend 4 Bytes verwendet. Um Nicht-ASCII-Zeichen (z.B. Umlaute) auf der Konsole darstellen zu knnen, muss diese auch auf einen dazu kompatiblen Zeichensatz eingestellt sein (z.B. utf8). Der Datentyp char kann ein einzelnes dieser Zeichen aufnehmen (jedoch keine Zeichen aus dem Bereich ber \uFFFF!). Um Literale vom Typ char von Strings zu unterscheiden wird das Zeichen im Sourcecode in einfache Anfhrungszeichen eingeschlossen:
char c = 'a' String s = "a"

Nicht eingebbare Zeichen, oder solche, die eine besondere Bedeutung im Quellcode haben, knnen ber die folgenden Escape-Sequenzen maskiert werden:
\t \n \r \\ \" \'

Tabulator (ASCII-Code: 9) Zeilenvorschub (eng: newline; ASCII-Code 10 bzw. 0x0a) Zeilenrcklauf (eng: carriage return; ASCII-Code 13 bzw. 0x0d) Backslash (\) Anfhrungszeichen Apostroph

Darber hinaus sind auch \b (Rckschritt) und \f (Seitenvorschub) vordefiniert. Auerdem kann jedes Unicode-Zeichen auch numerisch spezifiziert werden:
\uhhhh

mit hhhh = 4-stellige Hexadezimalzahl

\ooo

mit ooo= 3-stellige Oktalzahl

Eine vollstndige Liste aller Unicode-Symbole findet man auf http://www.unicode.org/charts/ Hinweis: im Gegensatz zu den Namen der Basistypen (s.o.) wird der Typenname String immer mit einem Grobuchstaben geschrieben. Strings (und Chars) knnen einfach mit dem Plus-Operator (+) konkateniert werden. Weitere Funktionen sind in der Klasse String zu finden. Einige Beispiele dazu im nchsten Abschnitt.

4.4 Arrays
Arrays eines bestimmten Types werden durch den Namen des Types gefolgt von (leeren) eckigen Klammern deklariert. Alternativ knnen die Klammern auch dem Namen der Variable folgen:
int[] intArray; int intArray[]; // deklariert ein Array vom Typ int // identisch mit der vorherigen Zeile.

Dabei ist die erste Variante ist jedoch die bevorzugte. Das eigentliche Array wird durch ein new gefolgt vom Typenbezeichner und der Zahl der Elemente in eckigen Klammern erzeugt:
int[] intArray = new int[12];

Der Inhalt eines Arrays kann auch inline in geschweiften Klammern vordefiniert werden:
String[] season = {"Winter", "Spring", "Summer", "Fall"};

Java Cheat Sheet

Seite 4

Auf die Elemente eines Arrays kann sowohl lesend wie auch schreibend ber die Klammer-Schreibweise zugegriffen werden. Dabei wird in eckigen Klammern der Index des Elementes angegeben, auf das zugegriffen werden soll:
String ses = season[0]; // der Variable ses wird Winter zugewiesen season[3] = "Autumn"; // das vierte Feld in season wird ersetzt.

Java kennt keine eigentlichen mehrdimensionalen Arrays; Es ist jedoch mglich, Arrays von Arrays, u.s.w., anzulegen:
int[][] intArray2D; int[][][] intArray3D // Array von int-Arrays // Array eines Arrays von int-Arrays

Als Nebeneffekt knnen Arrays daher auch fringed sein, d.h. sie mssen nicht unbedingt rechteckig bzw. quaderfrmig angelegt werden. Das erste Element eines Arrays hat immer die Indexnummer 0 (Null). Jedes Array hat eine implizite Eigenschaft length, welches die Anzahl der Elemente in diesem Array enthlt. Da die Zhlung immer mit Null beginnt, ist die Indexnummer des letzten Elementes immer length-1. z.B. fr eine Schleife ber ein Array vom Typ char[] schreibt man:
for (int i=0; i<myArray.length; i++) { char it = myArray[i]; }

Da length keine Methode, sondern eine Eigenschaft ist, hat die Verwendung in der Schleifenbedingung, keine (oder kaum) negativen Auswirkungen auf die Laufzeit der Schleife. Arrays sind grundstzlich iterierbar; daher kann man auf die Elemente auch mittels einer Iterationsschleife (s.u.) zugreifen. Das obige Beispiel kann man daher auch wie folgt schreiben:
for (char it : myArray) { }

4.5 Enum-Variablen
Ein besonderer Variablentyp ist enum. Dieser besteht aus einer frei definierbaren (endlichen) Werteliste, und garantiert, dass die Variable stets einen der so definierten Werte annimmt. Um einen eigenen enum-Typ zu definieren:
enum Jahreszeit {fruehling, sommer, herbst, winter};

Eine Variable kann dann wie folgt deklariert werden:


Jahreszeit season = winter;

Auch Enum-Variablen knnen als Iterator angesprochen werden (mittels .values()) und knnen daher in Iterationsschleifen verwendet werden.

4.6 Deklaration von Variablen und Konstanten


Variablen werden im Quelltext wie folgt deklariert:
Typenname Variablenname = Initialisierung;

dabei ist die Initialisierung optional aber (meist) empfehlenswert. Zur Initialisierung kann jeder Ausdruck verwendet werden, der einen Wert vom passenden Typ zurckgibt. Das Schlsselwort const ist in Java zwar reserviert, aber es wird (derzeit) nicht benutzt. Eine Art Pseudo-Konstante kann aber wie folgt deklariert werden:
final Typenname Variablenname = Initialisierung;

Java Cheat Sheet

Seite 5

der einzige Unterschied zur normalen Variable ist hier das Schlsselwort final. Das Weglassen der Initialisierung ist so zwar auch mglich, aber offenkundig nicht sehr sinnvoll. Es ist blich (wenn auch nicht wirklich notwendig), Konstanten einen Namen zu geben, der vollstndig aus Grobuchstaben besteht. Deklarationen knnen prinzipiell an jeder Stelle innerhalb einer Klasse oder Methode erscheinen. Der Gltigkeitsbereich (scope) erstreckt sich aber prinzipiell nur ber den Block, in dem die Deklaration steht (einschlielich untergeordneter Blcke).

5. Verzweigungen
5.1 Die if-Anweisung
Eine einfache if-Struktur hat die folgende Form:
if (boolscherAusdruck) { Anweisungen1; } else { Anweisungen2; }

Dabei ist die else-Anweisung (samt zweitem Anweisungsblock) optional, d.h. sie kann komplett entfallen, falls sie nicht bentigt wird. Im Prinzip sind die geschweiften Klammern auch optional, und knnten entfallen, falls nur eine einzige Anweisung folgt, aber dies gilt als schlechter Programmierstil, und fhrt leicht zu (schwer auffindbaren) Fehlern. Eine Ausnahme hiervon stellt die Konstruktion eines else if-Zweiges dar, bei dem es sich letztlich um eine neue if-Anweisung als einzigen Inhalt eines Umschlieenden else- Zweiges handelt. Die Bedinung boolscherAusdruck muss unbedingt in Klammern stehen, und kann jeder beliebige Ausdruck sein, der einen boolschen Wert zurckgibt. Dazu gehren Vergleichsoperationen (s.u.), Methodenaufrufe oder auch Variable vom Typ bool. Die wichtigsten Vergleichsoperationen:
== > < Gleich* Grer Kleiner != >= <= Ungleich Grer oder gleich Kleiner oder gleich

Mehrere Vergleichsbedinungen knnen ber die folgenden Operatoren verknpft werden:


&& Logisches UND || Logisches (inklusives) ODER

Auerdem kann prinzipiell jede Bedinung negiert werden, indem ihr ein Ausrufezeichen vorangestellt wird. Obwohl die logischen Operatoren && und || sehr niedrige Prioritt haben (also immer erst nach den Vergleichen betrachtet werden), empfiehlt es sich, grozgig Klammern (und Leerrume) einzusetzen, damit auch komplexe Ausdrcke lesbar bleiben.
* Achtung: das einfache Gleichheitszeichen (=) ist kein Vergleichs-, sondern ein Zuweisungsoperator! Da aber auch eine Zuweisung einen Rckgabewert hat, und dieser u.U. auch vom Typ boolean sein kann, wird eine Verwechslung nicht unbedingt vom Compiler bemerkt, und kann zu schwer nachvollziehbarem Fehlverhalten fhren!

Java Cheat Sheet


if ((variable_1 >= variable_2) && (variable_1 <= max))

Seite 6

Achtung: Wenn der rechte Ausdruck einer solchen Verknpfung das Ergebnis nicht mehr ndern kann (z.B. wenn bei || der linke bereits true ergibt), wird er nicht mehr betrachtet. Dies kann unerwnschte Nebeneffekte haben, z.B. wenn der zweite Ausdruck einen Funktionsaufruf enthlt, der unbedingt ausgefhrt werden soll! Vorsicht brigens beim Vergleich von Fliekommavariablen, da es hier zu Ungenauigkeiten kommen kann, die zu unerwarteten Ergebnissen fhren.

5.2 Die switch-Anweisung


Mehrfachauswahlen lassen sich zwar auch mit verschachtelten if-Anweisungen realisieren, mit switch geht das aber meist etwas eleganter:
switch (Ausdruck) { case Konstante1: Anweisungen1; break; ... case Konstanten: Anweisungenn; break; default: Ersatzanweisungen; }

Der Ausdruck wird nur einmal ausgewertet, und muss einen byte, char, short, int oder longWert zurckgeben. Achtung: Die Ausfhrung der Anweisungen endet nicht automatisch mit der nchsten case-Anweisung. Deswegen wird normalerweise break benutzt, um aus dem switch-Block herauszuspringen; In bestimmten Fllen kann es jedoch auch sinnvoll sein, break wegzulassen, um einen anderen Programmablauf zu erzielen. Die optionale default-Anweisung dient als Sprungmarke fr den Fall, dass es fr den Wert von Ausdruck keine passende case-Anweisung gibt.

5.3 Der Konditionaloperator ?:


Eine alternative Form des Konditional kann wie folgt gebildet werden:
( boolscherAusdruck ? Wert_1 : Wert_2 )

Im Unterschied zu if dient diese Konstruktion dazu, einen Wert zurckzugeben, und kann daher in Zuweisungen, Konkatenierungen o.. verwendet werden. Falls der boolsche Ausdruck true zurckgibt, ergibt der gesamte Ausdruck den ersten Wert, andernfalls den zweiten. Da Formeln mit diesem Operator jedoch schnell komplizitert und unbersichtlich werden, sollte man diesen Operator nur fr relativ einfache Konstruktionen verwenden. Die Klammern um den gesamten Ausdruck sind zwar nicht notwendig, helfen aber sehr dabei, solche Ausdrcke lesbar zu halten.

Java Cheat Sheet

Seite 7

6. Schleifen
6.1 Abweisende Schleifen mit while
Diese Schleifen werden so lange ausgefhrt, bis eine Bedingung den Wert false zurckgibt. Da die berprfung vor dem Schleifenkrper steht, wird dieser nie ausgefhrt, falls die Bedingung von Anfang an false ergibt.
while (Bedingung) { Schleifenkrper }

6.2 Nicht-abweisende Schleifen mit dowhile


Dieser Schleifentyp funktioniert im Prinzip genau wie die einfache while-Schleife, auer dass hier die Bedingung nach dem Schleifenkrper steht. Daher wird dieser auf jeden Fall mindestens einmal durchlaufen.
do { Schleifenkrper } while (Bedingung)

6.3 Zhlschleifen mit for


Die Zhlschleife dient dazu eine zuvor festgelegte Anzahl von Schleifendurchlufen abzuarbeiten. Allgemein ausgedrckt sieht sie wie folgt aus:
for (Initialisierung; Schleifenbedingung; Inkrementierung) { Schleifenkrper }

Die Anweisung(en) im Feld Initialisierung werden einmalig zu Begin der Bearbeitung dieser Schleifenkonstruktion abgearbeitet. Es wird typischerweise dazu benutzt, eine oder mehrere Variablen auf einen Anfangszustand zu initialisieren. Mehrere Anweisungen werden durch Kommata getrennt. Man kann an dieser Stelle auch Variablen deklarieren; Diese sind dann nur innerhalb der for-Schleife (einschlielich Schleifenkopf!) gltig. Beipiel: int i=0 Die Schleifenbedingung ist ein Ausdruck, der einen boolean-Wert zurckgibt. Dieser Ausdruck wird bei jedem Schleifendurchlauf erneut ausgewertet; Ist der Rckgabewert false, wird die Schleife abgebrochen. Zum Beispiel: i<=10 Das Inkrementierungs-Feld schlielich wird am Ende jedes Schleifendurchlaufes aufgerufen. Typischerweise wird man hier die benutzten Schleifenvariablen zu in- oder dekrementieren. Auch hier knnen mehrere Anweisungen durch Kommata getrennt angegeben werden. Beispiel: i++. Der Vorteil in der Verwendung des Inkrementierungs-Feldes im Gegensatz zu einer Anweisung am Ende des Schleifenkrpers ist, dass erstere auch nach einer continue-Anweisung auf jeden Fall ausgefhrt werden.

6.4 Iteratorschleifen mit for


Durch eine alternative Syntax der for-Schleife kann man eine Iteratorschleife implementieren:
for (Variable: Iteratorobjekt) { Schleifenkrper }

Java Cheat Sheet

Seite 8

Hierbei wird der Schleifenkrper einmal fr jedes Element des Iteratorobjektes aufgerufen; Variable enthlt dabei jeweils ein anderes dieser Elemente. Dies funktioniert u.a. mit Arrays oder Listen.

6.5 Allgemeines zu Schleifen


Bei allen Schleifentypen knnen die geschweiften Klammern wegfallen, wenn der Schleifenkrper nur aus einer einzigen Anweisung besteht; und wie schon bei der if-Anweisung erwhnt, halte ich das fr schlechten Programmierstil! Wie schon bei switch gesehen, ist es mit der Anweisung break mglich, zu jedem Zeitpunk den gerade aktuelle Block (z.B. in einer Schleife) zu verlassen, ausgenommen nur ein Anweisungsblock in einem if-Konstrukt. Dadurch ist es auch mglich, einen bedingten Abbruch durchzufhren. Etwas hnliches macht die Anweisung continue; Allerdings springt sie nicht aus dem Block heraus, sondern nur an dessen Ende, sodass erneut die berprfung der Abbruchbedinung (und evtl. eine Inkrementierung, etc.) stattfinden kann. Beiden Anweisungen kann als optionaler Parameter eine Sprungmarke bergeben werden, die angibt, fr welche Schleife der Befehl gilt (ohne Parameter ist es die jeweils innerste).

7. Ausnahmebehandlung (exceptions)
Im Falle einer Programmausnahme (z.B. bei einem Laufzeitfehler) wird von der Java-Laufzeitumgebung ein exception-Objekt erzeugt und dem Programm zur Verfgung gestellt (geworfen).

7.1 Auffangen von Exceptions


Um Exceptions aufzufangen kann ein Programmblock von try- und catch- Anweisungen umschlossen werden. Letztere erhlt als Parameter den Exception-Typen, der aufgefangen werden soll, sowie einen Variablennamen, unter dem das gefangene Objekt referenziert werden kann.
try { int i = 1/0; System.out.println("Dies wird nie ausgefhrt!"); } catch (ArithmeticException e) { System.out.println("Exception: " + e.getMessage()); }

Obwohl es mglich ist, einfach die relativ unspezifische Klasse Exception als Typ anzugeben, sollte man meist einen mglichst spezifischen Typen angeben, damit nicht die falsche Exception eingefangen wird. Um auf unterschiedliche Exceptions passend reagieren zu knnen, ist es mglich, mehrere catchBlcke fr unterschiedliche Exception-Typen anzugeben, die dann je nach Typ der geworfenen Exception benutzt werden. Auerdem kann optional ein weiterer Block (finally) spezifiziert werden, der auf jeden Fall ausgefhrt wird, ganz gleich, wie der try-Block verlassen wird, also auch im Fall, dass es keinen passenden catch-Block gibt. Tatschlich ist es noch nicht einmal notwendig, berhaupt einen catch-Block zu deklarieren, wenn es stattdessen einen finally-Block gibt. Wird in der aktuellen Methode keine passende catch-Anweisung gefunden, springt der Programmablauf eine Ebene hher, zur aufrufenden Methode, u.s.w. bis zur main-Methode, mit der das Programm gestartet wurde. Falls die Exception bis (sptestens) dorthin nicht aufgefangen wurde, bricht das Programm mit einer Fehlermeldung ab.

Java Cheat Sheet

Seite 9

Um selbst eine Ausnahmesituation auszulsen, wirft man eine neue Instanz der gewnschten Exception mittels des Befehls throw:
throw new MyException("Fehler: Benutzer inkompatibel.");

Eine Methode, die auf diese Weise eine Exception werfen kann, muss in der Methodendeklaration (s.u.) angeben, welche Exceptions generiert werden knnen. Mehr dazu im nchsten Kapitel.

8. Methoden
Unter Java knnen Methoden nur auf Klassenebene definiert werden. Prinzipiell haben alle Methoden einen Rckgabetyp (sind also mithin eigentlich Funktionen); Falls kein Rckgabewert bentigt wird, kann hier einfach void angegeben werden.
<Zugriffsrechte><Rckgabetyp><Methodenname> (<Parameterliste>) { Methodenkrper; return <Rckgabewert>; }

Die Zugriffsrechte knnen entweder als ffentlich (public), geschtzt (protected) oder privat (private) deklariert werden (mehr dazu spter im Kapitel ber Klassen). Zustzlich kann man die Funktion noch als statisch (static) deklarieren. Dazu mehr im Kapitel ber Klassen. Als Rckgabewert kann jeder Java-Datentyp (elementar oder Klasse) dienen, oder eben void, falls kein Rckgabewert bentig wird. Der Rckgabewert, der return bergeben wird, muss zu dem im Methodenkopf deklarierten Typen passen. Falls void deklariert wurde, kann der Rckgabewert auch weggelassen werden. Die Anweisung return kann an jeder Stelle in der Methode aufgerufen werden (nicht nur an deren Ende). Tatschlich kann diese Anweisung sogar ganz weggelassen werden, wenn der Rckgabetyp void ist und der Rcksprung ohnehin am Ende der Methode erfolgen soll. Als Parameterliste knnen beliebig viele Variablendeklarationen durch Kommata getrennt aufgelistet werden. Selbstverstndlich ist auch eine leere Parameterliste mglich. Wichtig ist, dass beim Aufruf der Methode die Zahl und Reihenfolge der Parameter genau eingehalten weden mssen. Als Methodenname kann jeder gltige Bezeichner (der kein reserviertes Schlsselwort ist) verwendet werden. Methoden knnen auch berladen werden, d.h. der gleiche Methodenname kann mehrfach vorkommen, solange die gesamte Signatur (Methodenname plus Parametertypen) eindeutig ist. Wie im Kapitel ber Exceptions gezeigt muss eine Methode im Methodenkopf anzeigen, ob und welche Exception sie mglicherweise werfen kann. Dies geschieht mittels des Schlsselwortes throws:
<Methodenname> () throws <ExceptionListe> { ...

Es knnen wie hier mehrere Exceptions durch Kommata getrennt aufgelistet werden.

9. Klassen
Klassen sind Beschreibungen von Objekten, welche wiederum als Bausteine fr Programme dienen. In Java, als einer objektorientierten Programmiersprache, gibt es prinzipiell keine klassenfreien Methoden; Alles muss stets innerhalb von Klassen definiert werden.

Java Cheat Sheet

Seite 10

9.1 Definition
Die blichste Syntax zur Definition einer Klasse ist recht simpel:
class <Klassenname> { ... }

Fr die Namensgebung einer Klasse gelten die gleichen Vorgaben wie fr die Namen von Methoden, auer dass der Klassenname prinzipiell einmalig sein muss. Es ist auch sinnvoll, der Quellcodedatei, welche die Klasse enthlt, den gleichen Namen zu geben (plus Dateisuffix java). Anders als bei Funktionen, wo es keine inneren Funktionen geben kann, knnen Klassen auch innerhalb von anderen Klassen definiert werden fr diese gelten dann beim Zugriff auch die gleichen Regeln wie fr Funktionen oder Eigenschaften, d.h. sie knnen als private, protected oder public definiert werden. Um eine Instanz einer Klasse zu erstellen, benutzt man den Befehl new, hnlich wie bereits bei den Arrays eingefhrt allerdings werden evtl. Parameter in runden Klammern mitgegeben:
MyClass my = new MyClass(param1, param2);

9.2 Konstruktoren
Bei der Erstellung einer Instanz eines Objektes (durch den Befehl new) wird zunchst die Konstruktormethode aufgerufen, diese trgt prinzipiell den gleichen Namen wie die Klasse. Konstruktoren haben prinzipbedingt keinen Rckgabetyp (sie geben ja die gerade erstellte Klasseninstanz zurck), und sie sollten in den meisten Fllen public, also ffentlich deklariert sein, damit sie auch von auerhalb der Klasse aufgerufen werden knnen (es gibt jedoch Ausnahmen!). Parameter, die fr diese Methoden definiert sind, knnen (und mssen) bei der Erstellung der Instanz mit new auch bergeben werden.
class myClass { public myClass(String name) { ... // Konstruktormethode } }

9.3 Statische Methoden und Eigenschaften


Nicht jede mit einer Klasse assoziierte Methode oder Eigenschaft macht Sinn als Teil der Objektinstanz. Manchmal sollten sie auch unabhngig von Instanzen bestehen, z.B. die Anfangs erwhnte main-Methode. Man nennt solche Elemente, die der Klasse, und nicht dem Objekt zugeordnet sind statische Elemente. Wie bereits Eingangs gezeigt, benutzt man das Schlsselwort static bei der Deklaration. Da diese dann nicht der Instanz sondern der Klasse zugeordnet sind, benutzt man den Klassennamen zur Referenzierung, und nicht einen Variablennamen. Statische Methoden knnen nur auf andere statische Methoden oder statische Eigenschaften zugreifen. Umgekehrt knnen nicht-statische Methoden auch auf statische Elemente zugreifen.

Zugriffsrechte
Wie schon im Kapitel ber Methoden erwhnt gibt es drei Schlsselwrter, welche die Zugriffsberechtigungen fr Methoden und Eigenschaften modifizieren. Diese sind public, protected und private. Wird keine Zugriffsberechtigung angegeben, wird immer private angenommen.

Java Cheat Sheet

Seite 11

Ein Zugriffsrecht von private bedeutet, dass auf die fragliche Methode oder Eigenschaft nur von der Klasse selbst zugegriffen werden kann. Bei public dagegen kann man von auerhalb darauf zugreifen. Die dritte Option, protected (geschtzt) verhlt sich gegenber fremden Klassen wie private, und gegenber abgeleiteten Klassen (siehe auch Vererbung) wie public.

Vererbung
Eine neue Klasse kann von einer anderen, bereits existierenden Klasse abgeleitet werden, solange diese nicht explizit als final deklariert wurde. Man spricht dann von letzterer als der Superklasse der neuen. Zu diesem Zweck dient das Schlsselwort extends in der Klassendefinition:
class <Klassenname> extends <NamederSuperklasse> { ...

Bei dieser Ableitung erbt die neue Klasse alle Methoden und Eigenschaften der Ausgangsklasse, kann jedoch direkt nur auf solche zugreifen, die entweder public oder protected deklariert wurden. Prinzipiell kann die neue Klasse Methoden (oder auch Eigenschaften) der Superklasse berschreiben (engl. overriding) um damit das Verhalten der abgeleiteten Klasse an deren Erfordernisse anzupassen. Dies ist zwar prinzipiell auch mit Klasseneigenschaften mglich, aber dies ist natrlich nur sinnvoll, wenn auf diese Weise der Typ einer Eigenschaft verndert werden soll. Da dies dann aber hufig zu schwer zu durchschauenden Nebeneffekten fhren kann, sollte man dies nur in besonderen Ausnahmefllen machen.

Zugriff auf die bergeordnete Klasse


Eine abgeleitete Klasse kann mittels des Schlsselwortes super explizit auf die Superklasse zugreifen. Dies ist v.a. hilfreich, um auf berschriebene Methoden zugreifen zu knnen, oder um, wie im folgenden Beispiel, den Konstruktor der Superklasse aufrufen zu knnen:
super(); super.test(); // Aufruf des Konstruktors der Superklasse // Aufruf der Methode Test der Superklasse

Die main-Methode
Eine besondere Bedeutung hat auch die main-Methode, wie sie auch in dem Beispiel auf der ersten Seite benutzt wird: Diese muss statisch und ffentlich deklariert werden, und dient dann als Einstiegspunkt fr den Programmstart. Dies dient vor allem dazu, ein Java-Programm berhaupt starten zu knnen, kann aber auch zum Testen von Programmkomponenten hilfreich sein, indem man nmlich die main-Methode so implementiert, dass ihr direkter Aufruf die korrekte Funktionsweise der Klasse austestet.

Java Cheat Sheet

Seite 12

bersicht ber die Klassenbibliothek


Neben einer Programmiersprache enthlt Java auch ein komplexes Framework, das zahlreiche hufig bentigte Funktionen abdeckt. Hier wird nur eine kurze Auswahl der allerwichtigsten Klassen und nur die wichtigsten ihrer Methoden vorgestellt. Merke: Konstruktoren werden bei der Erstellung eines neuen Objektes mit new aufgerufen. Statische Methoden werden an den Klassennamen angehngt (z.B. Arrays.sort(arr)) whrend Instanzmethoden an den Variablennamen einer Instanz angehngt werden (z.B. s.charAt(12)).

java.lang.String
Konstruktor String(char[] chars)
erzeugt einen neuen String aus einem Array vom Typ char[]. Beispiel:
char[] chars = {'a', 'b', 'c'}; String txt = new String(chars); // txt hat jetzt den Wert abc.

Es existieren zahlreiche hnliche Konstruktoren, die Arrays vom Typ int, byte oder auch StringBuffer- und StringBuilder-Objekte als Parameter annehmen. char charAt(int index) gibt das Zeichen an der Position index im String als char zurck. int compareTo(String str) oder int compareToIgnoreCase(String str) Vergleichen den Inhalt des Strings mit dem eines anderen. Das Ergebnis ist 0 wenn die beiden Strings identisch sind, 1 wenn der Vergleichsstring lexigraphisch vor dem anderen einzuordnen ist, und -1 wenn er danach einzuordnen ist. int indexOf(String substr) oder int indexOf(String substr, int startPos) Gibt die Index-Position (0-basiert) des ersten Vorkommens des angegebenen Substrings in dem String an. Falls der Substring nicht darin vorkommt, wird -1 zurckgegeben. int lastIndexOf(String substr) oder int lastIndexOf(String substr, int startPos) Wie indexOf, es wird jedoch das letzte Vorkommen des Substrings gesucht. int length() Gibt die Lnge des Strings in Unicode-Zeichen zurck. Da Index-Positionen 0-basiert sind, entspricht length()-1 immer der letzten Index-Position in einem String. boolean matches(String regex) Gibt true zurck, falls der String durch den bergebenen regulren Ausdruck beschrieben wird. String replaceAll(String regex, String ersatz) Ersetzt alle Treffer fr den bergebenen regulren Ausdruck durch den Ersatzstring.

Java Cheat Sheet

Seite 13

String[] split(String regex) oder String[] split(String regex, int limit) Erstellt ein Array aus Teilstcken des Strings, die jeweils an Treffern des regulren Ausdruckes aufgespalten werden. Optional kann ein Maximum an Teilstcken angegeben werden. char[] toCharArray() Konvertiert den String in ein Array vom Typ char, welches die einzelnen Buchstaben als Elemente enthlt. String toLowerCase() oder String toUpperCase() Erstellt einen neuen String der den gleichen Text wie der Ausgangsstring enthlt, wandelt jedoch alle Grobuchstaben in Kleinbuchstaben um (toLowerCase) bzw. umgekehrt (toUpperCase). String trim() Erstellt einen neuen String, der dem Ausgangsstring entspricht, dem aber fhrende oder nachfolgende Whitespaces (Leerzeichen, Tabs, etc.) fehlen. boolean startsWith(String prefix) oder boolean endsWith(String suffix) Ergibt true wenn der String mit dem angegebenen Teilstring beginnt bzw. endet.

java.lang.Math und java.lang.StrictMath


Diese Klassen enthalten eine Reihe von Methoden fr elementare mathematische Berechnungen. Beide Klassen enthalten jeweils die gleichen Methoden, jedoch wurde Math vor allem auf Geschwindigkeit optimiert, was bei Fliekommaberechnungen mituner zu Lasten der Genauigkeit gehen kann. Alle Methoden und Konstanten dieser Klassen sind statisch. Fr viele dieser Funktionen gibt es Varianten fr float und andere nummerische Datentypen. static double E, static double PI Konstanten, welche die mathematischen Werte e bzw. jeweils bestmglich abbilden. static double ceil(double a), static double floor(double a) Gibt den nchsten ganzzahligen Wert grer (ceil) bzw. kleiner (floor) als der bergebene Wert zurck. static long round(double a), static double rint(double a) Runden den bergebenen Parameter zur nchsten Ganzzahl auf- oder ab. Der Unterschied zwischen diesen beiden Funktionen ist das Verhalten wenn der Nachkommateil genau 0,5 betrgt: round rundet in diesem Fall zur nchsthheren Zahl auf, rint nimmt immer die gerade Nachbarzahl. static double signum(double d) Ergibt +1 falls der Parameter positiv ist, -1 falls er negativ ist, und 0 falls 0.

Java Cheat Sheet

Seite 14

static float abs(double a) Ergibt den Abstand der Zahl a von 0.0 falls die Zahl positiv ist, entspricht dies der bergebenen Zahl, falls sie negativ ist, entspricht das Ergebnis -a. static double max(double a, double b) und static double min(double a, double b) Ergibt die grere (max) bzw. die kleinere (min) der beiden bergebenen Zahlen. static static static static static static static static double double double double double double double double pow(double x, double y) (= x y ), sqrt(double x) (= x ), exp(double x) (= ex), log(double x) (= ln x), log10(double x) (= log10 x), sin(double x) (= sin x), cos(double x) (= cos x), tan(double x) (= tan x)

Verschiedene Funktionen, entsprechend ihrer mathematischen Equivalente. static double random() Erzeugt eine (pseudo-) zufllige Zahl im Bereich zwischen (einschlielich) 0.0 und (ausschlielich) 1.0.

Anwendungsbeispiel:
Um eine mathematische Formel wie die folgende umzusetzen x=

schreibt man in Java: x = Math.sqrt(Math.log(y+1)/Math.exp(y))

ln y 1 ey

java.util.Arrays
static void sort(int[] arr) oder static void sort(int[] arr, int anfang, int ende) Sortiert das angegebene Array aufsteigend nach dem Wert der Arrayelemente. Optional kann ein Bereich angegeben werden, der sortiert werden soll; Dieser wird einschlielich der Position anfang und ausschlielich ende definiert. Anstelle von int-Arrays knnen auch solche aller Elementartypen sortiert werden; auerdem von allen Objekten, welche das Comparable<T>-Interface implementieren (z.B. String, Timestamp, URI, etc.). Zur Sortierung wird fr die Elementartypen eine modifizierte QuickSort-Variante, fr Objekte ein modifiziertes MergeSort verwendet.

Java Cheat Sheet

Seite 15

static int binarySearch(int[] arr, int key) oder static int binarySearch(int[] arr, int anfang, int ende, int key) Fhrt eine binre Suche nach dem Wert key im Array durch. Hierfr muss das Array aufsteigend sortiert vorliegen (z.B. durch die Methode sort), ansonsten ist das Ergebnis nicht vorhersehbar. Falls der Wert im Array gefunden wird, wird der Index des Elementes zurckgegeben. Falls mehrere Elemente mit dem gleichen Wert vorhanden sind, ist nicht vorhersagbar, welches von diesen gefunden wird. Falls der Wert nicht gefunden wird, wird die Position zurckgegeben, an der ein neues Element mit diesem Wert eingefgt werden msste, um die Sortierung beizubehalten, und zwar in der Form (-(Einfgeposition) 1). Neben int-Arrays knnen dieser Funktion auch Arrays aller Elementartypen bergeben werden; auerdem auch Arrays von Objekten, welche das Comparable<T>-Interface implementieren (z.B. String, Timestamp, URI, etc.). static boolean equals(int[] arr1, int[] arr2) Ergibt true falls die beiden bergebenen Arrays gleich sind. Sie gelten als gleich, wenn sie ber die gleiche Anzahl von Elementen verfgen, und die gleichen Werte an den gleichen Positionen stehen. Wie blich knnen nicht nur int-Arrays verglichen werden, sondern solche aller Elementartypen und auch beliebiger Objekte. static boolean deepEquals(Object[] arr1, Object[] arr2) hnlich wie equals fr Objekte, aber es wird ein tiefer Vergleich (d.h. einschlielich beliebig tief verschachtelter Objekte) durchgefhrt. static void fill(int[] arr, int wert) oder static void fill(int[] arr, int anfang, int ende, int wert) Weist jedem Element in einem Array den angegebenen Wert zu. Falls ein Anfangs- und Endwert angegenen wurde, wird nur den Elemente von (einschlielich) anfang bis (ausschlielich) ende der Wert zugewiesen. Auer frint-Arrays kann diese Funktion auch fr Arrays aller Elementartypen sowie beliebiger Objekte verwendet werden

Das könnte Ihnen auch gefallen