Java Programming Refresher
Inhaltsverzeichnis
- 1 Buzzwords
- 1.1 Zeichensatz
- 1.2 Identifier
- 1.3 Kommentare
- 1.4 Datentypen (8 primitive)
- 1.5 Programmblöcke
- 1.6 Variablen
- 1.7 Referenzen
- 1.8 Strings
- 1.9 Arrays
- 1.10 Casting
- 1.11 Expressions
- 1.12 Statements
- 1.13 Blocks
- 1.14 Methoden
- 1.15 Klassen
- 1.16 this
- 1.17 Attribute
- 1.18 Methoden
- 1.19 Methoden-Signatur
- 1.20 Konstruktoren
- 1.21 Destruktoren
- 1.22 OOP-Konzepte
- 1.23 Interfaces
Buzzwords
Zeichensatz
Unicode '\uxxxx' 2 Bytes pro Zeichen (andere Programiersprachen ISO-8859-1)
Identifier
Bezeichner einer Variablen, Methode oder Klasse Bildungsregeln: Anfang _ oder Unicodebuchstabe, keine Ziffer; beliebig lang, keine WhiteSpaces, casesensitiv, kein reserviertes Wort + true, false, null
Kommentare
// Zeile, /* mehrzeilig */, /** *javadoczeile *javadoczeile ... */
Datentypen (8 primitive)
byte(1), short(2), int(4), long(8), float(4), double(8), boolean(1), char(2)
Programmblöcke
Minimal 2 Blöcke (Bsp)
Variablen
Jede Variable hat festen Datentyp, Geltungsbereich (Scope): Lokal, Klassen, Instanz
Referenzen
Jede Variable, die keinen primitiven (einfachen) Datentyp hat ist automatisch eine Referenzvariable.
Strings
String (immutable also const), Stringbuffer
Arrays
Datentyp[] Variable; deprecated: Datentyp Variable[]; Initialisierung: Datentyp[] Variable = new Datentyp[len]; oder Datentyp[] Variable = new Datentyp[]{ ,,, }; mehrdimensional: Datentyp[] Variable; oder Datentyp[][]... Variable = new Datentyp[][]...{ { ,,, },{ ,,, },..., }
Casting
Datentyp Variable = (Datentyp) Variable; Keine Konvertierung von Ziffernstrings in numerische Datentypen, aber char in int möglich! Erweiterndes Casting (Todo Grafik) ===Operand/Operator (todo)
Expressions
Konstrukt aus Konstanten, Variablen, Operatoren, Methoden einfacher
Statements
Eine mit dem Semikolon abgeschlossen Expression wird zum Expressionstatement (Ausdrucksstatements); declaration statements and control flow statements
Blocks
Ein Block ist eine Gruppe von Statements (>=0) in geschweiften Klammern und können überall stehen wo ein Statement stehen kann.
Methoden
[perms][ static][ final] type name([ params ])[ throws exList] { Methodenrumpf[ return expr;]} Wen kein return dann type = void; params call-by-value
Klassen
Beschreibt die Eigenschaften und das Verhalten von Objekten class Name {} mit Dateiname Name.class Name identisch und CaseSenitiv; Anfang mit (Groß-)Buchstabe, sonst noch _ und Ziffern erlaubt. Modifier public Deklaration wenn unbegrenzt (Default-Package) nutzbar. Ohne public nur innerhalb desselben Package. Konstruktoraufruf new Classname();(Default-Konstruktor muss implementiert werden, sobald ein Konstruktor mit Argumenten vorhanden ist) Aufruf in den Parameter-Konstruktoren des "Basisblocks" mit this(<Parameter>); als erstes Statement. Spezielle Referenz super(<Parameter>); Aufruf eines Konstruktor der Elternklasse.
Statische Initialisierung
Finale Klassen
Reserviertes Wort final vor class. Keine Vererbung (Ableitung, Kind-Klasse) möglich. Dienen der Geschwindigkeitssteigerung (z.B. Zugriff auf privat-Variablen durch inline-Methode!)
Abstrakte Klassen
Vererbung (Ableitung) wird durch reserviertes Wort abstract erzwungen.
Eine Instanzierung einer abstrakten Klasse ist nicht möglich.
In abstrakten Klassen sind (oft) nur Methoden-Deklarationen, die dann in konkreten Kind-Klassen (concrete classes) implementiert sind.
Ist eine Methode abstract ist automatisch die Klasse auch abstract und muss auch abstract deklariert sein. (Hinweis: Es scheint auch möglich die Klasse nicht abstract zu deklarieren. Wird dann aber in der Kind-Klasse eine abstakte Methode nicht implementiert führt das zu einer Fehlermeldung des Compilers.(untested))
Finale Attribute
Konstanten Final deklarierte Variablen dürfen nur ein einzges Mal initialisiert und nicht dann nicht mehr verändert werden.
Modifier
Sichtbarkeit
Beeinflussen den Scope und die Zugriffsrechte von Attributen und Methoden.
- Ohne - Package Scope
- public - globaler Scope (Innerhalb einer java-Datei nur bei einer Klasse möglich)
- protected -
- private - nur innerhalb der definierten Klasse
- transient - keine Serialisierung, vor public, private, protected
- volatile - keine Optimierung durch den Compiler, vor public, private, protected
Initialisierung
Klasse ungeladen: Ausführung der statischen Initialiserungs-Blöcke Alle passenden Eltern-Kontruktoren. In der Hierarchie von unten nach oben. Alle Member-Variablen (Instanz-Variablen) werden initialisiert. Konstruktor des zu instanzierenden Objekts
this
reserviertes Wort, vordefinierte Referenzvariable auf das aktuelle Objekt, Zugriff auf alle Daten der Instanz
Attribute
Eigenschaften einer Klasse, auch Felder genannt
- Klassen-Attribute (statische Attribute, static)
- Instanz-Attribute
Methoden
Verhalten einer Klasse
- Klassen-Methoden (statische Methoden, static)
- Instanz-Methoden
- Accessor-Methoden (Getter): public getName(){return name;} name is private, Kapselung
- Mutator-Methoden (Setter) public void setName(type value){this.name = value;}
- toString()-Methode
- main()-Methode: für Klassen, die ausgeführt werden sollen, public static void, exit() wird von der Klasse system zurückgegeben
Methoden-Signatur
Jede Methode besitzt eine Signatur. Sie setzt sich aus dem Methodennamen und der Parameterliste zusammen.
Konstruktoren
Methode mit dem Namen der eigenen Klasse. Ist public und hat keinen Datentyp. Mit new (reserviertes Wort) Konstruktorname wird eine Objektreferenz auf die Instanz vom Typ der Klasse zurückgeliefert. Die Konstruktormethode ist nicht zwingend, ansonsten muss mindestens der Defaultkonstruktor angelegt sein.
Destruktoren
Gibt es nicht explizit. Jedes Objekt das seine Referenz verliert wird durch den Garbage Collector gelöscht.
OOP-Konzepte
Abstraktion
Eigenschaften und Verhalten sind so verallgemeinert, dass daraus eine Klasse entsteht, die dann auf alle gleichartigen Objekte zutrifft.
Kapselung
Zugriff auf private Attribute nut über Getter- und Setter-Methoden.
Vererbung
Inheritance, Klassenbaum (Eltern-/Kind-Klassen) Durch reserviertes Wort extends Nur Einfachvererbung möglich (Workaround: Interfaces) Base Class, Parent Class (Super), Child Class (Derived)
Polymorphie
Polymorphie oder Polymorphismus (gr.Vielgestaltigkeit) ermöglicht, dass ein Bezeichner abhängig von seiner Verwendung Objekte unterschiedlichen Datentyps annimmt. (???) Eine Variable kann einen Wert(Referenz) einer Klasse1 annehmen, obwohl sie als Variable mit Klasse2 definiert wurde, wenn Klasse1 von der Klasse2 abgeleitet ist. Polymorphie (gr. Vielgestaltigkeit) bezeichnet eine Sprachstruktur, nach der beim Zugriff auf Methoden mit identischer Signatur diese unterschiedliche Ergebnisse liefern. Das Verhalten ist insbesondere im Zusammenhang mit Vererbung anzutreffen.
Overloading
Deklaration mehrerer Methoden mit demselben Namen aber unterschiedlichen Argumenten (damit Signaturen unterschiedlich). Ersatz für variable Funktions-Parameter z.B. in Perl.
Overriding
Deklaration einer Methode mit identischer Signatur (Name+Parameter) aber in unterschiedlichen Klassen des Hierarchie-Baums.
Interfaces
Ersatzkonstrukt für Mehrfachvererbung
- Ähnlich abstrakten Klassen
- Keine Konstruktoren und Variablen erlaubt (Konstanten sind erlaubt)
- alle Attribute und Methoden automatisch (implizit) abstract und public
- Deklaration mit reserviertem Wort interface