1
Java 1.2 hat es auch noch nicht. Allerdings die Erweiterungen Generic Java und Pizza.
2
ASCII und ISO-Latin-1 (``mit Umlauten'') kompatibel
3
aber sich darauf zu verlassen, ist schlechter Stil.
4
Der Operator ? beipiesweise für bedingte Ausdrucke (<cond>?<expr1> : <expr2>) ist dreistellig und Mixfix, Inkrement mit ++ ist einstellig und Postfix.
5
Ansonsten bitweise.
6
Es gibt noch einen zweiten Nutzen von Klassen wie Integer. Das kommt aber erst später.
7
Alternativ ist auch auch float height [] = .. erlaubt, ist aber nicht konsistent mit der Vorstellung, daß die Syntax immer <datatype> <ident> = new <datatype> lautet.
8
Genauer gesagt: es funktioniert auch mit Objekten, die eine Methode toString zur Verfügung stellen.
9
break in Schleifen wird manchmal als schlechter Stil angesehen.
10
Das gleiche gilt für eine Methode ohne return.
11
Das ist die offensichtliche Art sich neue Objekte zu schaffen. Eine weitere ist als Literale in Spezialfällen (Strings, Arrays).
12
Bei Zweideutigkeiten (lokale Variablen oder Namensgleichheit mit einem formalen Parameter) innerhalb einer Methode muß man this verwenden, wenn man die nicht-methodenlokale Variable/Methode meinen will.
13
Geht auch bei normalen Methoden, d.h. nicht-Konstruktormethoden.
14
Instanzen der betrachteten Klasse dürfen den Klassennamen weglassen.
15
static final anstelle von #define ....
16
Wie man eine Überbuchung des Kurses verhindert, kommt später.
17
Grund: Math hat viel mit Zahlen zu schaffen, und das sind feste Werte, keine Objekte.
18
natürlich nicht bei Instantiierung eines zugehörigen Objektes.
19
Interfaces kommen erst später.
20
d.h. zur Laufzeit
21
Im Endeffekt laufen alle genannten Dinge auf das selbe hinaus. die Wortwahl kehrt nur verschiedene Aspekte hervor: Binding bezieht sich auf Compilersichtweise. Dispatch und message passing eher die das Verhalten der Implementierung zur Laufzeit.
22
Das Beispiel während der Vorlesung mit bloß int i; war falsch, zumindest die erste Ausgabe hatte ich mir offensichtlich falsch notiert. Es verhält sich wie int i = 0;, was einleuchtet.
23
Warum die Designer von Java Felder statisch und nicht wie Methoden dynamisch gebunden haben, ist unbekannt. Beachte: wenn von ``statischer Bindung'' der Feldvariablen die Rede ist, sind nicht Feldvariablen mit dem static Modifier gemeint, sondern die normalen Instanzvariablen. Statisch meint: wenn der Compiler herausfinden muß, welcher Code bzw. welche Daten zu welchem Namen (hier Methoden- bzw. Feldnamen) gehören, dann legt er diese Zuordnung oder Bindung zur Compilezeit fest, sprich: er schaut in der Klassendefinition nach. Natürlich sind als static deklarierte Felder und Methoden in diesem Sinne statisch gebunden. Methodenaufruf dagegen ist in oo-Sprachen dynamisch.
24
Später, wenn wir Casten kennengelernt haben werden, kann man den Unterschied auch daran sehen: Deklarierte man B b; aber verwendete man in der Ausgabezeile System.out.println("b.x = " + ((A)b).x);, also ``b, gecasted auf A'', so bekommt man den Wert des Feldes wie er in A deklariert wird, also 3! Umgekehrt, eine Instanz von A |anders als etwas was man von ``Typ'' A deklariert hat| kann man nicht nach B casten, denn es führt zu einem Laufzeitfehler.
25
Am besten, man vermeidet es ganz indem man Zugriffsmethoden schreibt.
26
Eine Sonderform des Überschreibens.
27
Kommt später genauer, was das heißt
28
Wäre ergebnis nicht bei der Deklaration bereits ein Wert zugewiesen worden, hätte der Compiler erkennen können, daß ich schummele.
29
das Schlüsselwort abstract muß nicht angegeben werden, ist aber implizit vorhanden.
30
Bei mehreren Interfaces: alle Methoden. Falls die Interfaces eine Hierarchie bilden, auch noch deren darüberliegenden Interfaces.
31
Members = bisher Methoden und Felder.
32
Interfaces werden, was Zugriff und Namensresolution betrifft, genauso behandelt wie Klassen, deswegen werden sie hier nicht extra genannt.
33
Wenn kein Paket angegeben, dann an oberster Stufe in einem anonymen default Paket
34
Um damit umzugehen, wird auch die super-Syntax entsprechend erweitert. Vor dem Gebrauch wird abgeraten
35
technische Bemerkung: final deswegen, weil der Compiler Kopien für die lokale Klasse anfertigt.
36
Man kann ausprobieren, was der Compiler draus macht: er erzeugt eine neue Klasse Lister$1.class
37
out ist eine ``Konstante'' (public static final) aus java.lang.System.
38
PrintStream wird nicht mehr so gern gesehen in 1.1. Lieber PrintWriter. Allerdings wird man PrintStream nicht so schnell los...
39
Pufferung wg. Effizienz
40
-1 als EOF-Rückgabe
41
Zu ersten Anmerkungen zu Applets, siehe auch die einführende Lektion zu Beginn.
42
die graphische Komponente Frame kommt später genauer, es ist eine Art top-level Fenster.
43
die Implementierung der Graphiken ist deviceabhängig, Instanzen von Graphik stellen also ein deviceunabhängige Schnittstelle zur Verfügung. Graphics2D ist eine 1.2-Erweiterung von Graphics
44
Bitte selber in der Klasse nachschauen, was es so gibt.
45
Erweitert gegenüber 1.1
46
Oder über eine ``Map'' = endliche Abbildung, Assoziationsliste.
47
public static final
48
Siehe auch http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html
49
"`assistive technology"' ..."`pluggable"', "`trivially configured"', "`pioneering design"' "`great step forward"', "`PLAF=pluggable-look-and-feel"'...
50
Mit deutschten Worten wie "`Komponente"' meine ich hier nur "`graphisches Dings"', Component sei die konkrete Javaklasse.
51
Erweitert zu LayoutManager2
52
1.1, 1.2 mit Swing
53
Webbrowser unterstützen oft nur das Ereignismodell von Java-1.0. (Stand 1999)
54
Wie war das noch mit Java: ``write once, run everywhere, everytime''?
55
in Java 1.0 war es die Klasse Event.
56
Ausnahme: der Klasse MouseEvent sind1 zwei Listener-Schnittstellen zugeordnet: MouseListener und MouseMotionListener.
57
Die Adapter hier können als eine sehr einfache Form der Adapter-Muster [GHJV95] betrachtet werden.
58
Thread hat verschiedene Konstruktoren.
59
nicht nur auf die Methode.
60
Streng genommen, keine deprecated Methode
61
Zwischen Thread.MAX_PRIORITY und Thread.MIN_PRIORITY. Default: Thread.NORM_PRIORITY.
62
Je kleiner die Zahl, desto höher die Dringlichkeit oder Priorität.
63
Fast immer. Der Fairness halber, um Aushungern einzelner Threads zu verhindern kann es Ausnahmen geben. In keinem Fall darf die Korrektheit eines Algorithmusses von Prioritäten oder der Schedulingstrategie abhängen.
64
oder mit stop abgebrochen wird, was aber nicht empfohlen wird.
65
z.B. 21 = FTP, 23 = Telnet, etc. Siehe RFC 1700
66
TCP und UDP sind die zwei Internettransportprotokolle transmission control protocol und user data protocol.
67
vergleiche das Kapitel über Threads
68
Wie z.B. mittels System.out
69
Zur momentanen IP-Adressierungsschema s. [Tan96].
70
Man hätte auch den String im Ganzen übergeben können: URL(protocol + "://" + hostname + filename).
71
Das ganze ist analog dem Vorgehen bei Sockets und Ports oder normalem File-I/O. Ports gehören zur Transportschicht, während URLs zur Anwendungsschicht gehören. Ebenfalls zur Anwendungsschicht gehören die Protokolle ftp, mail, telnet, http, etc.
72
Entspricht ungefähr accept bei ServerSocket auf Transportschichtebene.
73
Enterprise-Programmierung ist ein schicker Name für verteilte Anwendungsprogrammierung.
74
das einzige Interface aus java.rmi.*. Der Rest sind der Klassen dient fast nur der Ausnahmebehandlung.
75
deswegen sind auch nur die Methoden, die im Interface genannt sind, von Ferne zugreifbar.
76
überwacht i.d.R. Port 1099
77
man kann auch volle IP-Adressen verwenden
78
Enterprise, in diesem Zusammenhang, ist ein fescher Name für "` verteilt"'.
79
(Structured Query Language), meist SQL-92 bzw. Teilmenge davon.
80
guter Stil, auch wenn das Schließen implizit geschehen sollte, z.B., wenn man eine Verbindung schließt.
81
Es gibt noch übergeordnete Strukturen (Cluster und Kataloge) oberhalb von Schemata aber die sind für uns ohne Belang.
82
die letzten 4 können mit NOT modifiziert werden