Programmieren in Java Angelehnt an: The Java Tutorial from Sun Microsystems Hannes Reisinger - hare@tirol.com
Ziele und Pläne Grundlagen Schlüsselwörte und Sprachgrundlagen Programme lesbar schreiben und die der anderen Kursteilnehmer lesen können Paradigmen des Programmierens Grundbegriffe der OOP Kapselung Klassen Vererbung
Beispielanwendung JDK und Texteditor HelloWorldApp.java erstellen Kompilieren und ausführen \jdk1.3\docs\api\index.html
Beispielapplet HelloWorld.java und HelloWorld.html erstellen Kompilieren und ausführen import java.applet.applet; import java.awt.graphics; public class HelloWorld extends Applet init(), start(), paint(), stop() und destroy()
JavaDoc \jdk1.3\docs\tooldocs\win32\javadoc.html Kein /* Kommentar */ oder // Kommentar Sondern nur /** Kommentar */ @author name-text @see "string" oder <a href="url">label</a> oder package.class#member label @version version-text
Die Java Sprachumgebung Compiler Java Bytecode Plattform-abhängiger Interpreter
Die Java Plattform Java Application Programming Interface (Java API) Java Virtual Machine (Java VM)
Die Programmiersprache Java Simple Object oriented Distributed Interpreted Robust Secure Architecture neutral Portable High performance Multithreaded Dynamic
Nachteile konventioneller Programmiersprachen Keine eigenen Internetfunktionen Größe der ausführbaren Dateien Mangelnde Sicherheit Keine Unterstützung für unterschiedlichste Plattformen
Die Sprache Java erlernen OOP Konzepte Sprachgrundlagen Basisobjekte Klassen und Vererbung Schnittstellen und Packages
Prozedural - Objektorientiert Haupt- / Unterprogramme Mensch Auto Haus
Paradigmen des Programmierens Prozedurales Programmieren Entscheide, welche Prozeduren Du willst; verwende den besten Algorithmus, den Du kennst. Modulares Programmieren Entscheide, welche Module Du brauchst; zerlege das Programm so, daß die Daten in Module eingekapselt sind. Datenabstraktion Entscheide, welche Typen Du willst; stelle eine komplette Menge von Operationen für jeden Typ zur Verfügung. Objektorientiertes Programmieren Entscheide, welche Klassen Du brauchst; stelle für jede Klasse eine komplette Menge von Operationen zur Verfügung; mache Gemeinsamkeiten via Vererbung explizit.
Was zeichnet die Objekttechnologie aus? Vielzahl neuer Begriffe und Schlagworte Programm als Abbild der Wirklichkeit Zusammenfassung von Daten und der darauf wirkenden Operationen = Kapselung Entwicklung geschieht nicht revolutionär sondern evolutionär Fehlersicherheit Wiederverwendbarkeit höhere Produktivität
Vorraussetzungen dafür sind Analyse - Die relevanten Objekte der Realität herausfiltern und deren Kommunikation untereinander überlegen Design - Übersichtliche und auch für andere Problemstellungen zu verwendende Schnittstellen definieren und deren Gemeinsamkeiten in Form einer Hierarchie darstellen Entsprechend Analyse und Design die Klassen implementieren Ausgiebig testen und dokumentieren Solange man nicht zufrieden ist, wieder mit dem ersten Punkt beginnen
OOP Konzepte Objekt Nachricht Klasse Vererbung Schnittstelle Praktisches Beispiel ClickMe-Applet
Grundlegende Informationen zu Objekten Eigenschaften (attributes) Daten Methoden (methodes) Operationen zur Manipulation seiner eigenen Daten Nachrichten (messages) Werden zur Kommunikation untereinander benötigt Rufen die entsprechenden Methoden auf Unterscheidung: class - instance Unterscheidung: message - methode Vererbung (inheritance)
Sprachgrundlagen Variablen Operatoren Ausdruck, Anweisung und Blöcke Kontrollstrukturen
Regeln für Bezeichner (unter anderem auch Variablennamen) (siehe Java Language Specification "3.8 Identifiers") Bezeichner müssen mit einem Buchstaben (A..Z, a..z) oder einem Unterstrich (_) oder einem Dollarzeichen ($) beginnen. Zu testen über Character.isJavaIdentifierStart() Auf dieses erste Zeichen können weitere Buchstaben, Ziffern (0..9) und Unterstriche und Dollarzeichen folgen. Zu testen über Character.isJavaIdentifierPart() Bezeichner können beliebig lang sein. Zwischen Groß- und Kleinschreibung wird unterschieden. In Java stellen also Index, INDEX und index drei verschiedene Bezeichner dar, die nichts miteinander zu tun haben. Schlüsselwörter (wie z.b. for oder while) können nicht als Bezeichner verwendet werden. Auch true, false und null sind nicht erlaubt.
Arbeitsblatt - Variablennamen Entscheiden Sie bitte, welche der angeführten Variablennamen gültig sind, welche nicht, und welche Ihnen ungünstig erscheinen (bitte mit einer kurzen Notiz). Um eine Liste der Schlüsselwörter (Keywords) zu erhalten (die ja nicht als Variablennamen verwendet werden dürfen) siehe Java Language Specification "3.9 Keywords" 1. var_22 2. 22ste_var 3. _zaehler 4. _zähler 5. karl_der_grosse 6. karl_der_große 7. vier_*_5_ist_20 8. c 9. marathonlaufteilnehmername 10. marathon_lauf_teilnehmer_name 11. MarathonLaufTeilnehmerName 12. int 13. char 14. INT 15. return 16. do 17. DO_WHILE_SCHLEIFE 18. _ 19.
Datentypen elementare Datentypen Referenztypen boolean Numerische Werte class Ganze Zahlen Gleitkommazahlen interface Array signed unsigned float (32 Bit) String byte (8 Bit) char (16 Bit) double (64 Bit) short (16 Bit) int (32 Bit) long (64 Bit)
Erste Operatoren Der Vorrang und die Assoziativität der Operatoren ist in der LangSpec 15.7 Evaluation Order festgehalten. Wertzuweisungen = plus die Zuweisungsoperatoren Arithmetische Operatoren +, -, *, /, % (%... Rest nach ganzzahliger Division - Modulo) Erste Zuweisungsoperatoren +=, -=, *=, /=, %= Vergleichsoperatoren (Relationale Operat.) ==,!=, <, <=, >, >= Verknüpfungsoperatoren (Logische Operat.) && (AND), (OR),! (NOT), ^ (XOR)
Kontrollstrukturen (siehe LangSpec 14 Blocks and Statements) Bedingungen if-else?: Auswahl else-if switch Schleifen while (Schleife mit Eintrittsbedingung) for (Zählschleife) do-while (Schleife mit Austrittsbedingung)
Weitere Operatoren Unäre Operatoren +, -, ++, -- Bitmanipulationen << (shift left), >> (shift right), >>> (shift right), & (AND), (OR), ^ (XOR), ~ (NOT) (~ ist ein unärer Operator) Weitere Zuweisungsoperatoren <<=, >>=, >>>=, &=, =, ^= Diverse andere Operatoren?:, (), [],., (type), new, instanceof
Lebenszyklus eines Objekte Deklarieren einer Variablen (Referenzvariablen) Erzeugung eines Objekts Initialisieren des Objekts mit dem Konstruktor Das Objekt der (Referenz-)Variablen zuweisen Das Objekt über die Referenzvariable und den Operator '.' verwenden Zerstörung durch die Garbage Collection protected void finalize() throws Throwable
Zugriffsrechte Bezeichner class subclass package world private X protected X X X public X X X X package X X
Basisobjekte Typ name = new Typ(Parameter); String und StringBuffer Nummern (Basisklasse: Number) Byte, Short, Integer, Long, Float, Double BigInteger, BigDecimal Math Array
Formatierungen java.text.numberformat getnumberinstance() format() java.text.decimalformat applypattern() java.text.decimalformatsymbols DecimalFormat() - Konstruktor DecimalFormat.setDecimalFormatSymbols()
Klasse und Schnittstelle jdk1.3\tutorial\java\javaoo\classes.html Innere Klassen jdk1.3\tutorial\java\javaoo\innerclasses.html Schnittstellen und Pakete jdk1.3\tutorial\java\interpack\index.html
Vererbung Abgeleitete Klassen public class a { /*... */ } public class b extends a { /*... */ } Abstrakte Klassen public abstract class c { /*... */ }
Objekte, Daten, Funktionen und der Speicher public class Bsp { int m_i1, m_i2; void f1() {} void f2() {} };... main(...) { Bsp var1=new Bsp(), var2=new Bsp(), var3=new Bsp(); var3.f1(); var1.f2(); } var1 var2 var3 m_i1 m_i2 m_i1 m_i2 Funktionen der Klasse Bsp Bsp.f1 m_i1 m_i2 Bsp.f2
Statische im Vergleich zu automatischen Elementvariablen public class Bsp { int m_i1 = 1; int m_i2 = 2; static int s_i = 3; void print() {} }... main(...) { Bsp var1=new Bsp(), var2=new Bsp(), var3=new Bsp(); } var1 var2 var3 m_i1 m_i2 m_i1 m_i2 Klassenvaraible der Klasse Bsp m_i1 m_i2 Bsp.s_i
Implementierung von Klassen - 1 public class B { private int m_i1; protected int m_i2; public int m_i3; public static int s_i; public void bf(); } public class C extends B { private int m_i4; public void cf(); } B-> B, C-> B.m_i1 B.m_i2 B.m_i3 B.m_i1 B.m_i2 B.m_i3 C.m_i4
Implementierung von Klassen - 2 B-> B.m_i1 B.m_i2 B.m_i3 B, C-> B.m_i1 B, D-> B.m_i1 B, D, E-> B.m_i1 B.m_i2 B.m_i2 B.m_i2 B.m_i3 B.m_i3 B.m_i3 C.m_i4 D.m_i5 D.m_i5 E.m_i6
Implementierung von Klassen - 3 public class X { public void fa() {} public void fb() {} } public class Y extends X { public void fa() {} public void fc() {} } X-> Y-> X::vfptr X.m_... Y::vfptr X.m_... Y.m_... X.fa X.fb Y.fa X.fb Y.fc public class Z extends Y { public void fa() {} public void fc() {} public void fd() {} } Z-> Z::vfptr X.m_... Y.m_... Z.m_... Z.fa X.fb Z.fc Z.fd vfptr... virtual function pointer
Wichtige Java Klassen java.util.properties java.lang.system java.lang.securitymanager java.lang.throwable, java.lang.exception usw. java.io.* Reader, Writer, InputStream, OutputStream usw. java.lang.thread und entsprechende Klassen
java.util.properties
java.lang.system Alle Methoden und Variablen sind static Standard I/O Streams (in, out, err) System Properties Eigener SecurityManager java.lang.runtime
Ausnahmebehandlung - Exceptionhandling java.lang.throwable java.lang.error (nicht fangen) java.lang.exception (zu fangen) java.lang.runtimeexception (muß nicht deklariert werden) try { throw new DerivedException("Hallo"); } catch ( DerivedException e ) { } catch ( Exception e ) { } finally {} Reihenfolge wichtig
Threads
Varianten von Threads Timer und TimerTask Klasse von Thread ableiten und run() überladen Wenn eine Klasse schon abgeleitet ist, dann das Interface Runnable mit der Methode run() implementieren Schlüsselwort synchonized Thread.yield() für kooperatives Multitasking
Arbeitsblatt Object.wait() und Object.notify() Fabrik => Lager => Auslieferung Eine Fabrik produziert Waren. Diese werden in ein Lager geliefert. Dieses Lager kann drei dieser Waren aufnehmen. Die Auslieferung holt die Ware, die im Lager ist heraus und liefert sie aus. Ist die Fabrik schneller als die Auslieferung, so muß die Fabrik warten. Ist die Auslieferung schneller, so muß die Auslieferung warten.
Standard Ein-/Ausgabe System.in, System.out, System.err Ausgabemethoden (System.out, System.err) print() und println() Einlesemethoden (System.in) BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); String str = in.readline();
Java.io.* Streams die mit Bytes arbeiten Lesend: InputStream Schreibend: OutputStream Streams die mit Buchstaben arbeiten Lesend: Reader Schreibend: Writer
Bytes in/aus Datensenken java.io.inputstream ByteArrayInputStream FileInputStream PipedInputStream StringBufferInputStream java.io.outputstream ByteArrayOutputStream FileOutputStream PipedOutputStream
Bytes verarbeitende Streams java.io.inputstream FilterInputStream BufferedInputStream DataInputStream LineNumberInputStream PushbackInputStream ObjectInputStream SequenceInputStream java.io.outputstream FilterOutputStream BufferedOutputStream DataOutputStream PrintStream ObjectOutputStream
Buchstaben in/aus Datensenken java.io.reader java.io.chararrayreader java.io.filereader java.io.pipedreader java.io.stringreader java.io.writer java.io.chararraywriter java.io.filewriter java.io.pipedwriter java.io.stringwriter
Buchstaben verarbeitende Streams java.io.reader java.io.bufferedreader java.io.linenumberreader java.io.filterreader java.io.pushbackreader java.io.inputstreamreader java.io.writer java.io.bufferedwriter java.io.filterwriter java.io.outputstreamwriter java.io.printwriter
java.util.* java.util.date und java.util.calendar java.util.observable und java.util.observer java.util.random java.util.zip.* und java.util.jar.*
Collections Framework
java.awt.component
LayoutManager BorderLayout CardLayout FlowLayout GridLayout GridBagLayout GridBagConstraints
Events und Listeners add*listener() Adapter und innere Klassen
java.awt.menucomponent
JFC - Java Foundation Classes Swing Components Pluggable Look and Feel Support Accessibility API Java 2D API (Java 2 Platform only) Drag and Drop Support (Java 2 Platform only)
Unterstützende Technologien setaccessiblename() wenn kein kurzer Text settooltiptext() or setaccessibledescription() JButton.setMnemonic() ImageIcon.setDescription() JLabel.setLabelFor()
Arbeitsblatt Grafische Darstellung des Beispiels Fabrik => Lager => Auslieferung Mit einem Knopf soll die Fabrik eine Ware in das Lager einfügen Der Füllstand des Lagers soll dargestellt werden Zuerst als Text, wenn Zeit ist, mit Symbolen Mit einem weiteren Knopf soll die Auslieferung eine Ware aus dem Lager entnehmen
JDBC - Datenbank Zugriff DRIVER = "sun.jdbc.odbc.jdbcodbcdriver"; Class.forName(DRIVER); URL2DB = "jdbc:odbc:personen"; DriverManager.getConnection(URL2DB); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select * FROM Person"); rs.getstring(indexornameofcolumn);
Bei Java-kompatiblen Browsern liefert der Server die fehlenden Objekt-Viewer oder anderen Programmcode einfach nach. Browser Netzwerk Server Benutzer fordert Objekt an Browser versteht den Objekttyp nicht Darstellung des Objekts Objekt Java-Code zur Objektdarstellung