 
                                PI Burgenland
Java und JavaScript
1. Teil
Güssing, Oktober 1999
Martin Weissenböck
Java
Eigenschaften
 Wurzeln
 Sprachelemente
 Entwicklungswerkzeuge
 Didaktische Qualität
 Zusammenfassung
Java: objektorientiert
Datenkapselung:
Datenelemente und Unterprogramme
(Methoden) in einer Klasse vereinigt
 Vererbung:
Übernahme von Daten und Methoden,
Ergänzung bzw. Überschreiben von Methoden
 Polymorphie:
alle Klassen sind „virtuell“
Java: verteilt
Java-Bibliotheken sind über das Internet
erreichbar
 Java-Bibliotheken können auch in einem
lokalen Netz zur Verfügung gestellt werden
 Verwendetes Protokoll: TCP/IP
Java: robust
Keine Pointer-Arithmetik (wie in C), daher kein
illegaler Speicherzugriff möglich
 Prüfung von Array-Indizes; damit wird die
Überschreitung von Grenzen verhindert
 Ausnahmebehandlungen („exception“) müssen
vorgesehen werden
Java: sicher
Java-Programme werden über das Netz verteilt
 Byte-Code schützt vor Verfälschungen und
Virenbefall
 Kontrolle durch Prüfsummen
 Zugriffe auf das Dateisystem nur in der
vorgesehenen Weise erlaubt
Java: architekturunabhängig
Byte-Code erlaubt den Einsatz auf allen
Systemen, sofern das Laufzeitsystem vorhanden
ist: Einsatz einer „virtuellen Maschine“
 Beispiele: UNIX, Windows 9*, Windows NT,
OS/2, Apple, Sun...
 Wirtschaftliche Bedeutung,
Rechtsstreitigkeiten!
Java: portierbar
Alle Datentypen sind intern immer gleich
dargestellt
 Beispiele:
 int
ist immer eine 32-Bit-Zahl, mit Vorzeichen
 float ist immer eine 32-Bit-Zahl gemäß IEEE-754Spezifikation
Java: interpretiert
Byte-Code wird interpretiert
 Kein Linken von Programmteilen
 Keine Make-Prozeduren
 Klassen können unabhängig von einander
geändert werden
 Neuübersetzung des gesamten Programms bei
Änderungen nicht notwendig
Java: hohe Rechenleistung
Byte-Code ist dem Maschinencode schon sehr
ähnlich
 Einfaches Realisieren von Multithreading-Tasks
 Dadurch Geschwindigkeitssteigerung
 Weitere Beschleunigung durch Just-in-timeCompiler (Übersetzung des Byte-Code auf der
Zielmaschine in deren Maschinencode)
Java: multithreadfähig
Quasi-paralleles Abarbeiten unterschiedlicher
Aufgaben bringt Geschwindigkeitsvorteile
 Einfache Realisierung von Threads durch die
Ableitung einer neuen Klasse
Java: dynamisch
Werden in einer Superklasse neue Methoden
oder Instanzvariablen eingeführt, müssen die
Subklassen nicht geändert werden
 Speicherplatz wird mit new angefordert
 Speicherplatz wird automatisch freigegeben.
Java: kompakt
Keine Include-Dateien (Header-Files)
 Alle Informationen in einer Datei
 Übersichtliche Größe durch das Teilen in
einzelne Dateien (Teilen in Klassen)
Java: Eigenschaften (1)
Applets: in HTML-Dateien eingebettet
Interpreter:
Interaktion
Animation
Netscape, Internet Explorer o.ä.
Appletviewer
Plattformunabhängig
Win95/98, Win NT/2000, Mac OS 7.5, Solaris, Win 3.1x
Java: Eigenschaften (2)
Applications:
Selbständige JAVA-Programme
 Laufzeitinterpreter (*.CLASS)
 Compiler (*.EXE)
Kostenlose Nutzung:
 Compiler,
Interpreter, Library, Dokumentation
 Internetadresse http://java.sun.com
