Was ist Java?

Werbung
Universität Stuttgart
Institut für Automatisierungs- und Softwaretechnik
Prof. Dr.-Ing. Dr. h. c. P. Göhner
Einführung in Java
(Original Titel der Folien: JavaIntensivkurs am IAS)
Vorlesung Informatik I, 15.11.2005, Daniel Huson
© 2000, IAS
1
Überblick
Teil 1:
‹ Erster Überblick
‹ Java Grundlagen
Teil 2:
‹ Grundlagen der Objektorientierung
‹ Klassen und Objekte in Java
Teil 3:
‹ Overloading, Konstruktoren, Vererbung
‹ Ausnahmebehandlung
‹ Teil 4:
‹ Datenstreams und Dateien
Teil 5:
‹ Applet-Grundlagen
Teil 6:
‹ Elemente des AWT
© 2000, IAS
Überblick
Teil 1:
‹ Erster Überblick
‹ Java Grundlagen
Teil 2:
‹ Grundlagen der Objektorientierung
‹ Klassen und Objekte in Java
© 2000, IAS
Erster Überblick
Was ist Java?
‹ ein Projekt von Sun:
• Programmierumgebung
• WWW-Browser
‹ die Programmierumgebung (JavaDevelopersKit) besteht
aus:
•
•
•
•
einem Java-Compiler
verschiedenen Bibliotheken
einem Laufzeitsystem
einem Debugger
‹ Kennzeichen der Java Programmiersprache:
•
•
•
•
•
objektorientiert
plattformunabhängig
streng typisiert
sicher in Netzen
ähnliche Syntax wie C++
© 2000, IAS
Erster Überblick
Geschichtliches ...
‹ August 1991: James Gosling (SUN) entwickelt Oak (Java)
‹ Entwicklungsziel: einfache Programmiersprache für
Consumer Electronics (z.B Interactive TV, Settop-Boxes)
‹ Anfang 1994: Nach Misserfolgen im Bereich Consumer
Electronics und zunehmendem Erfolg des WWW Neuausrichtung auf Internet
‹ Februar 1995: Erste Version von Oak (jetzt: Java) und
einem Java WWW-Browser (Hotjava) werden veröffentlicht
‹ August 1995: SUN lizensiert Java an Netscape, IBM und
Microsoft
‹ Dezember 1998: JDK 1.2
‹ Juni 2004: aktuelle Version J2SE 5.0
© 2000, IAS
Erster Überblick
Allgemeine Konzepte
‹ Java wird interpretiert (schneller Entwicklungszyklus)
‹ Hohe Zuverlässigkeit und Robustheit durch
• Speichermanager
• Verzicht auf (herkömmliche) Zeigertechniken
• strikte Typenüberprüfung zur Kompilier- und Laufzeit
‹ hohe Verfügbarkeit - Code kann jederzeit über das
Netzwerk nachgeladen werden
‹ Portabilität - “Write once, run everywhere”
‹ GUI-Klassenbibliothek (AbstractWindowingToolkit)
© 2000, IAS
Erster Überblick
Plattformunabhängigkeit
JavaInterpreter
(Pentium)
Java-Compiler
(Pentium)
JavaBytecode
(plattformunabhängig)
JavaCode
JavaInterpreter
(SPARC)
Java-Compiler
(SPARC)
*.class
*.java
JavaInterpreter
(...)
...
© 2000, IAS
Erster Überblick
Vergleich mit C++ (1)
‹ Java baut auf C++ auf:
• größtenteils identische Syntax
• Ausnahmebehandlung (exception handling)
• Meta-Objekt-Informationen
‹ Java vermeidet folgende (teilweise “kritische”) C++
Elemente:
•
•
•
•
Zeiger (Pointer)
Mehrfachvererbung
Präprozessor, keine Header-Dateien
generischen Klassen, Templates
‹ Java enthält zusätzliche Elemente
•
•
•
•
Garbage Collection
Interface-Konzept
Unicode
Threads
© 2000, IAS
Erster Überblick
Werkzeuge des JDK
‹ Interpreter (Java Virtual Machine): java
‹ Testumgebung für Applets:
appletviewer
‹ Java-Compiler: javac
‹ Generierung von HTML-Dokumentation
für Klassen: javadoc
‹ Java-Debugger: jdb
‹ Headerfile-Generator zur Einbindung
von
C-Funktionen: javah
‹ Disassembler für Java-Bytecode: javap
JDK kostenlos verfügbar:
http://java.sun.com/j2se/
© 2000, IAS
werden im Rahmen
des Kurses nicht
behandelt!
Erster Überblick
Applikation contra Applet
‹ Applikation:
• “normales”, Java-Programm, vergleichbar mit anderen
(interpretierten) Programmiersprachen
• Bytecode wird von einem Interpreter ausgeführt
‹ Applets:
• werden in HTML-Seiten eingebunden und von Web-Browsern
ausgeführt
• können über das Netz geladen werden
• unterliegen strengen Sicherheitsanforderungen
(z.B. kein Schreiben im lokalen Dateisystem)
• ermöglichen interaktive Web-Seiten
© 2000, IAS
Erster Überblick
HelloWorld-Applikation (1)
// Datei: HelloWorld.java
public class HelloWorld {
public static void main( String[] args ) {
System.out.println(“Hello World!”);
}
}
‹ das gesamte Programm befindet sich innerhalb der
Klassendefinition public class HelloWorld {}
‹ Java-Programm = Menge von Klassendefinitionen
‹ die Klassendefinition HelloWorld muss in einer
gleichnamigen Datei HelloWorld.java abgespeichert
‹ main()-Methode ist der Einstiegspunkt des Programms
‹ Bildschirmausgabe mit System.out.println()
© 2000, IAS
Erster Überblick
HelloWorld-Applikation (2)
‹ Übersetzung der Applikation (Compiler):
% javac HelloWorld.java
‹ nach fehlerfreier Übersetzung entsteht
die Bytecode-Datei: HelloWorld.class
‹ ausführbares Programm = Menge von .class-Dateien
‹ Ausführen der Applikation (Interpreter):
% java HelloWorld
‹ Ausgabe von “HelloWorld” auf dem Bildschirm
© 2000, IAS
Erster Überblick
HelloWorld-Applet (1)
// Datei: HelloWorld.java
import java.awt.Graphics;
public class HelloWorld extends java.applet.Applet {
public void paint( Graphics g ) {
g.drawString(“Hello World!”, 50, 25);
}
}
‹ import ermöglich Zugriff auf AWT-Bibliothek
(Abstract Windowing Toolkit, JDK)
‹ keine main-Methode
‹ Überschreiben von vorgegebenen Methoden (paint),
die in der AWT-Klasse Applet definiert sind
‹ Compiler-Aufruf wie bei Applikation
© 2000, IAS
Erster Überblick
HelloWorld-Applet (2)
// minimale HTML-Datei mit eingebundenem Applet
<HTML>
<HEAD>
<TITLE>HelloWorld Applet</TITLE>
</HEAD><BODY>
<APPLET CODE=“HelloWorld.class” WIDTH=100 HEIGHT=100>
</APPLET>
</BODY>
</HTML>
‹ CODE gibt Name der Appletklasse an
‹ WIDTH und HEIGHT bestimmen die (Pixel-)Größe des Applets
‹ HTML-Datei und HelloWorld.class sollten im gleichen
Verzeichnis liegen
‹ HTML-Datei in Java-fähigen Browser oder mit
appletviewer aufrufen
© 2000, IAS
Überblick
Teil 1:
‹ Erster Überblick
‹ Java Grundlagen
Teil 2:
‹ Grundlagen der Objektorientierung
‹ Klassen und Objekte in Java
© 2000, IAS
Java Grundlagen
Prinzip: Die Syntax von Java ist stark an C/C++
angelehnt und größtenteils identisch.
Anweisungen
‹ einzelne Java-Operationen:
•
•
•
•
•
Zuweisungen (int i = 1)
Ablaufsteuerung (if/else, do-while)
Methodenaufrufe (System.out.println(“Hallo”))
Instanziierungsaufrufe (Date today = new Date())
sonstige Anweisungen (import java.awt.Font)
‹ Wichtig: Anweisungen werden durch Semikolon (;)
getrennt, z.B.:
import java.awt.Font;
int i = 1;
System.out.println(“Hallo”);
© 2000, IAS
Java Grundlagen
Variablen (1)
‹ Stellen im Speicher, die Werte aufnehmen können
‹ bestehen aus Typ, Namen und Wert:
int i = 12;
‹ müssen vor der Benutzung deklariert werden:
zaehler = 7;
// Fehler: Variable zaehler unbekannt!
‹ Deklaration mit Anfangswerten erlaubt:
boolean muede = false;
‹ Mehrfachdeklarationen in einer Zeile möglich:
int i = 0, j = 3, k = 5;
‹ Variablennamen müssen mit einem Buchstaben, einem
Unterstreichungsstrich (_) oder einem Dollarzeichen ($)
beginnen
© 2000, IAS
Java Grundlagen
Variablen (2)
‹ Java unterscheidet Groß/Kleinbuchstaben
‹ aussagekräftige Variablennamen wählen!
‹ Variablentyp darf sein:
• primitiver Datentyp
• Klassenname
• Array
‹ neue (benutzerspezifische) Variablentypen können nur
durch neue Klassen erzeugt werden (kein typedef wie in
C/C++!)
© 2000, IAS
Java Grundlagen
Primitive Datentypen
Typ
Bedeutung
boolean
true oder false
char
Unicode-Zeichen
16 Bits
byte
Ganze Zahl mit Vorzeichen
8 Bits
short
Ganze Zahl mit Vorzeichen
16 Bits
int
Ganze Zahl mit Vorzeichen
32 Bits
long
Ganze Zahl mit Vorzeichen
64 Bits
float
IEEE 754-Fließkommazahl
32 Bits
double
IEEE 754-Fließkommazahl
64 Bits
‹ keine Implementierungsabhängigkeiten
© 2000, IAS
Größe
1 Bit
Java Grundlagen
Kommentare
‹ // Text Kommentar bis zum Ende der Zeile
‹ /* Text */ mehrzeilige Kommentare möglich, aber kein
Verschachteln von Kommentaren!
‹ /** Text */ spezielle Kommentare für javadoc
Zeichenketten
‹ keine Zeichen-Arrays sondern Objekte der Klasse String
‹ bestehen aus mehreren Zeichen zwischen doppelten
Anführungszeichen (“Hallo”)
‹ Verkettung (+) möglich (“Hallo” + “, World”)
‹ können Escape-Zeichen enthalten (Auszug):
neue Zeile
\b
Rückschritt
\\
Backslash
\xdd Hexadezimal
\n
\t
\r
\”
\uddd
© 2000, IAS
Tab
Return
doppeltes Anführungszeichen
Unicode-Zeichen
Java Grundlagen
Operatoren (1)
‹ Arithmetik
Operator
Bedeutung
Beispiel
+
*
/
%
Addition
Subtraktion
Multiplikation
Division
Modulo
3 + 4
5 - 7
5 * 5
14 / 7
20 % 7
‹ Zuweisungen
Aus druck
Bedeut ung
x
x
x
x
x
x
x
x
+=
-=
*=
/=
y
y
y
y
=
=
=
=
x
x
x
x
© 2000, IAS
+
*
/
y
y
y
y
Java Grundlagen
Operatoren (2)
‹ Inkrement/Dekrement
Ausdruck
x++
x-++x
--x
Bedeutung
x = x + 1,
x = x – 1,
x = x + 1,
x = x - 1,
Inkrementieren (postfix)
Dekrementieren (postfix)
Inkrementieren (prefix)
Dekrementieren (prefix)
Bsp.: y = x++ und y = ++x
‹ Vergleiche und Boolean
Operator
==
!=
<, >
<=, >=
&&
||
Bedeutung
Gleich
Ungleich
Kleiner als, Größer als
Kleiner gleich, Größer gleich
Und
Oder
© 2000, IAS
Beispiel
x == 3
x != 3
x < 3, x > 3
x <= 3, x >= 3
(x > 0) && (x < 1)
(x > 0) || (x < 1)
Java Grundlagen
Operatoren (3)
‹ Bitweise Operatoren
• Operationen auf einzelne Bits in Ganzzahlen (z.B. Verschiebungen,
Komplement, AND, OR, ...)
• spielen in diesem Kurs keine Rolle
‹ Operatorpräzedenz
• Reihenfolge, in der Ausdrücke mit Operatoren bewertet werden,
z.B y = 6 + 4 / 2 ist 8 und nicht 5 !
• Reihenfolge (kann durch Klammerung geändert werden):
1) Klammern ([], ()) und Methoden- und Variablenzugriffe (.)
2) Inkrement/Dekrementausdrücke (++, --)
3) Multiplikation, Division, Modulo (*, /, %)
4) Addition, Subtraktion (+, -)
5) Bitweise Operationen
6) Vergleiche (<, >, ==, !=)
7) Logische (Boolsche) Operatoren (&&, ||)
8) Zuweisungen (=, +=, -=, *=, /=, ...)
© 2000, IAS
Java Grundlagen
Operatoren (4)
Beispiel:
// Datei: OperatorTest.java
class OperatorTest {
public static void main(String[] args) {
int x = 6;
int y = 4;
System.out.println(“x +
System.out.println(“x /
System.out.println(“x %
System.out.println(“++x
System.out.println(“--x
}
}
© 2000, IAS
y
y
y
:
:
=
=
=
“
“
“
“
“
+
+
+ (x + y));
+ (x / y));
+ (x / y));
(++x));
(--x));
//
//
//
//
//
=
=
=
=
=
10
1
2
7
6
Java Grundlagen
Ablaufsteuerung (1)
‹ if-Anweisung
if( wert >= 1 ){
summe = summe + wert;
}
else {
wert = 0;
}
// Bedingung
// Anweisungen
// alternativer Zweig
// Anweisungen
• else-Zweig ist optional
• bei nur einem Befehl im if/else-Zweig kann die {}Klammerung weggelassen werden:
if( wert >= 1 )
summe = summe + wert;
© 2000, IAS
Java Grundlagen
Ablaufsteuerung (2)
‹ switch-Anweisung
switch( wert ){
case 1:
summe++;
case 2:
summe = summe + 2;
break;
default:
summe = 0;
// wert = 1!
// wert = 2!
// springt aus der {}-Klammer
// Vergleich immer erfüllt!
}
• zur Variablen wert passender Ausdruck und/oder DefaultAusdruck wird ausgeführt
© 2000, IAS
Java Grundlagen
Ablaufsteuerung (3)
‹ while-Schleife
while( summe >= 1 ){
summe--;
}
// Schleifen-Bedingung
// Anweisungen
• Wiederholung der Anweisungen bis Schleifen-Bedingung falsch
‹ do-while-Schleife
do{
summe--;
} while( summe >= 1 );
// Anweisungen
• wie while-Schleife, Anweisungen werden jedoch mindestens
einmal durchlaufen
© 2000, IAS
Java Grundlagen
Ablaufsteuerung (4)
‹ for-Schleife
for( int i = 0; i < 10; i++ ){
System.out.println(i);
}
// Anweisungen
• zunächst Ausführung der Initialisierungsanweisung (int i =
0)
• Auswertung des Boolschen Ausdrucks ( i < 10 ):
– falls wahr, wird zunächst die Anweisung
(System.out.println(i)) und dann die
Inkrementierunganweisung (i++) ausgeführt
– Ablauf wiederholen solange Boolscher Ausdruck wahr ist
• in der for-Schleife deklarierte Variablen sind nur innerhalb der
Schleife gültig
© 2000, IAS
Java Grundlagen
Ablaufsteuerung (5)
‹ continue-Anweisung
for( int i = 0; i < 10; i++ ){
if( i > 6 )
continue;
System.out.println(i);
// continue springt hierher
}
• springt an das Ende des Schleifenrumpfes
‹ return-Anweisung
return i;
• beendet Methode und liefert (falls vorhanden) Rückgabewert
der Methode
© 2000, IAS
Java Grundlagen
Zusammenfassung
‹ Java ist eine objektorientierte Sprache von Sun, die für den
Einsatz in Netzen konzipiert ist
‹ Portabilität wird durch plattformunabhängigen Bytecode
erreicht:
“Write once, run everywhere”
‹ Java vereinfacht C++ (Zeiger, Präprozessor) und bietet
zusätzliche Elemente (Garbage Collection)
‹ mit Java können sowohl “normale” Programme als auch
Applets geschrieben werden
‹ Anweisungen, Variablen, Operatoren und Ablaufsteuerung
sind bis auf wenige Ausnahmen mit C/C++ identisch
‹ das JDK ist kostenlos verfügbar
© 2000, IAS
Herunterladen