Java_allgemein

Werbung
Was ist Java ?




Eine objektorientierte
Programmiersprache
Eine Sprache mit einer umfangreichen
Klassen Bibliothek
Eine portable Sprache, die auf der „Java
Virtual Machine“ läuft und daher
unabhängig vom Betriebssystem ist
Sprache des WWW
Portabilität


Alle Java Applikationen laufen auf der
Virtual Java Machine egal auf welchem
System
Anstelle eines „exe“-Files werden Java
„class“-Files in Bytecode generiert
Javaumgebung
(Interpreter)
Java Virtual
Machine
Entwicklungsgeschichte
von Java




1991 – „Green-Team“ entwickelt oo-Sprache
„Oak“ für elektr. Geräte
1993 als der erste Mosaic Browser herauskam,
beauftragte Sun das Green Team zur
Weiterentwicklung von „Oak“
1995 wurde „Oak“ auf „Java“ umbenannt
1994 – entstand der neue Web Browser HotJava
von Sun in Java
Entwicklungsgeschichte
von Java

1996 – Java Developer Kit 1.0 von Sun




AWT (Abstract Window Toolkit)
JDBC
FEHLER!! Beschränktes Datum, keine Umlaute...
1997 – JDK 1.1



kommerziell verwendbar
Neue Security Features –Zugriff auf lokale Ressourcen
z.B. Filesystem oder Drucker
Swing existierte als eigene Library
Entwicklungsgeschichte
von Java
1998 – JDK 1.2 (besser bekannt unter Java 2 Plattform)


Micro Edition für embedded devices
Standard edition


Java Foundation classes (includieren drag&drop, Swings, Accessibility
APIs für Behinderte)
Enterprise Edition(Java Enterprise Edition)



JNDI(Java Naming and Directory Interface) zum Ansprechen eines LDAP
(lightweight Directory Access Protocoll Servers) LDAP Server gibt es von
Netscape, Oracle und z.B. Siemens und dienen zu Authentifizierung
JTI Java Transaction Interface – garantiert, dass Programme vollständig
oder gar nicht ausgeführt wird (Transaktionssicherheit)
EnterpriseJava Beans java basierender Standard für
Komponentenmodell (Kooperation verteilter systeme,
Transaktionssicherheit...) Es gibtJava Application server, die diesen
Standard erfüllen – z.B. BEA Weblogic
Entwicklungsumgebungen






IBM‘s VisualAge for Java
Microsofts J++
Inprises Jbuilder
Symantecs VisualCafe
Suns Java Workshop
Suns Forte
Erhältlichkeit


Public domain tool, erhältlich bei
www.java.sun.com/
Oder
www.javasoft.com/

Erst für den kommerziellen Gebrauch
müssen Lizenzen gekauft werden
JavaScript, Applikationen und
Applets

Java Scripts
ist eine Programmiersprache,
die in HTML Dokumenten verwendet wird –
hat NICHTS zu tun mit Java
Applikationen – standalone Programme
 Applets – Java Programme, die nur in

einem javafähigen Browser oder dem
Appletviewer laufen können
Java Developers‘ Kit








javac – der Compiler
java – Virtuelle Java Maschine
jdb – Java Debugger
jar – Archivierungstool
javah – ermöglicht Integration mit CSourcefiles (die Platformunabhängigkeit geht
dabei natürlich verloren!)
javap - Disassembler
javadoc – kreiert HTML Code aus *.class-Files
appletviewer – zum Testen von Applets
außerhalb des Browsers
Programmierumgebung


Änderung des auoexec.bat Files unter
Windows 95 oder Windows 98
Für Windows NT setzen der
environment Variablen (ControlPanel –
System – Environment Folder)
Programmierumgebung
SET CLASSPATH=.;C\java\lib\tools.jar
 SET PATH=C:\ java \bin
 SET HOMEDRIVE=c:
 SET HOMEPATH=\ java
 SET JAVA_HOME=C:\ java
Keine Leerzeichen zwischen den
Directoryangaben!!!

Erstes Programm
public class Hello
{
public static void main (String argv[])
{
System.out.println („Hello World“);
}
}
Compilieren und Ausführen in
einem MS-DOS Fenster



Speichern des Files als „Hello.java“ –
ACHTUNG – der Filename muß gleich
sein mit dem Klassennamen (Achten auf
Groß- und Kleinschreibung !!!)
Compilieren : > javac Hello.java
Ausführen: > java Hello (Hier wird
keine Fileextension angegeben !!!)
Debuggen