Java: Wurzeln
C/C++: Syntax, Kontrollstrukturen, Variablen,
Gültigkeitsbereiche
 Objective-C: Interface-Konzept
 C++: Klassenkonzept
 Small-Talk: Erweiterbarkeit zur Laufzeit,
dynamische Speicherverwaltung,
Multithreading
Java: Sprachelemente
Grundlegender Aufbau
 Verzweigungen, Schleifen
 Einfache Datentypen
 Strukturierte Datentypen
 Unterprogramme
 Klassen
 Exceptions
Java: Grundlegender Aufbau (1)
Variablennamen (Unicode), Kommentare,
Groß-/Kleinschreibung wie in C/C++
 Klassen “überall”
 System-Klasse immer verwendbar
public class Hallo
{ public static void main(String[] args)
{ System.out.println(“Hallo”);
}
}
Java: Grundlegender Aufbau (2)
Ein- und Ausgabe, Variablenvereinbarung:
import myio;
public class b03
{ public static void main(String[] arg)
{ int zahl1, zahl2, ergebnis;
zahl1=myio.readInt();
zahl2=myio.readInt();
ergebnis=zahl1+zahl2;
System.out.println(ergebnis);
}}
Java: Grundlegender Aufbau (3)
Eine Applet-Referenz:
import java.applet.Applet;
//Anweisung
import java.awt.Graphics; // Directory-Struktur
public class HalloAp extends Applet //Klasse
{ public void paint (Graphics g) //Minimum!
{ g.drawString(“Hallo”,50,25);
}
}
Java: Grundlegender Aufbau (4)
Das zugehörige HTML-File:
<title>Hallo Testprogramm</title>
<hr>
<applet code=“HalloAp.class” width=250 height=80>
</applet>
<hr>
Java: Grundlegender Aufbau (5)
Keine externen Variablen/Funktionen
 Konstanten
 C/C++
-Schreibweise: const int a=5;
 Java-Schreibweise:
