Systemnahe Klassen und Utilities Systemnahe Klassen und Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1 Die Wurzelklasse Die Klasse bildet die Wurzelklasse in der Hierarchie der Klassen, von der alle anderen Klassen abgeleitet sind In der Klasse sind einige elementare Methoden definiert: • Methoden , , und • Methoden , Kapitel Threading) • Methode Kapitel Reflection) für den Zugriff auf die Runtime-Klasse des Objekts (siehe • Methode für eine String-Repräsentation des Objekts , und für die Thread-Synchronisation (siehe Diese Methoden sind in der Klasse elementar implementiert; insbesondere die Methoden , , und müssen oftmals in Unterklassen überschrieben werden Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 2 Die Klasse Die Klasse System bietet eine Reihe von -Methoden für -Feldern und • Standard-Streams für Eingabe, Ausgabe und Fehlerausgabe • Zugriff auf Umgebungsvariablen • Systemnahe Methoden Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 3 Die Klasse : Standard Ein-/Ausgabe Für die Ein- und Ausgabe stellt Verfügung drei Stream-Objekte zur Diese Standard-Streams können auch gesetzt werden (= Umleiten von Standard Ein-/Ausgabe) ! ! " Pratikum SWE 2 ! © M. Löberbauer, T. Kotzmann, H. Prähofer 4 Die Klasse : Umgebungsvariablen System bietet über Properties Zugriff auf eine Vielzahl von Umgebungsvariablen # ! # $ ! Mit ! erhält man Zugriff auf das ganze Pratikum SWE 2 -Objekt © M. Löberbauer, T. Kotzmann, H. Prähofer 5 Die Klasse Property : Standard-Properties Bedeutung java.version Java-Versionsnummer java.vendor java.vendor.url java.home java.class.version java.class.path os.name os.arch os.version file.separator path.separator line.separator Herstellerspezifische Zeichenkette URL (also ein Internet-Link) zum Hersteller Installationsverzeichnis Versionsnummer der Java-Klassenbibliothek Aktueller Klassenpfad Name des Betriebssystems Betriebssystem-Architektur Versionsnummer des Betriebssystems Trennzeichen für die Bestandteile eines Pfadnamens Trennzeichen für die Trennung von Dateinamen in einer Liste Zeichenkette für Zeilenschaltung user.name user.home user.dir java.vm.specification.version java.vm.specification.vendor java.vm.specification.name java.vm.version java.vm.vendor java.vm.name java.specification.vesion java.specification.vendor java.specification.name Name des angemeldeten Benutzers Home-Verzeichnis Aktuelles Arbeitsverzeichnis Version der VM-Spezifikation Hersteller der VM-Spezifikation Bezeichnung der VM-Spezifikation VM-Version Hersteller der VM Name der VM-Implementierung Version der Spezifikation der Laufzeitumgebung Hersteller der Spezifikation der Laufzeitumgebung Bezeichnung der Spezifikation der Laufzeitumgebung Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 6 Die Klasse Klasse repräsentiert eine persistente Menge von Eigenschaften in der Form von Name – Wert-Paaren Properties können von einen Stream geladen und auf einen Stream geschrieben werden ! "% $ ! "% Die Form der Speicherung auf dem externen Medium (File) ist & ' ( Lesen und Schreiben von einzelnen Property-Werten erfolgt mit Pratikum SWE 2 # ! # $ © M. Löberbauer, T. Kotzmann, H. Prähofer ! 7 Die Klasse : Systemnahe Methoden Schnelles Kopieren von Arrayinhalten $ $ ! $ $ ) Setzen und Zugriff auf den aktuellen ) ) ) ) ! ! Zugriff auf die aktuelle Systemzeit in Millisekunden * ) ! Explizites Laden von Code ! + ! Explizites Starten des Garbage Collectors ! Beenden des Programms % Pratikum SWE 2 ! © M. Löberbauer, T. Kotzmann, H. Prähofer 8 Weitere systemnahe Klassen im Package , • stellt Zugriff auf laufende Java Runtime (= VM) zur Verfügung • ermöglicht Starten von externen Prozessen • Klasse, die für das Laden und Nachladen von Klassen verantwortlich ist • erlaubt in diesen Prozess des Ladens von Klassen einzugreifen • stellt Zugriff auf den JIT-Compiler zur Verfügung ) • Basisklasse für die Realisierung von Sicherheitsmanagementstrategien Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 9 Systemnahe Klassen und Utilities Systemnahe Klassen und Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 10 und Für Daten gibt es zwei grundlegende Klassen: : • stellt einen Zeitpunkt in der Form der Anzahl der Millisekunden seit dem Referenzzeitpunkt 1.1.1970, 00:00:00 dar • Anzahl der Millisekunden wird in einer • ist primitiv und sollte für weitere datumsspezifische Zugriffe wie z.B. Wochentag eines Zeitpunkts nicht verwendet werden • kapselt ein Datum und stellt Zugriff auf datumsspezifische Informationen zu einem Zeitpunkt zur Verfügung, wie z.B. - -Variablen gespeichert Wochentag Monat das Jahr Sommerzeitverschiebung Tag im Jahr … • erlaubt Rechnen mit Datumsobjekten, z.B. Verschieben von Zeitpunkten . ist eine abstrakte Klasse und erlaubt die Implementierung von unterschiedlichen Kalendern; einzige konkrete Spezialisierung ist derzeit / Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 11 Die Klasse (API Auszug) % 0 $ $ The class Date represents a specific instant in time, with millisecond precision ! Allocates a Date object and initializes it so that it represents the time at which it was allocated, measured to the nearest millisecond. ! Allocates a Date object and initializes it to represent the specified number of milliseconds since the standard base time known as "the epoch", namely January 1, 1970, 00:00:00 GMT. ! * Sets this Date object to represent a point in time that is time milliseconds after January 1, 1970 00:00:00 GMT. ! Tests if this date is before the specified date. ! Tests if this date is after the specified date. ! Compares two dates for equality. The result is true if and only if the argument is not null and is a Date object that represents the same point in time, to the millisecond, as this object. ! * Compares two Dates for ordering. ! Converts this Date object to a String of the form: dow mon dd hh:mm:ss zzz yyyy, with dow is day of week, zzz is time zone and yyyy is year. Achtung: definiert eine Vielzahl von weiteren Methoden, wie 1 die aber veraltet sind und nicht mehr verwendet werden sollten Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer , ) , etc., 12 Die Klasse Die Klasse . bietet: -Methoden für die Erzeugung spezifischer eine gegebene Zeitzone und Land (+ ) -Objekte für • Methoden für das Setzen des Zeitpunkts • Methoden für das Setzen von datumsspezifischen Teilen des Zeitpunkts • Methoden für den Zugriff auf die datumsspezifischen Informationen zum Zeitpunkt • Methoden zum Verändern des Zeitpunkts, z.B. Verschieben • Vergleich von Zeitpunkten • Eine Reihe von Konstanten für typische Datumswerte, z.B. Wochentage Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 13 Die Klasse 2 : Erzeugung von # -Objekte können mit static-methode erzeugt werden; Parameter können sein (werden diese weggelassen werden die Einstellungen im Betriebssystem ausgelesen): • die Zeitzone • Locale & * ' , ' !3 , * + 4 , * ,8 !3 4 5 6+ 7 5!$ Alternativ kann direkt ein Objekt vom konkreten Typ / erzeugt werden; Parameter können sein • Zeit (wird keine Zeit angegeben wird die aktuelle Zeit genommen) • die Zeitzone • Locale & * / ' / 9::;$ ,) $ 9$ <=$ ;>$ 9?!3 ' * Pratikum SWE 2 4 , * 4 5 6+ 7 © M. Löberbauer, T. Kotzmann, H. Prähofer 5!$ + ,8 !3 14 Die Klasse ein : Abfragen von Datumsfeldern -Objekt kapselt immer einen bestimmten Zeitpunkt zu diesem Zeitpunkt können alle Kalender-spezifischen Informationen abgefragt werden Dies erfolgt über die Methode ! wobei eine der folgenden in field Calendar.ERA Calendar.YEAR Calendar.MONTH Calendar.WEEK_OF_YEAR Calendar.WEEK_OF_MONTH Calendar.DAY_OF_MONTH Calendar.DAY_OF_YEAR Calendar.DAY_OF_WEEK Calendar.DAY_OF_WEEK_IN_MONTH Calendar.AM_PM Calendar.HOUR Calendar.HOUR_OF_DAY Calendar.MINUTE Calendar.SECOND Calendar.MILLISECOND Calendar.ZONE_OFFSET Calendar.DST_OFFSET Pratikum SWE 2 definierten Konstanten sein kann Minimalwert Maximalwert 0 1 0 1 1 1 1 1 -1 0 0 0 0 0 0 -2*60*60*1000 0 1 5,000,000 11 54 6 31 366 7 6 1 12 23 59 59 999 12*60*60*1000 1*60*60*1000 Bedeutung Ära Jahr Monat - 1 Woche im Jahr Woche im Monat Tag im Monat Tag im Jahr Wochentag Wochentagswiederholung im Monat Vor-/nachmittags Amerik. Stunde Stunde Minute Sekunde Millisekunde Zeitzonenoffset Sommerzeitoffset © M. Löberbauer, T. Kotzmann, H. Prähofer 15 Die Klasse : Setzen von Datumsfeldern Der im -Objekt gespeicherte Zeitpunkt kann verändert werden: mit Methode $ wobei ! die gleiche Bedeutung wie bei der Methode hat mit Methoden $ $ $ $ * * ! $ $ $ ! ) ! kann der Zeitpunkt direkt gesetzt werden mit Methoden $ wird der Zeitpunkt verschoben, wobei Pratikum SWE 2 ! wieder das Datumsfeld angibt © M. Löberbauer, T. Kotzmann, H. Prähofer 16 ! Die Klasse : Weitere Operationen Vergleich von Datumsobjekten erfolgt über Methoden: ! ! Umwandlung auf Methoden: -Objekt und Zugriff auf Millisekunden seit 1.1.1970 mit * * Pratikum SWE 2 ) ! ! © M. Löberbauer, T. Kotzmann, H. Prähofer 17 Die Klasse : Konstante Calendar definiert eine Reihe von Konstanten für Werte bei Datumsobjekten 8& 1 ) & 1 @ *8- 1 A &8 -1 @ " ")B") ) / definiert zusätzlich die Konstanten B für „before Christ “ und „anno domini“ (= after Christ) Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 18 Beispiel : Ausgabe einer Monatstabelle Folgendes Programm gibt eine Monatstabelle wie gezeigt aus , ,C3 * D EF 66 # ' / ; << <P 9N G N <9 <= 9> !3 ' , , ' , ,) &*H!3 ) 17 G7) &*H!3 0 , , # 66 J ! D ) 9C ? = <: <> <O 9? 9; ?: ?< # / 66 O <; 9< 9P ) < P <N 99 9= ' 17 G7) &*H$ <!3 , , 17 G7I""J!3 0 , 66 " , 5 4 ) J ' , ) 5!3 K # , 8& , G 5 13 L # 3 MM ! 5!3 D ,,, Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 19 > <? 9: 9O Beispiel Calendar: Ausgabe einer Monatstabelle (forts.) D 66 * ' , , L <:! , 66 , , 17 G7) &*H!3 , 5 5!3 !3 # * C '' # ! , , 5C 5!3 , , 5 5!3 66 & 4 # '' , , !3 , 66 Q , * , # ' *8- 1! 0 17 G7) &*H$ <!3 , , 17 G7I""J!3 R , ,) &*H! '' 66 66 B $ B * S # T' , , !3 < Q ) 4 , 8& 1! !3 R R Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 20 Literatur Krüger, Handbuch der Java-Programmierung, 3. Auflage, Addison-Wesley, 2003, http://www.javabuch.de: Kapitel 16 Horstmann, Cornell, Core Java 2, Band 1 - Grundlagen, Markt und Technik, 2002: Kapitel 4.2 JavaTM 2 Platform, Standard Edition, API Specification • Package , • Package , Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 21 Programmbeispiele Beispiel : Ausgabe einer Monatstabelle: Core Java 2, Band1: < Pratikum SWE 2 ;, * © M. Löberbauer, T. Kotzmann, H. Prähofer 22