Hierbei wird nicht die Virtuelle Java
Maschine verwendet; der Byte Code der
*.class files wird vom Debugger selbst
(jdb) ausgeführt
Das TCP/IP Netwerkservice muß laufen!
Debugger Beispiel
public class Test
{
public static void main(String args[])
{
Test einObjekt = new Test();
einObject.dividiere(2,0)
}
public void dividiere (int a, int b)
{
int iErgebnis=0;
ergebnis=a/b;
System.out.println(iErgebnis);
}
}
Debuggen mit jdb

Kompilieren mit „–g“ Option:
> javac –g Test.java

Aufruf des Debuggers
> jdb Test

Setzen des Breakpoints
> stop in test.dividiere

Debugger laufen lassen
> run
Der jdb Debugger






run Startet das Programm
run class Startet angegebene Klasse
load class Ladet eine Klasse
gc Initiiert eine Garbage Collection
exit (quit) Beendet jdb
!! Startet letzten Befehl
Jdb - Befehle

stop in class.method Breakpoint in einer

stop in class:line Breakpoint in einem File

clear class.method Breakpoint in methode



Methode setzen
setzen
entfernen
clear class:line Breakpoint in file entfernen
step ausführen der nächsten Zeile
cont nach Breakpoint fortfahren
Jdb - Befehle








dump Gibt Informationen über Objekte und
Variableninhalte
help (?) Listet alle möglichen Debuggerbefehle
list line Listet den Fileinhalt mit Zeilenzahlen
locals Gibt Variablen samt Inhalt aus
memory Gibt Informationen über das Ausmaß der
Speicherbelegung
print Gibt Informationen über Objekte und Variablen
threads Listet alle laufenden Threads
where Gibt an bis wohin der Debugger das Programm
abgearbeitet hat
Programmausführung ohne
Debugger
Programmausführung mit
Debugger
Klassendefinition
Gültigkeitsbereich_der_Klasse class Klassenname
extends Superklasse {
...
}
Jedes Object in Java ist von der Klasse
Object abgeleitet!
Gültigkeitsbereich_der_Klasse

public – jeder kann auf diese Klasse
zugreifen (pro File kann es nur 1 public
Klasse geben!)

kein Zugriffsmode – die Klasse ist nur im
aktuellen Package verfügbar
Package


Sinn eines Package ist es Klassen zu
vereinigen, die nicht in nur einem File sind,
denn pro File kann es nur eine public Klasse
geben, deren Namen mit dem Filenamen
ident ist
Dienen zur Datenkapselung
Packagedeklaration

Am Fileanfang:
package Package_Name


Jedes File des Package hat diesen
Eintrag am Fileanfang.
Sagt aus, daß die Packagefiles im
Direktory Package_Name stehen.
Packagedeklaration




Das „Package Directory“ ist relativ zum CLASSPATH .
Ist der CLASSPATH z.B. C:\jdk1.2\Pfad, so befinden
sich die Files des Package in
C:\jdk1.2\Pfad\Package_Name.
Bei komplexerer Direktorystruktur, in der mehrere
Packages gespeichert werden, werden die
Directorypfade entsprechend länger.
Files des Package test.daten wären dann im Directory
C:\jdk1.2\Pfad\test\daten
Zugriff auf Packageelemente
public class MyPanel extends java.awt.Panel
oder
import java.awt.Panel;
public class MyPanel extends Panel

Zugriff auf alle Elemente eines Package (kann sich
auf Kompilierzeit auswirken !!):
import java.awt.*;

ACHTUNG – Zugriff auf mehrere Packages (import
java.*.*;) ist nicht möglich!!
Beispiel einer Klasse
public class Angestellter extends Object {
public static int iMaxgehalt=30000;
public int iGehalt=10000;
private int iAlter=20;
public String strName=„Meier“
}
Schaffen einer Instanz


Verwendung eines Konstruktors zum
Kreieren einer Instanz
Befehl new
Konstruktor


Ist eine Methode der Klasse
Aussehen:
Gültigkeitsbereich class Klassenname
{
Klassenname (Parameter)
{
Befehle
}
}
Gültigkeitsbereich

public – jeder kann den Konstruktor der Klasse

protected – der Konstruktor kann nur von Klassen