private final static int a=5;
Kommentare
/* und */, ferner //
/** zur Dokumentation
Java: Applets
Kein main-Programm
 eingebettet in einer public class,
die von Applet abgeleitet ist
 eine public-Methode paint
 Applet-Referenz in einer HTML-Datei
 Parameterübergabe von der HTML-Datei an das
Java-Programm möglich
Java: Verzweigungen, Schleifen
if-, switch-Anweisung wie in C/C++
kein goto
while-, do/while- und for-Schleifen wie in
C/C++
 lokale
Vereinbarung der Laufvariablen
 Marken vor geschachtelten Schleifen:
break und continue “von innen” möglich
Java: Einfache Datentypen
Gleitkomma: float, double
 Ganzzahlig: byte, short, int, long
 Logisch: boolean
 Zeichen: char
 ...alle auch mit Initialisierung
 Operatoren wie in C/C++, ferner:
Shift+zero extension: x>>>y, x>>>=y
String concatenation: +
Java: Ganzzahlige Größen
Name Bitzahl Wertebereich
long
64
-9.223.372.036.854.775.808L...
+9.223.372.036.854.775.807L
int
32
-2.147.483.648...+2.147.483.647
short 16
-32.768...+32.767
byte
-128...+127
8
Java: Gleitkommawerte, Char
Name
Bitzahl Wertebereich
double
64
1.7e-308D...1.7e+308D
float
32
3.4e-038F...3.4e+038F
Char
16
‘\u0000‘...‘\uffff‘
Java: Operatoren
Höchste Priorität:
(
++
*
+
>>
>
==
)
-/
>>>
>=
!=
[
~
%
<<
<
]
!
<=
.
instanceof 
Java: Operatoren
&
^
|
&&
||
?:
=
,
op=
Java: Strukturierte Daten (1)
Felder:
int[ ] feld; // oder int feld[ ];
// nur Zeiger, keine Speicherreservierung
feld = new int [5];
Alternative:
int[ ] feld = new int [5];
kein “free”
int[ ] feld = {1, 2, 3+4, 5, 6};
Java: Strukturierte Daten (2)
Klassen: Konstruktoren, Methoden und Daten wie
in C++
 Modifikatoren für den Zugriff:
private
nur von der eigenen Klasse
friendly
vom selben Modul aus
private protected nur von abgeleiteten Klassen
protected
auch von abgeleiteten Klassen
public
von allen Klassen möglich
Java: Modifikatoren
private
friendly
private protected
protected
public
Selbe Klasse
Selbes Package
Subklasse
Selbes Package,
andere Klasse
Anderes Package
Subklasse
Anderes Package
andere Klasse
Java: Variablen/Modifikatoren
Kennzeichen für Klassenvariable
final
Wert kann nicht geändert werden
(Konstanten!)
transient Daten nicht persistent
volatile Asynchrone Änderung möglich;
keine Optimierung, die Variable
bleibt im Speicher
static
Java: Unterprogramme, Klassen
Keine Pointerparameter
 Keine Referenzen für einfachen Datentypen
 Ergebnistyp: beliebig
 Überlagerung möglich (wie in C++)
 Konstruktoren ähnlich zu C++
 super und this zum Zugriff auf die
Basis-Klasse und die eigene Klasse
 keine Destruktoren, aber finalize()
Java: Klassen
static in einer Klasse leitet eine Initialisierung
ein
 Vererbung:
class B extends A {...}
keine Mehrfachvererbung
(daher auch keine virtuellen Basis-Klassen)
 statt dessen: interface
Java: Exceptions (1)
try { /* das Programm */ }
catch (BesondererFehler e)
{ /* Fehlerbehandlung 1 */ }
catch (Exception e)
{ /* Fehlerbehandlung 2 */ }
Auslösen:
throw new BesondererFehler (a, b);
Java: Exceptions (2)
try { /* das Programm */ }
finally
{ /* immer ausführen */ }
Exceptions, die von einem Unterprogramm
ausgelöst werden können:
public static void Bsp()
throws BesondererFehler, FehlerX
{ /* Unterprogramm */ }
Java: Entwicklungswerkzeuge
Java Developer’s Kit (Sun, Vers. 1.2)
Java Café Lite(Symantec)
C++ (Vers. 5.0 von Inprise) mit Java-Compiler
J-Buider (Inprise)
Visual J++ (Vers. 6.0 von Microsoft, Visual Studio)
JDK (frei nutzbar) + WinEdit (Shareware)
Sybase, PowerJ (V2.1 für Schulen gratis, V2.5, V3)
Java: Didaktische Qualität (1)
Sprache
Basic
(Taschenrechner)
Vorteile
sehr einfach beim Einstieg
C
weite Verbreitung
Pascal
didaktisch hervorragend
Nachteile
kein Zwang zu sauberer
Programmierung;
keine Unterprogramme mit
Parametern
komplizierte Konstrukte
schon am Anfang (Zeiger
für Eingabe, Parameter)
geringe Verbreitung;
schwache Ein/Ausgabe;
OOP erst nachträglich
Java: Didaktische Qualität (2)
Sprache
Modula
Vorteil
Weiterentwicklung von
Pascal
Nachteil
Zu geringe Verbreitung;
zu strenges Typenkonzept
Oberon
Kompaktes System;
moderner Softwareentwurf möglich
Zu geringe Verbreitung
C++
Weite Verbreitung
Syntax didaktisch
ungeeignet
Java: Didaktische Qualität (3)
Vorteile:
Ausstieg aus Schleifen
Verwendung von
Exceptions
Schwerpunkt OOP
Dynamische Variablen
Viele Klassen
Multithreading
Interface-Konzept statt
Mehrfachvererbung
Nachteile:
Hoher Aufwand beim
Einstieg
nur char-Eingabe
nur call-by-value bei
einfachen Datentypen
Komplizierte Syntax
Java und JavaScript
Java
 Applets für Webseiten
Applications (selbständ.)
Compiler,
Just-in-time-Compiler
Byte-Code
Strenge Typprüfung
JavaScript
 Nur in Webseiten
