Weitere Sprachfeatures

Werbung
Institut für Programmierung
und Reaktive Systeme
Weitere Sprachfeatures
Markus Reschke
21.08.2014
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Strings
Klasse String schon bekannt
Typ für Zeichenketten
Hier neu: ein paar Methoden dieser Klasse
Markus Reschke | Weitere Sprachfeatures | 2
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Methoden von String
Siehe StringEx.java
Markus Reschke | Weitere Sprachfeatures | 3
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
String-Builder
String-Objekte nicht veränderbar
+ erzeugt neue String-Objekte
Ineffizient für viele Konkatenationen
Alternative: StringBuilder
Markus Reschke | Weitere Sprachfeatures | 4
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
String Builder
Siehe StringBuilderEx.java
Markus Reschke | Weitere Sprachfeatures | 5
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Printf
System.in / out
printf
sind
PrintWriter
erlaubt formatierte Ausgabe
Zwei Argumente: Den auszugebenden String mit Platzhaltern und
die für diese einzusetzenden Werte
Wichtigste Platzhalter:
%d
%f
%n
→ Ganzzahl
→ Gleitkommazahl
→ Zeilenumbruch
Formatierung von Zahlen möglich, z.B. %05.2f → Float mit 5 Stellen
vor dem Komma mit führenden 0 bei Bedarf, sowie 2
Nachkommastellen
Auch zum Erzeugen von Strings möglich, siehe
java.util.Formatter
Markus Reschke | Weitere Sprachfeatures | 6
Institut für Programmierung
und Reaktive Systeme
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
String Builder
Siehe Format.java
Markus Reschke | Weitere Sprachfeatures | 7
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Motivation
Manchmal hat man Typen mit einer begrenzten Anzahl von
möglichen Werten
Wochentage, Geldscheine, Positionen in einer GUI
Realisierung früher oft als statische Konstanten in einer Klasse
Markus Reschke | Weitere Sprachfeatures | 8
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Konstantenchaos
Siehe NoEnums.java
Markus Reschke | Weitere Sprachfeatures | 9
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Enums
Aufzählungstypen
Klassen mit einer begrenzten Anzahl von erstellen Objekten
Können wie Klassen Methoden, Attribute und Konstruktoren haben
Es können keine neuen Instanzen des Aufzählungstyp erstellt
werden außer den vorher definierten
Markus Reschke | Weitere Sprachfeatures | 10
Institut für Programmierung
und Reaktive Systeme
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Enums
Siehe WithEnums.java
Markus Reschke | Weitere Sprachfeatures | 11
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Motivation
Manchmal Objekte statt primitiven Datentypen nötig
Collections, Generics
Wrapper-Klassen speichern einen Wert vom primitiven Typ in einem
Objekt
Wrapperklassen:
Byte
Short
Integer
Long
Float
Double
Character
Boolean
Void
Immutable / Unveränderbar wie Strings
Markus Reschke | Weitere Sprachfeatures | 12
Institut für Programmierung
und Reaktive Systeme
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Enums
Siehe Wrap.java
Markus Reschke | Weitere Sprachfeatures | 13
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Autoboxing/unboxing
Seit Java 5: Automatische Konvertierung zwischen Wrapper und
primitivem Datentyp
Markus Reschke | Weitere Sprachfeatures | 14
Institut für Programmierung
und Reaktive Systeme
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Enums
Siehe Box.java
Markus Reschke | Weitere Sprachfeatures | 15
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Pakete
Pakete fassen zusammengehörende Klassen zusammen
Zusätzliche Möglichkeit zur Strukturierung von Programmen
Stardmäßig liegen neue Klassen im Default-Paket
Paketnamen bestehen aus mehreren Namensbestandteilen getrennt
durch .
z.B. name.markusreschke.plab
Werden auf Verzeichnisstruktur abgebildet:
name.markusreschke.plab → ./name/markusreschke/plab
Klassen werden mit package Paketname; in der ersten Zeile einer
.java-Datei einem und dem Ablegen im richtigen Verzeichnis einem
Package zugeordnet
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Namen und Importe
Jedes Programmelement hat einen vollständigen Namen
Form meistens Paket . Klasse . Klassenelement
java.util.ArrayList
Vollständiger Name oft lang und daher unpraktisch zu verwenden
Mit import Name; am Anfang einer .java-Datei können Klassen aus
Paketen in den aktuellen Namensraum importiert werden.
Dadurch reicht der Klassenname anstatt des vollständigen
import Paketname.*; importiert alle Klassen des Pakets
1
2
1
2
3
4
5
import java . util . ArrayList ;
import java . util .*;
Mit
import java . util . ArrayList ;
ArrayList < Foo > = new ArrayList < >() ;
statt
java . util . ArrayList < Foo > = new java . util . ArrayList < >() ;
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Statischer Import
Seit Java 5: Import von statischen Methoden aus Klassen möglich
import static Paket.Klasse.Methode;
Wildcard auch hier möglich
import static Paket.Klasse.*;
1
2
1
2
3
4
5
import static java . lang . Math . sqrt ;
import static java . lang . Math .*;
Mit
import static java . lang . Math . sqrt ;
sqrt (5) ;
statt
Math . sqrt (5) ;
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Pakete
Siehe Validation/
Markus Reschke | Weitere Sprachfeatures | 19
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Classpath
Classpath gibt an, wo Java nach .class-Dateien suchen soll
Angegebene Verzeichnisse sind jeweils das Default-Paket
Enthält standardmäßig das aktuelle Verzeichnis
Kann angepasst werden durch Setzen der CLASSPATH
Umgebungsvariable
z.B.
CLASSPATH=.:/path/to/class/files/from/awesome/library
Alternativ über -cp Schalter für java/javac z.B.
java -cp .:/path/to/class/files/from/awesome/library Foo
Markus Reschke | Weitere Sprachfeatures | 20
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Lokale Klassen
Klasse definiert innerhalb einer anderen Klasse (äußere Klasse)
Gehört zu einer Instanz der äußeren Klasse
Definition wie normale Klasse
Darf auf alle Elemente der äußeren Klasse zugreifen
Aktuells Objekt der äußeren Klasse
Outer.this
Darf keine statischen Elemente haben
Falls nach außen sichtbar, können neue Instanzen dort erzeugt
werden mit outerObj.new Inner()
Markus Reschke | Weitere Sprachfeatures | 21
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Beispiel: lokale Klassen
Siehe Local.java
Markus Reschke | Weitere Sprachfeatures | 22
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Statische Lokale Klassen
Wie lokale Klassen definiert in einer anderen Klasse
Assoziiert mit äußerer Klasse, nicht mit deren Objekten
Dürfen nur auf statische Elemente der äußeren Klasse zugreifen
Verhält sich ansonsten wie eine normale, nicht innere Klasse
Zugriff aus Klasse von außen (falls erlaubt):
1
2
3
4
5
6
Outer.Inner
public class Outer {
public static class Inner {
}
}
...
Outer . Inner i = new Outer . Inner () ;
Markus Reschke | Weitere Sprachfeatures | 23
Institut für Programmierung
und Reaktive Systeme
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Lokale Klassen in Methoden
Lokale Klassen auch in Methoden erlaubt
Auch hier Zugriff auf Elemente der äußeren Klasse erlaubt
Falls Methode statisch: Zugriff nur auf statische Elemente
Außerdem Zugriff auf mit
final
markierte lokale Variablen
Markus Reschke | Weitere Sprachfeatures | 24
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Anonyme Klassen
Klassen ohne Namen
Werden von genau einem Interface oder einer Klasse abgeleitet
Können dort definiert werden, wo auch
new
verwendet werden kann
Verhalten sich ansonsten wie lokale Klassen
Markus Reschke | Weitere Sprachfeatures | 25
Institut für Programmierung
und Reaktive Systeme
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Beispiel: Anonye Klassen
Siehe Anonym.java
Markus Reschke | Weitere Sprachfeatures | 26
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Annotationen
Fügen Metadaten zu Klassen hinzu
Metadaten: Daten über Daten
Form:
@name
Anwendbar auf: Klassen, Interfaces, Pakete, Methoden, Attribute
(angegeben durch @Target bei Definition der Annotation)
Können ausgewertet werden, um zusätzliche Funktionen realisieren
ohne Ändern der Klassendefinition
Entwerder zur Laufzeit, in der Class-Datei oder nur im Quellcode
verfügbar (angegeben durch @Retention bei Definition der
Annotation)
Markus Reschke | Weitere Sprachfeatures | 27
Institut für Programmierung
und Reaktive Systeme
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Annotations
Vorgefertige Annotationen
stellt sicher, dass Methoden andere überschreiben, sonst
Kompilierfehler
@Override
erzeugt Warnungen beim Kompilieren, wenn damit
annotierte Elemente verwendet werden
@Deprecated
1
2
3
4
@Override // public fehlt , wird nicht ueber schriebe n
String toString () {
...
}
Markus Reschke | Weitere Sprachfeatures | 28
Institut für Programmierung
und Reaktive Systeme
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Anwendung von Annotationen
Siehe Validation/
Markus Reschke | Weitere Sprachfeatures | 29
Institut für Programmierung
und Reaktive Systeme
Annotations
Strings
Printf
Enums
Wrapper-Klassen
Pakete
Classpath
Verschachtelte Klassen
Überblick und Ausblick
String
StringBuilder
Wrapper
Enums
Pakete
Classpath
Lokale Klassen
Anonyme Klassen
Annotations
Montag: Datenstrukturen
Markus Reschke | Weitere Sprachfeatures | 30
Institut für Programmierung
und Reaktive Systeme
Annotations
Herunterladen