aufrufen
vom gleichen Package oder von Subklassen außerhalb
des Packages aufgerufen werden
private – der Konstruktor kann nur von der Klasse
selbst aufgerufen werden (z.B. Im:
public void main(String[] args)
kein Zugriffsmode – der Konstruktor kann nur vom
aktuellen Package aus aufgerufen werden
Konstruktor Beispiel
public class Konto
{
private double kontostand=0.0;
private String name=””;
Konto(double einGeld, String einePerson){
kontostand=einGeld;
name=einePerson;
}
Konto()
{
kontostand=0;
name=“Anonym“;
}
...
}
Der Defaultkonstruktor
Klassenname(){}


Muß nicht unbedingt in einer Klasse angegeben
werden, da jede Klasse automatisch eine Subklasse
von Object ist und den Defaultkonstruktor
übernimmt
Außnahme ist eine abgeleitete Klasse!! Hat eine
Klasse eine Subklasse, so muss die Superklasse
einen Defaultkonstruktor zur Verfügung stellen!!
Verwendung von new

Konto anonym = new Konto();

Konto vom_Meier = new Konto(50,“Meier“);
Methoden Definition
Gültigkeitsbereich_der_Methode Returntyp Name
(Argumente){
Lokale Variablen
Befehle .....
}
Gültigkeitsbereich der Methode




public – jeder kann auf diese Methode/Variable
zugreifen (bei public Methoden oder Variablen muß
auch die Klasse public sein!!)
protected – auf diese Methoden/Variablen kann nur
vom gleichen Package zugegriffen werden oder von
Subklassen außerhalb des Package
private – auf diese Methoden/Variablen kann nur die
Klasse selbst zugreifen (nicht einmal Subklassen)
kein Zugriffsmode – ist nur im aktuellen Package
verfügbar
Aufruf von Methoden
Returnwert=Instanzname.Methodenname(Argumente);
 Wird die Methode nicht in der Klasse gefunden, so
wird sie in der Superklasse gesucht. Ist sie dort nicht
zu finden wird sie in der nächstenSuperklasse
gesucht .... Bis zur letzten Superklasse (=Klasse
Object)
 YoYo-Effekt: Eine Methode wird in einer Superklasse
gefunden und ruft wieder eine Methode auf, die nicht
in der Klasse sondern der Superklasse gefunden
wird...
return-Operator


wird verwendet wie in C
z.B.
int x=5;
return x;
Kommentare



Kommentarblöcke, die mit den Zeichen /*
beginnen und mit den Zeichen */ enden
Kommentarblöcke, die mit den Zeichen /**
beginnen und mit den Zeichen */ enden (diese
werden vom Dokumentgenerator javadoc für die
Dokumentation verwendet)
Oder // für einzelne Zeilen
Achtung es gibt kein ineinander Schachteln von
Kommentaren - als Ende gilt immer das nächste */
Zeichenpaar!!
Beispiel eines falschen
Kommentars
/*
x = 12 * 4;
/* Berechnung von y */
y = x + 2;
*/
Garbage Collection



Prozess für Speichermanagement - macht
ungebrauchten Speicherplatz wieder verfügbar
Läuft in eigenem Thread in der JVM
Kann auch explizit im Programm aufgerufen werden:
Runtime.getRuntime().gc()
Runtime.getRuntime().runFinalization();
System.runFinalization();
System.gc();
Vorteile des GCs



Es gibt keine Pointer, so wie in C++, sondern der
Speicherplatz wird von der JVM verwaltet
d.h. keine Probleme bei Pointeränderungen oder
Speicherallokierung
keine Probleme mit Speicherplatz, der obwohl er
nicht mehr verwendet wird nicht wieder
freigegeben wurde
Definition der finalize-Methode
protected void finalize() throws Throwable {
…
super.finalize();
}
Namenskonventionen




Alle Namen bestehen aus Groß- und Kleinbuchstaben und
Ziffern
Namen von Klassen und Interfaces beginnen mit einem
Großbuchstaben. Beispiel: HalloWorld
Namen von Konstanten beginnen mit einem Großbuchstaben
und bestehen nur aus Großbuchstaben, Ziffern und
Underlines. Beispiel: MAX_SPEED.
Alle anderen Namen (Attribute, Methoden, Instanzen,
Packages etc.) beginnen mit einem Kleinbuchstaben und
bestehen aus Groß- und Kleinbuchstaben und Ziffern. Beispiel:
getSize().
Reservierte Wörter
abstract, boolean, break, byte, case, catch, char,
class, const, continue, default, do, double, else, extends,
false, final, finally, float, for, generic, goto, if,
implements, import, instanceof, int, interface, long,
native, new, null, package, private, protected, public,
return, short, static, super, switch, synchronized, this,
throw, throws, transient, true, try, void, volatile,
while
Datentypen

Primitive oder elementare Datentypen:





Gleitkomma-Zahlen: float, double
ganze Zahlen: byte, short, int, long
Logischer Typ (true oder false): boolean
Zeichen (Unicode, Zahlenwert ohne Vorzeichen):
char
Objekt-Typen:


Zeichenketten (Unicode): String
sowie alle anderen als Klassen definierten Typen
Primitive Datentypen
Typname
boolean
byte
char
short
int
long
float
double
Inhalt
true oder false
Ganzzahl mit Vorzeichen
Unicode Zeichen
Ganzzahl mit Vorzeichen
Ganzzahl mit Vorzeichen
Ganzzahl mit Vorzeichen
Fließkommazahl
Fließkommazahl
Defaultwert
false
0
\u0000
0
0
0
0,0
0,0
Bitanzahl
1
8
16
16
32
64
32
64
Bereichsgrenzen
-128 bis 127
\u0000 bis \uFFFF
-32768 bis 32767
~ -2E9 bis 2E9
~ -9E18 bis 9E18
+/-3.4E+38 bis +/-1.4E-45
+/-1.8E+308 bis +/-4.9E-324
Zahlen



Konstante (Literale) haben standardmäßig den Typ int
und werden dezimal interpretiert. Den Typ long kann
man durch Anhängen von L erzeugen. Oktale Zahlen
beginnen mit 0 (Null), hexadezimale mit 0x.
Gleitpunktliterale haben den Typ double. Den Typ float
kann man durch Anhängen von F erzeugen. Bei float
und double ist die Angabe von E für den Exponenten
möglich.
z.B.:
short i;
i=-1234;
int i;
i=-1234;
long i;
i=-1234L;
float x;
x=-123.45F; x=1.0E-23F;
double x;
x=-123.45; x=1.0E-23;
Wrapper Klassen für primitive
Datentypen

Integer für int



Umwandlung einer Integer in einer int mit Hilfe der int
Memberfunktion intValue() von Integer
Kreieren eines Integer aus einer int mit Hilfe des
Konstruktors Integer(int value)
Float für float


Umwandlung einer Float in einer float mit Hilfe der int
Memberfunktion floatValue() von Float
Kreieren eines Float aus einer float mit Hilfe des
Konstruktors Float(float value)
Wrapper Klassen für primitive
Datentypen

Short für short



Long für long



Short (short value)
short shortValue()
Long (long value)
long longValue()
Double für double


Double (double value)
double double Value()
Wrapper Klassen für primitive
Datentypen

Boolean für boolean



Byte für byte



Boolean (boolean value)
boolean booleanValue()
Byte (byte value)
byte byteValue()
Character für char


Character(char c)
char charValue()
Arithmetische Operationen





+
*
/
%
Addition
Subtraktion
Multiplikation
Division
Rest
Mathematische Funktionen
von der Klasse MATH
Annahme double x,y;









Max
Maximum
Min
Minimum
Ceil
Aufrunden
Floor
Abrunden
Round Runden
Sqrt
Wurzel
Abs
Absolutbetrag
Pow
x hoch y
Random Zufallszahl
double
double
double
double
double
double
double
double
double
d=Math.max(x,y);
d=Math.min(x,y);
d=Math.ceil(x);
d=Math.floor(x);
d=Math.round(x);
d=Math.sqrt(x);
d=Math.abs(y);
d=Math.pow(x,y);
d=Math.random();
Der Typ boolean und
Vergleichoperatoren

Beispiel

Vergleichsoperatoren
boolean b;
b=true;
b=false;
==
<
>
!=
<=
>=
gleich
kleiner als
größer als
ungleich
kleiner gleich
größer gleich
&& logisches „und“
|| logisches „oder“
Characters


Im Programm:
char c;
c='A'; c=‘\u000c‘;
Achtung:
“a” ist kein Character, denn zwischen
doppelten Hochkommas stehen nur
Strings
Strings


Im Programm:
String s;
s="Abc";
s=null;
s=“heute “+“und morgen“;
String ist die einzige Klasse von der eine
Instanz nicht mit new erzeugt werden
muß
Methoden der String Klasse

Welche Länge hat String str?
int len=str.length();

Zusammenfügen von mehreren Strings:
String neu=str1 + “ “+str2;
Methoden der String Klasse

String str und String aString gleich?

boolean b=str.equals(String aString);
Sind String str und String aString gleich (ohne auf
Groß/Kleinschreibung zu achten)?
boolean b=str. equalsIgnoreCase(String
aString);

Welcher Character steht an der Stelle index von String
str?
char c=str.charAt(int index);
Methoden der String Klasse

Liefert den Substring aString zwischen den Indices a und b
zurück
String aString=str.substring(int a, int b);

Gibt den String in Großbuchstaben zurück
String aString=str.toUpperCase( b);

An welcher Stelle des Strings str kommt der Characterwert
c zuerst vor? (bei nicht Vorhandensein liefert die Funktion –1
zurück)
int Stelle=str.indexOf(c);

Gibt den String in Kleinbuchstaben zurück
String aString=str.toLowerCase( b);
Methoden der String Klasse

ACHTUNG!! Es gibt schon die Abfrage
(string1== string2) nur wird hier die
Referenz und nicht der Inhalt der String
verglichen!! Man muß für den
Inhaltsvergleich daher die Methode
boolean b=str.equals(String
aString);wählen.
String Umwandlungen

Umwandlung von Strings, die Ziffern enthalten, in
entsprechende Zahlenwerte





Integer.parseInt(String)
Long.parseLong(String)
Float.valueOf(String).floatValue()
Double.valueOf(String).doubleValue()
Umwandlung von Zahlen in Strings


int
long
float
double
String s = String.valueOf(zahl);
oder

String s = "" + zahl;
Gültigkeitsbereich von
temporären Variablen


Variablen können an beliebiger Stelle
des Programms deklariert werden.
Je nachdem sind sie gültig in:


Einer Methode
Einem Konstrukt
if –Befehl
if(Bedingung){
...
}
else
{
...
}
Conditional Operator
 Teste Bedingung ? true … : false …
 z.B.
i>k ? System.out.println(i) :
System.out.println(k);
 oder
x=m>=n?m:n;
System.out.print-Befehl

Schreibt auf Standard Output. Der
Buffer sollte aber mit
System.out.println() oder
System.out.flush() geleert werden.
switch Befehl
switch (Ausdruck)
{
case label1:
...
break;
case label2:
...
break;
...
default:
…
}
Beispiel für switch-Befehl
switch (n)
{
case 0:
System.out.println(“Leider nicht!”);
break;
case 1:
System.out.println(“Volltreffer!“);
break;
default:
System.out.println(“Zuviel!”;)
}
for-Schleife
for (ursprünglicher Wert; Test; Werterhöhung)
Befehl;
bzw.
for (ursprünglicher Wert; Test; Werterhöhung)
{
…
}
Beispiel für for-Schleife
for (int i=0; i<5; i++)
System.out.println(n);
while-Schleife
while (Test)
Befehl;
Bzw.
while(Test)
{
…
}
Beispiel für while-Schleife
int n=1;
while (n<5)
{
System.out.println(n);
n++;
}
do-Schleife
do
{
…
} while (Test);
z.B.
int n=5;
do
{
System.out.println(n);
n--;
} while (n>0);
Rekursionen
public class Faktorielle{
public static void main(String argv[]){
Faktorielle f=new Faktorielle();
System.out.println(f.Faktorielle(5));
}
public int Faktorielle (int zahl) {
System.out.println(zahl);
if(zahl==1) return 1;
else return zahl*Faktorielle(--zahl);
}
}
Übungsbeispiel

Programmieren Sie das Beispiel zur
Berechnung der Faktoriellen um. Es sollen
dabei die Rekursionen durch entsprechende
Konstrukte (if, while, for, switch, do-Schleife,
Conditional Operator ....?!) ersetzt werden.
Vererbung (inheritance)


wird durch das Schlüsselwort extend
realisiert
-z.B.:
public class Student extends Person{
private String subject=”EDV”;
public String getSubject(){
return subject;
}
}
Vererbung (Überschreiben von
Attributen)
ACHTUNG!!
auf private Attribute kann die Subklasse
nicht zugreifen, daher muss die
Superklasse public Methoden zum
Zugriff auf diese Attribute zur
Verfügung!
Konstruktor der Subklasse

Der Konstruktor der Superklasse kann von der
Basisklasse übernommen werden:
super() oder super(Argument)
je nach Angabe von Argumenten wird der
entsprechende Konstruktor der Superklasse
verwendet
Konstruktor der Klasse selbst


Es kann auch ein Konstruktor (aber NICHT
mehrere!!) der Subklasse selbst verwendet werden:
Beispiel: public class Person
{
int dasAlter;
String einName;
Person()
{
einName=„“;
}
Person(int alt)
{
this.Person();
this.dasAlter=alt;
}
Vererbungsbeispiel
class Person{
private String Name;
Person(){
Name="";
}
Person(String aName){
Name=aName;
}
public void setName(String aName){
Name=aName;
}
public String getName(){
return Name;
}
}
Vererbungsbeispiel
public class Student extends Person{
private String Titel;
public static void main(String args[]){
Student hans= new Student("Hans", "Dr");
Person tim = new Person("Tim");
System.out.println(hans.getName());
System.out.println(tim.getName());
}
Student(String aName, String aTitle){
super.setName(aName);
Titel=aTitle;
}
public String getName(){
return Titel+super.getName();
}
}
final

public final class LaserPrinter extends Printer
Verhindert das Kreieren von Subklassen der
Klasse “LaserPrint”

public final int maxSpeicher=128;
Die Variable maxSpeicher kann nicht
verändert werden

public final void hallo();
Die Mehtode “hallo()” kann in einer Subklasse
nicht überschrieben werden
Variablen und Methoden von
Klassen
 Sind für alle Instanzen der Klasse gleich
 Wird eine Klassenvariable z.B. von einer Instanz


verändert, so betrifft diese Änderungen natürlich
auch alle anderen Instanzen
Klassenvariablen/Methoden werden in der Klasse
mit dem Wort static gekennzeichnet
Z.B.
public static void main(String args[])
{
...
}
Beispiel von statischen
Variablen und Methoden
public class St
{
public static int counter=0;
public static void main(String args[])
{
}
St s =new st();
St t =new st();
St u =new st();
St()
{
}
}
counter++;
System.out.println(counter);
Statische Variablen/Methoden


Man braucht keine Instanz um statische
Variablen/Methoden einer Klasse aufzurufen
Beispiel:

Klassendefinition
public class Chair
{
static int i;
....
}
 Verwendung:
Chair.i=5;
Überschreiben von statischen
Methoden

Eine Subklasse kann eine statischen Methoden der
Superklasse nicht überschreiben


D.h.: Hat die Superklasse die Mehtode static int
myMehtod(), so kann die Subklasse diese nicht mit der
Methode int myMethod() überschreiben
Die Subklasse kann eine Klassenmethode mit
demselben Namen haben, nicht aber eine
Instanzmethode

D.h., daß die Subklasse die Klassenmethode static int
myMehtod() sehr wohl zur Verfügung stellen kann
Übungsbeispiel




Definieren sie eine Superklasse Person mit den privaten
Attributen: Alter, Name, Land und der und dem Klassenattribut
AnzahlDerPersonen insgesamt.Die Klasse soll eine
Defaultkonstruktor und einen Konstruktor mit dem Namen haben
Definieren sie eine Klasse Student als Subklasse von Person mit
dem privaten Attribut Fachrichtung und dem Klassenattribut
AnzahlDerStudenten. Die Klasse soll eine Defaultkonstruktor und
einen Konstruktor mit dem Personennamen haben
Testen Sie die beiden Klassen, indem sie 3 Personen und 2
Studenten instanzieren und die Anzahl der Personen/bzw.
Studenten anzeigen
Vergessen Sie nicht eine Methoden zur Verfügung zu stellen,
sodaß eine Instanz der Klasse Student auch auf das private
Attibut Name der Klasse Person zugreifen kann!
Abstrakte Klasse



Von abstrakten Klassen kann man keine
Objekte erzeugen, sondern nur
Subklassen
Es fehlt meist die Funktionalität ein
oder mehrer Methoden, die in den
Subklassen definiert werden müssen
Sie dienen zum Zusammenfassen von
Objektgruppen mit ähnlicher Funktion
Beispiel für abstrakte Klasse
public abstract class Auto {
public double Benzin=5;
private boolean faehrt=false;
public void starten(){
faehrt=true;
verbraucheBenzin();
while(Benzin>0)
verbraucheBenzin();
}
abstract void verbraucheBenzin();
}
Beispiel für eine Subklasse
einer abstrakten Klasse
public class VW extends Auto {
public static void main(String args[]){
VW p=new VW();
p.starten();
}
public void verbraucheBenzin(){
Benzin=Benzin-1;
System.out.println(Benzin);
}
}
Beispiel für eine Subklasse
einer abstrakten Klasse
public class Audi extends Auto {
public static void main(String args[]){
Audi p=new Audi();
p.starten();
}
public void verbraucheBenzin(){
Benzin=Benzin-0.5;
System.out.println(Benzin);
}
}
Casting auf abstrakte Klassen


Man kann zwar keine Instanz eine abstrakten
Klasse erzeugen, aber man kann eine
Subklasse auf eine abstrakte Klasse casten.
Z.B.:
Superkl superKlasse;
Subkl subKlasse=new SubKl();
superKlasse=subKlasse;
Übungsbeispiel




Geben Sie eine abstrakte Klasse Person an, mit den privaten
Attributen Name und Land, den entsprechenden
Zugriffsmethoden und einer abstrakten Methode Hallo. Die
Klasse soll einen Defaultkonstruktor und einen Konstruktor mit
dem Namen haben.
Leiten sie von der abstrakten Klasse eine Klasse Englaender ab,
die in der Methode Hallo den String „Hi there!!“ ausgibt. Die
Klasse soll eine Defaultkonstruktor und einen Konstruktor mit
dem Namen haben.
Leiten sie von der abstrakten Klasse eine Klasse Oesterreicher
ab, die in der Methode Hallo den String „Hallo Ihr ...!!“ ausgibt.
Die Klasse soll eine Defaultkonstruktor und einen Konstruktor
mit dem Namen haben.
Testen Sie die Klasse mit dem Engländern Tom und Tim und den
Österreichern Franz und Hans
interface Klasse




Gibt hauptsächlich den Aufbau einer Klasse an ohne
irgendeine Funktionalität
Es definiert nur die Methoden (return-Wert,
Argumente und deren Typ) und konstante
Klassenvariablen
Methoden sind per default abstract, da sie nicht
implementiert werden. Deshalb müssen Methoden
auch nicht explicit als abstract definiert werden
ACHTUNG!! Es kann keine statischen Methoden
geben!
Beispiel einer interface Klasse
public interface Kalender{
public final static int Kalendererstelljahr=2000;
public abstract void eingeben(String termin, Date date);
public abstract String abfragen(Date date);
public abstract String abfragen(Date termin);
public abstract void loeschen(String string);
}
Interface Klasse

Hauptverwendung: Mehrfachvererbung
public interface Motorrad extends KFZ, Zweirad
{
...
}
public class MyMotorrad implements Motorrad
{
...
}
Bzw.:
public class MyMotorrad implements KFZ, Zweirad
{
...
}
Unterschiede zwischen
abstrakter Klasse und Interface



Interface stellt per Definition keine Funktionalität zur
Verfügung – abstrakte Klasse kann eine
Funktionalität zur Verfügung stellen
Eine Klasse kann mehrere Interfaces
implementierten, nicht aber von mehreren Klassen
erben
Ein Interface kann ein oder mehrere Interfaces
erweitern. Eine Klasse kann Interfaces nicht
erweitern, sondern nur (mit Funktionalität)
„ausfüllen“
Die Klasse Vector



Dient zum Speichern einer verketteten
Liste
Die gespeicheten Objekte müssen nicht
von derselben Klasse sein, sondern nur
von Object abgeleitet
Zu finden im Package
java.util.Vector
Konstruktoren für Vector

Vector() – kreiert default Vector mit der Größe

Vector(Größe) – kreiert Vektor mit der Größe

Vector(Größe, n) - kreiert Vektor mit der
10
„Größe“
Größe „Größe“, der bei Überschreitung der
angegebenen Größe Platz für weitere n
Elemente allokiert
ACHTUNG!! Ist die Länge des Vectors n, so
laufen Indices n-1.
Befehle des Vectors



clone() – kopiert Vector
contains (Object object) – schaut ob der Vector
das Object enthält
Elemente hinzufügen

addElement (Object object) – fügt ein Element ans

insertElementAt(Object object, int Index) – fügt ein

setElementAt(Object object, int index) – gibt Objekt
Ende des Vectors an
Element an die Stelle Index ein
an die angegebene Stelle und überschreibt dabei das
vorhandene Objekt
Befehle des Vectors

Elemente suchen





lastElement() – gibt letztes Element zurück
elementAt(int Index) – gibt Objekt das an der
angegebenen Stelle steht zurück
firstElement() – gibt erstes Objekt zurück
indexOf(Object object) – gibt die Position des ersten
Elements an, das mit dem angegebenen Objekt
übereinstimmt (nicht vorhanden => –1)
indexOf(Object object, int index) – gibt die Position des
ersten Elements an, das mit dem angegebenen Objekt
übereinstimmt – die Suche nach dem Objekt beginnt bei der
angegebene Indexstelle (nicht vorhanden => –1)
Befehle des Vectors



lastIndexOf(Object object, int index) – gibt die
Position des letzten Elements an, das mit dem
angegebenen Objekt übereinstimmt – die Suche nach dem
Objekt beginnt der angegebene Indexstelle (nicht
vorhanden => –1)
empty() – gibt an ob Vector leer ist
Elemente entfernen
 removeElement(Object object) – löscht das erste


Vorkommnis des angegebenen Elements
removeElementAt(int indesx) – löscht Element an
angegebener Stelle
removeAllElement() – entfernt alle Elemente aus dem
Vector
Befehle für Vektorhandhabung

capacity() – gibt die Anzahl der allokierten Elemente des

ensureCapacity(int minCap) – vergrößert allokierten Platz



Vectors an
im Vector auf „minCap“. Falls der Vector bereits größer ist,
wird der Befehl ignoriert
setSize(int Größe) – setzt die Vectorgröße auf die
angegebene Größe. Falls der Vector kleiner ist, wird er mit
leeren Referenzen (null) angefüllt, ist er größer werden die
überschüssigen Objekte gelöscht
size() – gibt die Anzahl der Elemente im Vector an
trimSize() – paßt die Größe des Vectors auf die aktuelle
Größe an und gibt somit unnötig allokierten Speicherplatz frei
Array-Deklaration

Deklaration einer Variablen, die eine Referenz auf ein
Array enthalten kann:


Anlegen eines Arrays von n Elementen dieses Typs
und Zuweisung der Referenz auf dieses Array an die
Referenz-Variable:


typ[ ] name;
name = new typ [n];
Deklaration und Anlegen in einem:

typ[ ] name = new typ [n];
ACHTUNG!! Ist die Länge des Arrays n, so laufen die
Indizes von 0 bis n-1.
Array-Wertzuweisung

Zuweisen von Werten zu den Arrayelementen:


Die Länge eines Arrays erhält man mit


for (int i=0; i<name.length; i++) { name[i] = wert; }
name.length
Deklaration, Anlegen und Zuweisung von
Anfangswerten in einem:

int[] daysPerMonth =


{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
String[] weekDay =

{ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" };
Array für Objekte und
mehrdimensionale Array

Array von Objekten
Classname[ ] name = new Classname [n];
for (int i=0; i<name.length; i++) {
}

name[i] = new Classname();
Zweidimensionales Array der Größe n mal m
typ[ ][ ] name = new typ [n][ m];
z.B.:
float[][] a3=new float[3][7];
Weitere Klassenbeispiele



Stack Klasse
Queue Klasse
Hashtable
Die Klasse Hashtable



Dient zum Speichern eines Hashtables (das
ist eine Datenstruktur, die ein Objekt
zusammen mit einem Schüssel speichert)
Die gespeicheten Objekte müssen nicht von
derselben Klasse sein, sondern nur von
Object abgeleitet
Zu finden im Package
java.util.Hashtable
Konstruktoren von Hashtable

Hashtable() – kreiert default Hashtable mit der
Größe 101


Hashtable(Größe) – kreiert Hashtable mit der
Größe „Größe“ - der „load factor“ (also jene Größe,
bei der der Hashtable neu aufgebaut wird) ist in
diesem Fall 75% der Größe
Hashtable(Größe, loadFactor) - kreiert Vektor mit
der Größe „Größe“, und dem „load factor“ loadfactor
Befehle des Hashtable

clear() – löscht den Hashtable
clone() – kopiert Hashtable
contains (Object aValue) – schaut ob der

containsKey(Object aValue) – schaut ob der




Hashtable das Objekt enthält
Hashtable den Schlüssel enthält
toString() – gibt Objekte und Schlüssel des
Hashtable in einem String zurück
rehash() –Hashtable wird neu aufgebaut
Beispiel für einen Hashtable
import java.util.Hashtable;
public class Hash {
public static void main(String args[]){
Hash h=new Hash ();
h.Hash();
}
public void Hash(){
Hashtable x=new Hashtable();
x.put("jjh","John");
x.put("msw","Maria");
Hashtable y=new Hashtable ();
y=(Hashtable) x.clone();
System.out.println(t.toString());
System.out.println(y.get(„jjh"));
}
}
Herunterladen