Ausnahme:
Server Side JavaScript
 Nur Interpreter
Source-Text
Keine Datentypen
Java: Zusammenfassung
für professionelle HTML-Präsentationen bald
ein “Muß“
 gute C/C++-Vorkenntnisse sind nützlich
 in vielen Punkten einfacher als C++
 didaktisch trotzdem nicht optimal
 gute Entwicklungswerkzeuge schon verfügbar
Java: Literatur
Java by example:
Jerry R. Jackson, Allan L. McClellan
SunSoft Press, 1996. ISBN 0-13-565763-3
Mit CD. In englischer Sprache.
Guter Überblick über die Sprache mit vielen
Beispielen
Java: Literatur
Java Handbook
Patrick Naughton
Osborne McGraw-Hill, 1996
ISBN 0-07-882199-1, $2795
Empfehlenswerte Einführung mit vielen Beispielen
Programmbeispiele unter http://www.osborne.com zu
finden
Java: Literatur
Visual J++, Version 1.1
Markus Linke, Markt&Technik, 1997
ISBN 3-8272-5257-1
Kompaktes Nachschlagewerk, speziell für die
Microsoft-Java-Variante
Java 1.2
Ralph Steyer, Markt&Technik, 1998
ISBN 3-8272-5435-3
Kompaktes Nachschlagewerk, neueste Java-Version
Java: Literatur
Java: Kai Baufeldt, Rolf Mäurers
Data Becker, 1996
ISBN 3-8158-1553-3 (ATS 147,-)
Preiswerte, systematische Einführung. Keine
Vorkenntnisse erforderlich. HTML-Einführung im
Anhang.
Java: Literatur
Java oder: wie steuere ich meine Kaffeemaschine?
Bernhard Davignon, Georg Edelmann
tewi-Verlag 1996 (ATS 145,-)
ISBN: 3-89362-459-7
Noch eine preiswerte Einführung, allerdings geringerer
Tiefgang. Keine Anhänge zum Nachschlagen
Java: Literatur
Learn Java Now
Stephen R. Davis, Microsoft Press 1996
In englischer Sprache
Empfehlenswert für den Umstieg von C++ auf Java,
keine grundlegenden Erläuterungen von einfachen
Sprachelementen
Java: Literatur
Das Einsteigerseminar Java
Frank Knobloch, Michael Seeboerger-Weichselbaum
(ATS 145,-)
bhv 1997, ISBN 3-89360-925-3
Einführung samt Zusammenstellung der wichtigsten
Klassen. Anhänge
Java: Literatur
Die Java-Fibel
Paul Kühnel, Addison-Wesley ATS 437,ISBN 3-8273-1024-5, mit CD
Vorteil: kompakte Zusammenfassung am Anfang
Nachteil: komplexes Beispiel schon zu Beginn
Komplette Syntax im Anhang
Java: Literatur
Java Distributed Computing
Jim Farley, O‘Reilly, 1997
ISBN 1-56592-206-9, englisch, USD 32,95
Kein Einsteigerbuch. In dieser Reihe sind etliche
Bücher zu Java-Spezialthemen erschienen. Hohe
fachliche Qualität, empfehlenswert!
Java: Literatur
Einstieg in Java
W.D.Misgeld, J. Gruber
Hanser-Verlag, 1996
ISBN 3-446-18836-3, ATS 364,-, mit CD
Einführung in Java, von der Installation bis zu Applets
und HTML-Seiten. Keine Anhänge zum Nachschlagen.
JavaScript: Literatur
JavaScript - The Definition Guide
David Flanagan, O‘Reilly&Associates, Inc, 1996
ISBN 1-56592-193-3, englisch
Prägnante Zusammenfassung, nicht unbedingt ein
Einsteigerbuch. Sehr gute Auflistung aller
Bibliotheksfunktionen!
Unicode: Literatur
The Unicode Standard, Version 2.0
The Unicode Consortium
Addison-Wesley Developers Press, 1997
ISBN 0-201-48345-9, englisch, mit CD
Komplette Darstellung des Unicode