- 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