Java Programmierung 1 WS 2024/2025 PDF
Document Details
Uploaded by Deleted User
Hochschule Bochum
2024
Hochschule Bochum
Prof. Dr. Rainer Lütticke, Prof. Dr. Katrin Brabender
Tags
Summary
These are lecture notes for a Java programming course, Software Development, held at the Bochum University of Applied Sciences in 2024/2025. Topics include software creation, data types, control structures, arrays, object-oriented programming, UML, exception handling, inheritance, polymorphism, algorithms, and recursion.
Full Transcript
Java Programmierung 1 WS 2024/2025 Prof. Dr. Rainer Lütticke große Teile des Skripts: Prof. Dr. Katrin Brabender Programmieren in Java 1 Java Programmierung WS...
Java Programmierung 1 WS 2024/2025 Prof. Dr. Rainer Lütticke große Teile des Skripts: Prof. Dr. Katrin Brabender Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 1 Inhalt der Vorlesung Erstellung von Software, Applikationen Datentypen (Zahlensysteme, Zuweisungen, Operatoren, Typkonvertierung) Kontrollstrukturen (Selektion, Schleife) Arrays Methoden im Allgemeinen und der Klassen Math , String , StringBuffer und Scanner Grundlagen der Objektorientierung (Klassen, Objekte, Kapselung), Pakete Einführung in UML Ausnahmebehandlung/Exceptions Vererbung, Polymorphie, Typkonvertierung von Referenzen Abstrakte Klassen, Interfaces Klonen Algorithmen, rekursive Algorithmen Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 2 Lehrgrundlage und Literatur Brabender, K.: Grundlagen der Informatik, Hochschule Bochum, WS 2010/2011, SS 2011 Andreas de Vries und Volker Weiß: Grundlagen der Programmierung – Vorlesungsskript für das erste Semester Wirtschaftsinformatik. Fachhochschule Südwestfalen, 2023 Christian Ullenboom: Java ist auch eine Insel. Rheinwerk Computing, 2023 Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 3 Online-Bücher / Online-Tutorials Christian Ullenboom, Java ist auch eine Insel http://openbook.rheinwerk-verlag.de/javainsel/ Java Tutorial interaktiv — Programmieren lernen mit Java (Einführung in die Informatik mit Java): http://gailer-net.de Java Tutorial von Oracle: https://docs.oracle.com/javase/tutorial/ Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 4 Erstellung von Software – Anwendungsprogrammierung Definition Ein Programm ist eine Folge von Befehlen oder Anweisungen an einen Rechner zur automatischen Bearbeitung eines Problems. Zur Erstellung eines Programms sind die folgenden Komponenten vor allem von Bedeutung: Editor, Compiler, Linker, Loader. Editor mit ihm werden lesbare Textdateien in der jeweiligen Programmiersprache (Quellcode) erzeugt Zur Übersetzung des Quellcodes in die Maschinensprache des Rechners gibt es zwei Typen von Übersetzungsprogrammen: Compiler und Interpreter. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 5 Interpreter übersetzt immer nur eine einzige Programmanweisung in Maschinensprache Jeder übersetzte Befehl wird sofort ausgeführt. Die Übersetzung wird nicht abgespeichert. Compiler übersetzt immer einen kompletten Programmtext in eine Folge von Maschinenbefehlen, bevor die erste Programmanweisung ausgeführt wird erzeugt aus dem Quellcode durch einen Übersetzungsvorgang den sogenannten Objektcode (in Java auch Bytecode genannt) überprüft auf Grammatik- oder Syntaxfehler Objektcode enthält binären Code. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 6 Zur Entstehung eines lauffähigen Compiler-Programms sind also folgende Schritte notwendig: Editor Quellcode Compiler Objektcode Objektcode Bibliotheks- Linker code Programm- code Lauffähiges Loader Programm im Speicher Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 7 Linker führt nach dem Compilieren mehrere unabhängige Programmteile eines Softwareprojektes zu einem Gesamtprojekt zusammen Hinzufügung benötigter mathematischer oder anderer allgemeiner Programmteile aus Softwarebibliotheken erzeugt aus den Objektcode des Programmierers und dem Objektcode der Bibliothek ausführbaren Programmcode Loader lädt das Programm an eine freie Position im RAM (Random Access Memory = Direktzugriffsspeicher) Funktion wird in der Regel durch das Betriebssystem bereitgestellt. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 8 Hilfsmittel zur Softwareentwicklung sind: Debugger System zur Identifizierung von logischen Fehlern und Laufzeit-Fehlern Debugger drängen sich zwischen Betriebssystem und Programm und übernehmen die Steuerung und Kontrolle der Programmausführung. IDE - Integrated Development Environment Entwicklungsumgebung, die sämtliche Schritte der Programmentwicklung von einer gemeinsamen Entwicklungsoberfläche möglich macht ermöglicht die graphische Entwicklung von Software verbirgt die Komplexität der Entwicklung Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 9 Kurze Einführung in die Geschichte von Java Java wurde ab 1991 von der Firma Sun Microsystems (2010 übernommen von Oracle) entwickelt. Zu Beginn erfolgte die Entwicklung im Rahmen eines internen Forschungsprojektes mit dem Ziel, eine Programmiersprache zur Steuerung von Geräten der Haushaltselektronik zu entwickeln. Hauptziel der Programmiersprache: klein, schnell, effizient und leicht portierbar für breiten Bereich von Hardware. Die Programmiersprache erhielt den Namen Java (umgangssprachlich Kaffee). 1993 sollte Projekt abgebrochen werden, da sich der Markt für intelligente Haushaltsgeräte nicht gut entwickelte. Zu dieser Zeit etablierte sich das World Wide Web (WWW). Sun erkannte Potential in Java und das Projekt wurde fortgeführt. Anfang 1995: Durchbruch von Java durch Netscape Navigator 2.0, der Java Programme ausführen kann. Januar 2010: Sun wird von Oracle übernommen. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 10 Ziele von Java: Java soll eine einfache, objektorientierte, verteilte, vertraute, robuste, sichere, plattformunabhängige, portierbare, leistungsfähig, interpretierbar, parallelisierbare und dynamische Sprache sein. Java ist eine der populärsten Sprachen: TIOBE-Index: bis 2020 auf einem der ersten beiden Plätze (neben C) seit 2021 auf einem der ersten drei Plätze (2024: hinter Python und C++) RedMonk-Programmiersprachenindex 2024: JavaScript, Python, Java Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 11 Das Arbeitsprinzip von Java Der Source Code eines Java-Programms steht in einer Textdatei mit der Endung.java Von einem Compiler mit dem Namen javac wird anhand dieser Text-Datei eine Datei mit der Endung.class erzeugt. Diese Datei enthält den sogenannten Bytecode, der auf einer virtuellen Maschine (JVM) läuft. Die virtuelle Maschine wird durch den Befehl java aufgerufen, lädt dadurch den Bytecode in den RAM des Rechners und führt den Bytecode aus, so dass das Programm abläuft. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 12 Die Voraussetzung für das Arbeiten mit Java Für Java gibt es verschiedene Editions: u.a. Standard Edition = SE, Enterprise Edition = EE und Mirco Edition = ME Zur Erstellung von Java-Programmen benötigt man eine Java Platform, das Java Development Kit = JDK (auch Java SDK = Software Development Kit genannt) für das entsprechende Betriebssystem. Das JDK beinhaltet die Java Runtime Environment = JRE) und insbesondere den Compiler (javac) und die Virtuelle Maschine (java). Das JDK von Java SE kann man im Internet direkt von Oracle herunterladen. Die Adresse lautet: https://www.oracle.com/java/technologies/downloads/ Tutorials (z.B. Installation): https://docs.oracle.com/javase/tutorial/ Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 13 Erstellung von Java-Programmen Applikation (lateinisch für Anwendung): eigenständiges Programm, das nur die virtuelle Maschine zur Interpretation des Quellcodes braucht und selbstständig lauffähig ist (wie auch in anderen Programmiersprachen üblich) Java Programme werden als Text in Dateien eingegeben. Hierzu benutzt man entweder einen Texteditor oder eine integrierte Entwicklungsumgebung (IDE Integrated Development Environment). Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 14 Applikationen // Willkommen.java class Willkommen { public static void main(String args[]){ System.out.println("Willkommen zur Java-Vorlesung"); } } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 15 Was sind die Schritte, um die Applikation zu starten? 1. Erstellen der Datei Willkommen.class im Bytecode: javac Willkommen.java 2. java Willkommen führt zur Ausführung des Programms. Das Ergebnis ist die Ausgabe des Textes: Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 16 Grundbestandteile eines Java-Programms 1. Jedes Java-Programm besteht aus (mindestens) einer Klasse. Sie beginnt mit dem Schlüsselwort class und dem Namen der Klasse. 2. Eine Klasse ist in Einheiten gepackt, so genannte Blöcke, die von geschweiften Klammern {...} umschlossen sind. 3. Der Startpunkt jeder Applikation ist die Methode main. Hier beginnt die Virtuelle Maschine von Java die einzelnen Anweisungen auszuführen. Abgearbeitet wird sequenziell, d.h. der Reihe nach. 4. Die Applikation Willkommen.java besteht aus einer Anweisung, der Ausgabe eines Textes. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 17 Kommentare Kommentare dienen zur Dokumentation von Programmen und verbessern ihre Lesbarkeit. Sie bewirken keine Aktion bei der Ausführung des Programms und werden vom Java-Compiler ignoriert. Es gibt drei verschiedene Arten, Kommentare in Java zu erstellen. //.. einzeiliger Kommentar: Er beginnt mit dem Doppelslash // und endet mit dem Zeilenende. (Quellcode, der in derselben Zeile vor dem Doppelslash steht, wird normal verarbeitet.) Kommentierung von mehreren Textzeilen Dokumentationskommentar zur automatischen Dokumentation Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 18 Die Klassendeklaration Das reservierte Wort class eröffnet die Klassendeklaration in Java, gefolgt von dem Klassennamen (in unserem ersten Beispiel Willkommen). Reservierte Wörter sind von Java belegt (nur kleine Buchstaben). Der Klassenname ist ein Identifier oder Bezeichner. Ein Identifier ist eine Folge von alphanumerischen Zeichen, d.h. Buchstaben, Ziffern, dem Unterstrich _ und dem Dollarzeichen $. Ein Bezeichner darf nicht mit einer Ziffer beginnen und keine Leerzeichen enthalten. Java ist case sensitive, d.h. Groß- und Kleinschreibung wird unterschieden. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 19 Merkregel für das Erstellen einfacher Applikationen Speichern Sie zunächst Ihre Klasse in einer Datei ab, die genau so heißt, wie die Klasse mit der Erweiterung.java. Es gilt folgende Konvention: Klassennamen beginnen mit einem Großbuchstaben und bestehen aus einem Wort. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 20 Blöcke Die Deklaration einer Klasse geschieht in einem Block, der durch geschweifte Klammern {} umschlossen ist. Innerhalb eines Blockes können sich noch weitere Blöcke befinden. Die Klammern müssen korrekt geschlossen sein. Zwei Konventionen sind üblich: class Willkommen {.... } oder class Willkommen{ //in Java üblicher..... } Zur besseren Lesbarkeit eines Programms sollte jede Zeile eines Blocks gleich weit eingerückt sein. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 21 Der Programmstart: Die Methode main Die zentrale Einheit einer Applikation ist die Methode main. Durch sie wird die Applikation gestartet, durch die dann alle Anweisungen ausgeführt werden, die in ihr programmiert sind. Die Zeile public static void main( ……… ) ist Teil jeder Java-Applikation (Anzahl der Leerzeichen ist unwichtig). Java-Applikationen beginnen automatisch bei main. Die runden Klammern hinter main zeigen an, dass main eine Methode ist. Nach dem Aufruf der Methode main mit dem Standardargument String args[] (es kann auch ein anderer Name als args gewählt werden) kommt der Methodenrumpf, eingeschlossen durch geschweifte Klammern: {...}. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 22 Eine allgemeine Applikation in Java muss in jedem Fall die folgende Konstruktion beinhalten (einige wenige Elemente können in der Reihenfolge vertauscht werden) : class Klassenname { public static void main(String args[]){ Deklarationen und Anweisungen; } } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 23 Erweiterung der ersten Java-Applikation import javax.swing.JOptionPane; class Willkommen2{ public static void main(String args[]){ JOptionPane.showMessageDialog (null, "Willkommen zur \nJava-Vorlesung"); System.exit(0); } } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 24 Die Ausgabe erfolgt dann in einem Dialogfenster, das durch das Klicken des OK-Buttons geschlossen werden kann. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 25 Die Methode System.exit Die Methode exit gehört zur Klasse System und beendet die Applikation bei Dialogfenstern. Wird diese Anweisung bei Dialogfenstern nicht angegeben, so kann die Applikation die Java Virtual Maschine blockieren. Die Klasse System gehört zu dem Paket java.lang, das automatisch jedem Java-Programm zur Verfügung steht. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 26 Die import-Anweisung Benutzt man Klassen aus anderen Paketen (Ausnahme bildet das Paket java.lang), so muss diese Klasse ausdrücklich mit ihrem Paketpfad angegeben werden. Mit der import-Anweisung wird die Klasse JOptionPane eingelesen und für das Programm benutzbar. JOptionPane ist eine Standardklasse von Java aus dem Paket javax.swing und stellt Dialogboxen, d.h. Fenster zur Ein-und Ausgabe zur Verfügung. Java-Klassen können generell in Paketen, d.h. in Verzeichnissen bereitgestellt werden. Z.B. sind alle Klassen des Swing-Pakets javax.swing in dem Verzeichnis \javax\swing zu finden. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 27 Die Methode showMessageDialog öffnet eine Dialogbox, die den in Hochkommata eingeschlossenen Text anzeigt, der an zweiter Stelle, d.h. nach dem reservierten Wort null steht. null ist ein reserviertes Wort. null ist der Bezeichner für ein nicht vorhandenes Objekt. In dem Beispiel bewirkt es, dass ein Standard-Frame benutzt wird, der zentriert auf der Mitte des Bildschirms erscheint. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 28 Escape-Sequenzen und Strings Der in die Anführungszeichen ("....") gesetzte Text ist ein String, d.h. eine Kette von beliebigen Zeichen. Strings sind in Java vom Datentyp String. Strings werden z.B. durch die Methoden System.out.println oder JOptionPane.showMessageDialog auf dem Bildschirm exakt so ausgegeben, wie eingetippt werden - bis auf die sogenannten Escape- Sequenzen: Eine Escape-Sequenz ist ein Hilfsmittel zur Darstellung nicht druckbarer oder besonderer Zeichen und wird durch den Backslash \ gefolgt von genau einem weiteren Zeichen geschrieben. Z.B. \n für einen Zeilenwechsel oder \" für ein " (englisches Anführungszeichen). Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 29 Escape-Zeichen Bedeutung \n neue Zeile (new line) \t führt Tabulatorsprung aus (tab) \r positioniert den Cursor an den Anfang der aktuellen Zeile (carriage return) \b positioniert den Cursor ein Zeichen zurück (backspace) \f Seitenvorschub (neue Seite) (form feed) \\ Ausgabe des Backslash \ \" Ausgabe des (englischen) Anführungszeichens " \' Ausgabe des Hochkommas ' Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 30 Anmerkung zu den Escape-Sequenzen Die Escape-Sequenzen \t, \f, \r und \b werden von der Methode showMessageDialog() nicht beachtet. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 31 Programmier-Styleguide Als Programmierstil hat sich durchgesetzt: Variablennamen 1. Buchstabe klein variable Methodennamen 1. Buchstabe klein methode(…) Klassennamen 1. Buchstabe groß Willkommen Aus mehreren Wörtern zusammengesetzte Namen werden ohne Unterstrich geschrieben, dabei wird ab dem zweiten Wort jeweils der erste Buchstabe eines Wortes groß geschrieben. Für das erste Wort gilt die normale Konvention. Beispiel: dritteWurzel Variable addiereWerte(…) Methode Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 32 Reservierte Schlüsselwörter Bestimmte Wörter sind als Bezeichner nicht zulässig, da sie als Schlüsselwörter durch den Compiler besonders behandelt werden. Schlüsselwörter bestimmen die „Sprache“ eines Compilers. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 33 Folgende Schlüsselwörter gibt es in Java: abstract, assert, boolean, break, byte, byvalue*, case, cast*, catch, char, class, const*, continue, default, do, double, else, enum, extends, false, final, finally, float, for, future*,generic*, goto*, if, implements, import, inner*, instanceof, int, interface, long, native, new, null, operator*, outer*, package, private, protected, public, rest*, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, true, try, var, void, volatile, while. * Diese Schlüsselwörter sind reserviert, werden aber nicht benutzt. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 34 Datentypen Allgemein sind Variablen Platzhalter bzw. Speicherbereiche. Eine Variable kann eine bestimmte Menge von Werten annehmen. Diese Menge bezeichnet man als Datentyp. Eine Deklaration Datentyp variablenName ordnet der Variable mit dem Namen variablenName einen bestimmten Datentyp zu. Eine Variable wird deklariert, indem man zuerst ihren Typ angibt und dahinter ihren Namen schreibt. Eine Variable muss stets deklariert sein, bevor sie verwendet wird. Durch die Deklaration wird ein bestimmter Speicherplatz im RAM reserviert. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 35 Deklaration Beispiel für eine Deklaration: String ausgabe; Gibt es in einem Programm mehrere Variablen desselben Datentyps, so kann man deren Namen bei der Deklaration durch Kommata getrennt hinter den Datentyp setzten: Beispiel: String eingabe, ausgabe; Ein Variablenname darf in einem Block nur einmal verwendet werden. Dies ist unabhängig von den verwendeten Datentypen. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 36 // StringEinAusgabe.java //Gibt den eingegebenen Text aus. import javax.swing.JOptionPane; class StringEinAusgabe{ public static void main(String args[]){ String eingabe; //Einlesen des Textes: eingabe = JOptionPane.showInputDialog("Geben Sie einen Text ein."); //Ausgabe des Textes JOptionPane.showMessageDialog(null, eingabe, "eingegebener Text", JOptionPane.PLAIN_MESSAGE); System.exit(0); } } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 37 Eingabedialoge Die Methode JOptionPane.showInputDialog mit dem String("Geben Sie einen Text ein.") erzeugt das folgende Fenster: Der Anwender muss einen String eingeben, der mit der Return-Taste oder mit einem Mausklick auf den OK-Button beendet wird. Über dem Eingabefeld erscheint der Text, der der Methode im Programm mitgegeben wurde. Der eingegebene String wird durch die Methode an das Programm zurückgegeben. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 38 Ausgabe-Dialoge Die Methode JOptionPane.showMessageDialog(null, ausgabe, "eingegebener Text", JOptionPane.PLAIN_MESSAGE); erzeugt das Ausgabefenster. Hier hat die Methode 4 Argumente: 1. null Standard-Frame (keine Bindung an ein Fenster) 2. ausgabe Nachricht, die angezeigt werden soll 3. "Ergebnis" String in der Titelleiste 4. JOptionPane.PLAIN_MESSAGE Anzeige des Message-Dialogtyps Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 39 Zusammenstellung der Message-Dialogtypen Message-Dialogtyp Icon Bedeutung JOptionPane.ERROR_MESSAGE Fehlermeldung JOptionPane.INFORMATION_MESSAGE informative Meldung; der User kann sie nur wegklicken JOptionPane.WARNING_MESSAGE Warnmeldung JOptionPane.QUESTION_MESSAGE Fragemeldung JOptionPane.PLAIN_MESSAGE Meldung ohne Icon Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 40 Wertzuweisungen/Zuweisungen In der Applikation StringEinAusgabe ist der Ausdruck eingabe = JOptionPane.showInputDialog ("Geben Sie einen Text ein"); eine Wertzuweisung. Die erstmalige Wertzuweisung an eine Variable wird Initialisierung genannt. Dabei ist = der Zuweisungsoperator. Die Variable eingabe bekommt über die Methode showInputDialog den String zugewiesen, den der User eingegeben hat. Nach der Belegung der Variable durch den String, hat das Programm den eingegebenen Wert im Hauptspeicher. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 41 Beispiele für Wertzuweisungen Deklarationen: String eingabe; int a; Wertzuweisungen: eingabe = "Mein Text"; a = 3; Deklaration und Wertzuweisung in einem: String text = "Wie geht es?"; int a = 3; Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 42 Beispiele für Wertzuweisungen an einen String durch String-Addition String ausgabe, ersteEingabe, zweiteEingabe; ersteEingabe = "Wie geht es? "; zweiteEingabe = "Gut"; ausgabe = ersteEingabe + zweiteEingabe; Der Variablen ausgabe wird die Aneinanderreihung der beiden Strings zugewiesen. Die Aneinanderreihung/Verknüpfung geschieht durch den Verkettungsoperator + (String-Addition). ausgabe ergibt somit den String: "Wie geht es? Gut" Auch möglich: ausgabe = "Wie geht es? " + "Gut"; Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 43 // StringAddition.java //Fuehrt zwei einzugebende Strings zusammen import javax.swing.JOptionPane; class StringAddition{ public static void main(String args[]){ String ersteEingabe, zweiteEingabe; String ausgabe; //Einlesen des ersten Textes: ersteEingabe = JOptionPane.showInputDialog("Geben Sie einen Text ein"); zweiteEingabe = JOptionPane.showInputDialog("Geben Sie einen zweiten Text ein"); //Zusammenfuehrung beider Texte ausgabe = ersteEingabe + zweiteEingabe; //Ausgabe des zusammengefuegten Textes JOptionPane.showMessageDialog(null, ausgabe, "Ergebnis", JOptionPane.PLAIN_MESSAGE); System.exit(0); } } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 44 Die Ein- und Ausgabe erfolgt dann in folgenden Dialogfenstern: Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 45 Die primitiven bzw. elementaren Datentypen Variablennamen wie eingabe und ausgabe beziehen sich auf bestimmte Stellen im Arbeitsspeicher des Rechners. Jede Variable hat einen Namen, einen Typ, eine Größe und einen Wert. Bei der Deklaration einer Variablen werden bestimmt Speicherzellen reserviert. Der Name der Variable im Programmcode verweist während der Laufzeit auf die Adresse dieser Speicherzellen. Die primitiven Datentypen bzw. elementaren Datentypen bekommen standardmäßig die folgenden Speichergrößen zugewiesen: Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 46 Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 47 Zahlensysteme Der Wert einer Zahl im Dezimalsystem kann dargestellt werden in der Form: Beispiel: Diese Darstellungsform nennt man Stellenwertsystem. Für den Wert einer Zahl z in einem Stellenwertsystem zur Basis B gilt: Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 48 Zahlensysteme Für die interne Verarbeitung innerhalb eines Rechners wird das Dualsystem benutzt. Aber auch das Oktal- und Hexadezimalsystem sind wichtige Stellenwertsysteme, da sie als abkürzende Schreibweise für Dualzahlen benutzt werden können. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 49 Vergleichstabelle Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 50 Umwandlung Bei Bedarf wird das benutzte Stellenwertsystem durch Zusätze markiert: Dualsystem: Oktalsystem: Dezimalsystem: Hexadezimalsystem: Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 51 Darstellung ganzer Zahlen im Rechner Mit einem Byte können 28 = 256 verschiedene Zahlen dargestellt werden, mit 2 Bytes können 216 verschiedene Zahlen, mit 4 Bytes 232 verschiedene Zahlen, usw. Daher lassen sich folgende Bereiche von ganzen Zahlen darstellen: byte von –27 bis 27 – 1 (–128 bis 127) short von –215 bis 215 – 1 (–32.768 bis 32.767) int von –231 bis 231 – 1 (–2.147.483.648 bis 2.147.483.647) Die positiven ganzen Zahlen werden direkt in ihrer Bitdarstellung gespeichert. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 52 Darstellung negativer ganzer Zahlen im Rechner Negative ganze Zahlen werden durch den Betrag ihres 2er-Komplement abgespeichert. Das 2er-Komplement einer Dualzahl ist die Ergänzung zur nächst höheren Bit-Wertigkeit (=Zweierpotenz). Bildung des 2er-Komplements: Alle Bits der entsprechenden positiven Zahl werden zuerst invertiert, d.h. ersetze 0 durch 1 und umgekehrt. Anschließend wird der so erhaltenen Zahl der Wert 1 hinzuaddiert. Ein eventuell auftretender Überlauf wird gestrichen. Beispiel: 2er-Komplement zur Zahl Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 53 Darstellung reeller Zahlen im Rechner Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 54 Darstellung reeller Zahlen im Rechner Die Gleitpunktdarstellung ist eine Methode zur näherungsweisen Darstellung von reellen Zahlen. Sie ist eine Darstellung, die bei festem Bitformat - ein möglichst großes Intervall der reellen Zahlen umfasst und - deren Genauigkeit bei kleinen Zahlen sehr hoch, bei großen Zahlen niedrig ist. Reelle Zahlen werden in Java in 32 Bits (float) oder 64 Bits (double) abgespeichert. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 55 Darstellung reeller Zahlen im Rechner Damit Gleitkommazahlen in einem Rechner eine eindeutige Darstellung haben, werden sie normiert dargestellt. Eine zur Basis 2 normierte Gleitkommazahl ist eine Zahl, bei der der Exponent so gewählt wird, dass die Zahl in der Form dargestellt werden kann. Beispiel: Bemerkung: Bei der Verwendung normierter Gleitkommazahlen muss die 1 vor dem Komma nicht gespeichert werden, da sie immer vorhanden ist. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 56 IEEE-Norm (Institute of Electrical and Electronics Engineers) Mitte der Achtzigerjahre wurde vom Institute of Electrical and Electronics Engineers die sog. IEEE-Norm verabschiedet, die Standard in den meisten Rechnern ist. Für Exponent und Mantisse sind hierbei eine feste Bitanzahl vorgegeben. float (32 Bits): Vorzeichen: 1 Bit, Exponent: 8 Bits, Mantisse: 23 Bits double (64 Bits): Vorzeichen: 1 Bit, Exponent: 11 Bits, Mantisse: 52 Bits Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 57 IEEE-Norm (Institute of Electrical and Electronics Engineers) Das Vorzeichenbit Das erste Bit wird als Vorzeichenbit interpretiert: 0 = positiv, 1 = negativ Die Exponentenbits (für float) Die nächsten 8 Bits codieren den Exponenten e. Mit 8 Bits können maximal = 256 verschiedene Exponenten codiert werden. Damit können Zahlen im Bereich von –127 bis 128 dargestellt werden. Damit das Vorzeichen des Exponenten nicht gespeichert werden muss, wird zum Exponenten 127 addiert. 0 und 255 sind für betragsmäßig sehr kleine Werte sowie „unendlich“ reserviert. Dadurch besteht der resultierende Exponent aus Zahlen von 1 bis 254. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 58 IEEE-Norm (Institute of Electrical and Electronics Engineers) Die Mantissenbits (für float) Die restlichen 23 Bits dienen zur Codierung der Mantisse. Die Mantisse wird normiert dargestellt, wobei die 1 vor dem Komma nicht mitgespeichert wird. Damit entspricht eine float-Codierung der Zahl: Die 64 Bit Codierung von double erfolgt analog. Es gilt: Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 59 IEEE-Norm (Institute of Electrical and Electronics Engineers) Sonderfälle NaN = Not a Number, d.h. nicht definiert. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 60 Beispiel: Dezimalzahl als IEEE-Zahl (float) 4,75 = 100,11 Normieren ergibt: 1,0011*2² Exponent mit 127 addieren: 127+2 = 129 = 10000001 Damit ergibt sich IEEE-Zahl: 0 10000001 00110000000000000000000 Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 61 Beispiel: IEEE-Zahl (float) in Dezimalzahl Gegeben: 1 10000101 10110000000000000000000 IEEE-Zahl-Exponent = 10000101 = 13310 IEEE-Zahl-Exponent – 127 = 6 = Exponent zu Basis 2 Also entspricht die IEEE-Zahl der Dezimalzahl: Beachte: Die nicht mitgespeicherte 1 vor dem Komma darf nicht vergessen werden. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 62 Besondere Zuweisungen für Zahlen Zuweisung von long-Integer: long a = 100L; oder long a = 100l; Zuweisung von float: float p = 3.1F; oder float p = 3.1f; Ganze Zahlen im Dual-, Oktal- und Hexadezimalsystem: int d = 0b110; ; ergibt dezimal 6. 0b steht für Dualsystem und darin bedeutet 110: 1*4 + 1*2 + 0*1 = 6. int k = 012; ergibt dezimal 10. 0 steht für Oktalsystem und darin bedeutet 12: 1*8 + 2*1 = 10. int j = 0x12; ergibt dezimal 18. 0x steht für Hexadezimalsystem und darin bedeutet 12: 1*16 + 2*1 = 18. Wissenschaftliche Darstellung von Gleitkommazahlen: double x = 5.0e+3; bedeutet x = 5000.0 Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 63 Operatoren Die Grundrechenoperationen in Java Die Grundrechenoperationen bestehen aus einem Operator und zwei Operanden. (z.B. Operation 1 + 2 hat Operator + und Operanden 1 und 2). Allgemein ist eine Operation gegeben durch einen Operator und mindestens einen Operanden. Operationen mit „demselben“ Operator aber unterschiedlichen Datentypen können zu verschiedenen Ergebnissen führen. (Beispiel die Stringaddition "1" + "2" liefert anderes Ergebnis als die Integer- Addition 1 + 2). Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 64 // Arithmetik.java // Führt verschiedene arithmetische Operationen durch class Arithmetik{ public static void main(String args[]){ int a,b,c,d; //ganze Zahlen double x,y,z; //reelle Zahlen String ausgabe; a = 6 * (3 - 1); b = 6 * 3 + 5; x = 16 / 5; y = 16 / 5.0; z = 16.0 / 5; c = 16 / 5; d = 16 % 5; ausgabe = "Das Ergebnis ist:\na = "+ a + "\nb = "+ b; ausgabe = ausgabe + "\nx = "+ x + "\ny = "+ y + "\nz = "+ z; ausgabe = ausgabe + "\nc = "+ c + "\nd = "+ d; System.out.println(ausgabe); } } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 65 Der Additionsoperator A + B Wendet man den zweistelligen Additionsoperator auf seine Operanden an, so ist der Rückgabewert die Summe der Werte der beiden Operanden. Beispiel: int a = 6 + (3 + 4); ergibt: a = 13 Der Subtraktionsoperator A – B Wendet man den zweistelligen Subtraktionsoperator auf die Operanden A und B an, so ist der Rückgabewert die Differenz der Werte der beiden Operanden. Beispiel: int a = 16 - (3 - 4); ergibt: a = 17 Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 66 Der Multiplikationsoperator A * B Der Operator multipliziert den Wert A mit dem Wert B. Es gelten die normalen Rechenregeln, d.h. Klammer vor Punktrechnung vor Strichrechnung. Beispiel: int a = 6 * (3 + 4); ergibt: a = 42 Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 67 Der Divisionsoperator A / B Bei Nutzung des Divisionsoperators muss eine Fallunterscheidung durchgeführt werden: Erster Fall: A und B sind beide ganzzahlig. Man spricht bei A / B von einer ganzzahlige Division. Das Ergebnis A / B ist wieder eine ganze Zahl. Der Nachkommateil des Ergebnisses wird abgeschnitten. Beispiel: int c = 16 / 5; ergibt: c = 3 Dabei bestimmt sich der Quotient vom Betrag her nach der Vorschrift, dass der Quotient die größtmögliche ganze Zahl ist, für die gilt: |Quotient * Nenner| b) ? a : b; entspricht: if (a > b) max = a; else max = b; Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 108 Achtung: kein Semikolon nach if-Bedingung int i = 1; if (i < 0); System.out.println("Ist das wirklich wahr?"); Ausgabe: Ist das wirklich wahr? int i = 1; if (i < 0) System.out.println("Ist das wirklich wahr?"); keine Ausgabe Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 109 Bedingungen in Java können durch Vergleichsoperatoren gebildet werden Operator in Java Beispiel Bedeutung == x == y x ist gleich y != x != y x ist ungleich y > x>y x ist größer y < x= x >= y x ist größer gleich y c) b ist kleiner als a oder größer als c if (!(b < 4)) b ist nicht kleiner als 4 Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 116 Die Wahrheitstabelle der logischen Verknüpfungen Operand 1 Operand 2 logisches und && false false false false true false true false false true true true Operand 1 Operand 2 logisches oder || false false false false true true Operand logisches nicht ! true false true false true true true true true false Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 117 Bemerkung zu den logischen Operatoren In Java gibt es sowohl für das logische UND als auch für das logische ODER zwei verschiedene Operatoren. Logisches UND: && bzw. & Wird der Operator & zwischen zwei Operanden verwendet, so wird der rechte Operand immer ausgewertet, egal ob der linke Operand true oder false ist. Wird der Operator && verwendet, so wird der rechte Ausdruck nur dann ausgewertet, wenn der linke Ausdruck true ist. Die Operatoren && und & haben identische Wahrheitstabellen. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 118 Beispiel: boolean a = false && meineMethode(); ->meineMethode() wird nicht aufgerufen boolean b = false & meineMethode(); ->meineMethode() wird aufgerufen Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 119 Logisches ODER: || bzw. | Wird der Operator | zwischen zwei Operanden verwendet, so wird der rechte Operand immer ausgewertet, egal ob der linke Operand true oder false ist. Wird der Operator || verwendet, so wird der rechte Ausdruck nur dann ausgewertet, wenn der linke Ausdruck false ist. Die Operatoren || und | haben identische Wahrheitstabellen. XOR-Operator (= Exklusiv-ODER): ^ (auch EXOR-Operator genannt) (!a && b) || (a && !b) entspricht: a ^ b Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 120 Operatorprioritäten Rang 1: ++, --, +, – (+ und – als unärer Operator), !, (Typ) (bedeutet Typcasting) Rang 2: *, /, % Rang 3: +, - (Addition, Subtraktion von Zahlenwerten), + (Stringkonkatenation) Rang 4: (Verschiebung) wird in Vorlesung nicht behandelt Rang 5: =, instanceof Rang 6: ==, != Rang 7: & Rang 8: ^ (XOR) Rang 9: | Rang 10: && Rang 11: || Rang 12: ? : (Bedingungsoperator) Rang 13: = Rang 14: *=, /=, %=, +=, -= usw. (Zuweisung mit Operation) Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 121 Geschachtelte Auswahl – Mehrfache Alternative im if-Zweig if- Anweisungen können auch geschachtelt werden. Ein else-Zweig gehört dabei immer zu dem letzten if, für das noch kein else- Zweig existiert. Beispiel: if (n b) z = a; else z = b; Soll eine andere Zugehörigkeit dargestellt werden, so müssen geschweifte Klammern gesetzt werden. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 122 Struktogramm zu: Geschachtelte Auswahl – Mehrfache Alternative im if-Zweig Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 123 Die Selektion: Mehrfache Alternative – else if else if Anweisungen bieten die Möglichkeit, eine Auswahl unter verschiedenen Alternativen zu treffen. Die Syntax in Java lautet: if (Bedingung 1) Anweisung 1; //Block oder Einzelanweisung else if (Bedingung 2) Anweisung2; else if (Bedingung n) Anweisung n; else //der else-Zweig ist optional Anweisung m; Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 124 //Alternative Bestimmung des Ausgabestrings if (zahl1 < zahl2){ ausgabe = ausgabe + zahl1 + " < " + zahl2; ausgabe = ausgabe + "\n" + zahl1 + " " + zahl2; ausgabe = ausgabe + "\n" + zahl1 + " >= " + zahl2; ausgabe = ausgabe + "\n" + zahl1 + " != " + zahl2; } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 125 Ein weiteres Beispiel: Liegt bei einer einzugebenden Jahreszahl ein Schaltjahr vor? Eine Jahr ist ein Schaltjahr, wenn die Jahreszahl durch 400 teilbar ist oder – falls nein – wenn sie nicht durch 100 teilbar ist und gleichzeitig aber durch 4 teilbar ist. import javax.swing.JOptionPane; class Schaltjahr{ public static void main(String args[]){ String eingabe, ausgabe; boolean schaltj; int jzahl; eingabe = JOptionPane.showInputDialog("Geben Sie ein Jahr > 1583 ein"); //Konvertierung der Eingabe von String nach int: jzahl = Integer.parseInt(eingabe); Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 126 //Fallunterscheidung if (jzahl % 400 == 0) schaltj = true; else if (jzahl % 100 == 0) schaltj = false; else if (jzahl % 4 == 0) schaltj = true; else schaltj = false; if (schaltj) ausgabe = eingabe + " ist ein Schaltjahr"; else ausgabe = eingabe + " ist kein Schaltjahr"; JOptionPane.showMessageDialog(null,ausgabe); System.exit(0); } } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 127 Programmablaufplan (PAP), auch Flussdiagramm oder Programmstrukturplan genannt: Ablaufdiagramm für ein Computerprogramm (imperatives Programmierparadigma) Beispiel : Start, Stopp, weitere Grenzpunkte Verzweigung Verbindung zum folgenden Element Ein- , Aus- und Rückgabe Operation Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 128 Die Selektion: Mehrfache Alternative – switch Die switch-Anweisung dient zur Selektion unter mehreren Alternativen (vgl. else if-Anweisung). Die Syntax in Java lautet switch (Ausdruck){ case konst1: Anweisungen 1; break; //ist optional case konst2: Anweisungen 2; break; //ist optional …… default : Anweisungen default; //ist optional } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 129 Struktogramm zu: Mehrfache Alternative – Fallauswahl Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 130 Bemerkung zur switch-Anweisung Der Ausdruck nach switch muss vom Datentyp byte, char, short, int oder String sein. (In neuen Java-Versionen könnte auch long, float und double erlaubt sein.) Nach case muss eine Konstante (oder mehrere) stehen, die bereits bei der Übersetzung des Programms berechnet werden konnte(n). Nach case darf keine Bereichsangabe stehen. Wenn es keine passende Konstante gibt, wird der Programmablauf bei der default- Anweisung fortgesetzt, falls diese vorhanden ist. Die break-Anweisung ist von der Syntax her nicht erforderlich, sollte aber stets gesetzt werden. Ohne die break-Anweisung werden nach einer Übereinstimmung alle weiteren Anweisungen ausgeführt. Programmieren WS WS in Java 1 Java Programmierung 2024/2025 2015/2016 Seite 131 Beispiel für eine switch Anweisung Sei monat eine Integer-Variable: switch (monat){ case 4: tage = 30; break; case 6: tage = 30; break; case 9: tage = 30; break; case 11: tage = 30; break; case 2: tage = 28; break; default: tage = 31; } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 132 oder (mit identischem Ergebnis) switch (monat){ case 4, 6, 9, 11: tage = 30; //Alternative //case 4: //case 6: //case 9: //case 11: tage = 30; break; case 2: tage = 28; break; default: tage = 31; } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 133 Die Wiederholung oder Schleife Schleifen dienen dazu, eine bestimmte Abfolge von Anweisungen (Schleifenrumpf oder Schleifenkörper) wiederholt auszuführen. Die Anweisungen werden ausgeführt, so lange eine bestimmte Bedingung (Schleifenbedingung) wahr ist. Eine Schleife wiederholt eine Anweisung bzw. eine Sequenz. Dabei unterscheidet man Schleifen, bei denen die Schleifenbedingung am Anfang geprüft wird, und Schleifen, bei denen diese Prüfung am Ende erfolgt. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 134 Schleifen mit Vorabprüfung (Abweisende Schleifen) while-Schleife In einer while-Schleife kann eine Anweisung oder ein Anweisungsblock in Abhängigkeit von der Bewertung der Bedingung wiederholt ausgeführt werden. Da die Bedingung vor der Ausführung der Anweisungen bewertet wird, spricht man auch von einer abweisenden Schleife. Die Bedingung wird berechnet und die Anweisungen dann ausgeführt, wenn der Ausdruck true ist. Danach wird die Berechnung der Bedingung und die eventuelle Ausführung der Anweisungen wiederholt. Das Schlüsselwort while und die Bedingung werden als Schleifenkopf bezeichnet. Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 135 Das Struktogramm für die while-Schleife: while Bedingung Anweisung 1 Anweisung n Die Syntax in Java für eine while-Schleife lautet: while (Bedingung){ Anweisung 1;....;Anweisung n; } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 136 Bemerkung Besteht der Schleifenrumpf nur aus einer Anweisung, so können die geschweiften Klammern {} weggelassen werden. Um keine Endlos-Schleife zu erzeugen, muss die Schleifenbedingung durch eine Anweisung manipuliert werden. Beispiel while (i < 10){..... i = i + 1; } Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 137 // Durchschnitt.java import javax.swing.JOptionPane; class Durchschnitt{ public static void main(String args[]){ String eingabe, anzahl1, ausgabe; int anzahl; double durchschnitt; int zahl = 0, zaehler = 1, gesamtsumme = 0; //Einlesen der Anzahl der einzugebenden Zahlen als String: anzahl1 = JOptionPane.showInputDialog("Geben Sie die Anzahl der einzugebenden Zahlen ein."); anzahl = Integer.parseInt (anzahl1); Programmieren in Java 1 Java Programmierung WS WS2024/2025 2015/2016 Seite 138 while (zaehler