Java

Werbung
Grundlagen der
Programmierung –Teil1
Einheit 1 - 9.Okt. 2009
GDP
DDr. Karl D. Fritscher
basierend auf der Vorlesung
“Grundlagen der Programmierung”
von
DI Dr. Bernhard Pfeifer
VO Abschluss
• Prüfung:
45-minütige schriftliche Prüfung (Ende Nov.- Anfang Dez.)
Zwischenprüfung (BMI) bzw. Endprüfung 1.Teil (Mechatronik)
Positives Abschneiden ist Voraussetzung für das Antreten zur
2. Prüfung
• Übungen:
auf freiwilliger Basis
Bonuspunkte für Prüfung
Grundbegriffe
•
•
•
Computer und ihre Anwendungen sind aus dem täglichen Leben innerhalb der Arbeitswelt
wie auch in der Freizeit nicht mehr wegzudenken. Fast überall werden heutzutage Daten
verarbeitet oder Geräte elektronisch gesteuert.
In fast jedem Gerät befinden sich Mikroprozessoren, welches mit Hilfe von Software
bestimmte Aufgaben erledigt, oder zumindest zu erledigen versucht
Aus diesem Grund werden wir uns nun ein wenig mit den grundlegenden Prinzipien der
Informatik vertraut machen.
Computer, Software, Informatik
•
Computer (deutsch: Rechner)
• als Computer wird ein technisches Gerät bezeichnet, welches schnell und zuverlässig Daten sowie Informationen verarbeiten sowie speichern kann.
Im Unterschied zu einem normalen Automaten, wie einem Geldautomaten, kann
ein Computer verschiedene Vorschriften abarbeiten.
•
•
•
Dazu benötigt ein Rechner eine Handlungsvorschrift, also einen Algorithmus.
Um nun einem Computer eine solche Handlungsvorschrift mitteilen zu können, muss
man diese als Programm codieren. Dieses Programm erlaubt es der Hardware die
Anweisungen zu verstehen und nach diesen zu handeln. Der Computer zusammen mit
einem solchen Programm wird daher häufig als Computersystem bezeichnet.
Generell setzt sich ein Computer aus Hardware (materielle Teile), sowie Software
(immaterielle Teile) zusammen.
Computer, Software, Informatik
•
Software
•
•
•
Unter dem Begriff Software versteht man aber nicht nur Programme, sondern auch
zugehörige Daten und Dokumentationen.
Man unterscheidet dabei zwischen Systemsoftware und Anwendungssoftware
Bit / Byte
•
•
Das Bit ist die kleinste Informationseinheit, die verarbeitet werden kann. Ein Bit kann
genau zwei Zustände haben: 1 oder 0;TRUE oder FALSE; Strom oder KeinStrom
Ein Byte besteht aus 8 Bit
Programmieren
• Unter Programmieren versteht man…
…die Tätigkeit, bei der unter Einsatz einer
gegebenen Programmiersprache ein gestelltes
Problem zu lösen ist.
Programmieren
• Ein Programm formuliert ein Problem mit einer definierten Sprache
• Eine solche Sprache erlaubt es den Programmierern mit dem Computer zu sprechen
und diesen aufzufordern, bestimmte Anweisungen auszuführen, um eine genau
definierte Aktion ausführen zu können.
Es ist dabei möglich eine Sprache zu verwenden, die der Prozessor direkt versteht.
Eine solche Sprache wird dabei als Maschinensprache bezeichnet. Dabei handelt es
sich um eine Sequenz von Bitfolgen, die natürlich für einen Menschen sehr schwer zu
verstehen ist. Aus diesem Grund verwendet man zur Formulierung von
maschinennahen Programmen meiste eine Assemblersprache, die sich so-genannter
Mnemonik„s bedient, und für einen Programmierer dadurch wesentlich leichter zu
verstehen und zu programmieren ist.
•
Ein großes Problem von solchen Assemblersprachen ist, dass diese sehr prozessorspezifisch sind und daher auf andere Systeme nicht einfach übertragen werden können.
Programmieren
Hello World in Assemblersprache (NASM für MS-DOS)
ORG 100h
; Startoffset auf 100h setzen (Startpunkt für COM-Programme)
mov ax, cs
mov ds, ax
; Wert des Codesegmentregisters in Register ax übertragen
; Datensegment auf Wert von ax setzen
mov ah, 09h
mov dx, Meldung
int 21h
; DOS-Funktion zum Schreiben von Text
; Adresse des Textes
; DOS-Funktion ausführen
mov ax, 4C00h
int 21h
; DOS-Funktion um das Programm zu beenden
Meldung: db "Hello World"
db "$"
; Unser Text
; Markiert das Ende der Zeichenkette
In JAVA:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Quelle: http://de.wikipedia.org/wiki/Assemblersprache#Hello_World_in_Assemblersprache_.28MASM_f.C3.BCr_MS-DOS.29
Programmieren
•
•
•
Alternativ dazu kann eine benutzernahe bzw. problemnahe Programmiersprache zum Einsatz
kommen.
Eine solche Sprache wird als höhere Programmiersprache bzw. problemorientierte
Programmiersprache bezeichnet. In einem solchen Fall benötigt man einen Übersetzer
(spezielle Software), der die einzelnen Sätze (Anweisungen) der höheren
Programmiersprache in die Maschinensprache oder in eine Zwischensprache übersetzt.
Ein Übersetzer, der problemorientierte Programme in maschinennahe Programme
transferiert, wird Compiler genannt. Werden Programme nicht vollständig übersetzt, sondern
Anweisung für Anweisung übersetzt und unmittelbar ausgeführt, spricht man von einem
Interpreter.
(Bekannte Interpretersprachen : BASIC, PHP,…)
• Traditionelle höhere Programmiersprachen (Zahl > 200) benötigen einen Compiler, der das
jeweilige Quell Programm in ein Ziel Programm compiliert. Java ist in diesem Punkt divergent,
aber dazu später.
Beschreibung der VO
•
Im Mittelpunkt der Vorlesung steht das Thema objektorientierte Programmierung unter
Verwendung der Programmiersprache Java.
1.
Grundlagen der Sprache
2.
Objektorientierung
3.
Pakete & Klassen
4.
Datenstrukturen
5.
Ausnahmebehandlung
6.
Threads
7.
Objektorientierter Entwurf
8.
Grafische Benutzeroberflächen
9.
Software Patterns
Was wird benötigt
•
•
•
Hardware-Voraussetzungen: Zur Installation des JDK ist ein vernünftig ausgestatteter PC mit
Windows oder Linux oder eine Solaris-Workstation erforderlich. Alternativ kann auch eine
der vielen anderen Plattformen verwendet werden, auf die das JDK portiert wurde,
beispielsweise OS/2, Mac OS X oder eines der vielen Unix-Derivate.
Installation: Die J2SE 5.0, 6.0 oder 7.0 kann von SUNs Java-Server http://java.sun.com
geladen werden (ca. 45 MB Download zzgl. Dokumentation).
IDE: Als Integrated Development Environment (IDE) wird Eclipse 3.x empfohlen. Es kann
jedoch jede beliebige Umgebung oder auch jeder beliebige Editor verwendet werden.
Empfehlung unter http://www.eclipse.org zum download
• JAVA Programmierhandbuch
Java
Was ist Java?
Java
•
•
•
•
•
Die Programmiersprache Java verdankt ihre Popularität und weite Verbreitung ohne Frage dem
ungeheuren Internet-Boom der vergangenen Jahre. Aufgrund des Internet-Bumms anfang der
2000‟er wurde es daher auch wieder etwas ruhiger um diese Sprache.
Dabei ist Java und das Internet nicht unbedingt untrennbar miteinander verbunden, wie das
mancherorts gerne gesagt wird - Java kann nämlich viel mehr.
Die Sprache Java - oder besser Technologie - kann für die Erstellung von Applikationen für
Desktop-PCs,Thin-Clients, Handheld-Geräten usw. verwendet werden. Weiters sorgt ein
leistungsfähiges Komponentenmodell dafür, dass vielfältige Softwarekomponenten von
Drittanbietern Entwicklungszeiten verkürzen und die Wartung vereinfachen.
Es gibt eine Reihe von professionellen visuellen Entwicklungsumgebungen für Java am Markt.
Als Beispiel seien hier VisualJ, JBuilder, VisualCafé, aber auch Eclipse zu nennen.
Java wird und wurde zu einer verlässlichen und qualitativ hochwertigen
Entwicklungsplattform, die Unternehmen eine gute Investitionssicherheit bietet.
Java - Eine kurze Geschichte
•
•
•
Die Wurzeln der Programmiersprache JAVA reichen bis in das Jahr 1990 zurück. Als Java
das Licht der Welt erblickte steckte das Internet, wie wir es kennen, noch sehr in den
Kinderschuhen. Daher war es gar nicht die Intention der Forschungsgruppe namens
Green Project eine ”Internet” Programmiersprache zu schaffen.
Das Team wurde von Billy Joy und James Gosling geleitet und sollte eine einheitliche
Hochsprache zur Programmierung von Software für den Electronic-Consumer-Bereich
entwickeln. Angedacht war hier zunächst die Verwendung in Set-Top-Boxen für interaktives
Fernsehen, Telefonanlagen und allen möglichen Haushaltsgeräten.
Im Zuge der Entwicklungsarbeiten entstand die Programmiersprache Oak (Object
Application Kernel). Recht bald stellte sich heraus, dass sich der Markt in diesem Bereich
nicht so positiv entwickelte - und Oak drohte das Aus. Um 1993 herum wurde es etwas
lauter um das Internet und bei Sun erkannte man, dass Oak sich zur Übertragung von Daten
in diesem Medium bestmöglich eignete. Weiters war die Sprache bereits mit der Zielsetzung
weitgehendster Plattformunabhängigkeit entwickelt worden, wodurch diese Sprache für das
heterogene Umfeld des Internets absolut prädestiniert zu sein schien.
Java - das Konzept dahinter
•
•
•
•
•
Java basiert auf einer Kombination von Compiler und Interpreter. Java-Programme werden
nach der Erstellung zunächst kompiliert. Dabei wird der so genannte Bytecode erstellt.
Dieser ist jedoch nicht ausführbar im Sinne eines kompilierten und gelinkten Programms,
dafür aber vollkommen unabhängig von Hardware und Betriebssystemen.
Man kann daher auch sagen, dass der Bytecode Informationen darüber enthält was gemacht
werden soll, nicht aber wie es gemacht werden soll.
Da der Bytecode nicht direkt ausgeführt werden kann, braucht er einen Vermittler. Diese
Aufgabe ist zu vergleichen mit einem klassischen Interpreter.
Die Aufgabe des Interpreters übernimmt in Java eine virtuelle Maschine (VM). Die VM ist eine
Softwareschicht, die es für ”jede” Plattform gibt, und die für jede Plattform gesondert
entwickelt werden muss.
Die VM stellt die Schnittstelle zwischen dem System (der verwendeten Hardware und des
Betriebssystems) und dem Bytecode dar.
Java - Technologie
•
Es gibt eine Vielzahl von Technologien, die auf Java basieren:
Applets sind kleine Programme, die zusammen mit den HTML-Seitenbeschreibungen
der Websites auf einem WWW Server abgelegt sind. Der zur Ausführung des Applets
notwendige Interpreter ist dabei üblicherweise im Browser integriert.
Servlets sind Java-Programme, die auf Web-Servern laufen und dort dynamische HTMLSeiten erzeugen. Eng verknüpft mit dieser Technik sind Java Server Pages (JSP).
Applikationen laufen außerhalb von Browsern. Damit eine Applikation gestartet
werden kann, muss ein Java-Bytecodeinterpreter vorhanden sein.
JavaBeans sind in Java geschriebene Softwarekomponenten. Komponentenmodelle sind
wichtig, da eine weitgehende Modularisierung und Wiederverwendbarkeit ermöglicht wird.
Eine Bean definiert eine klare Schnittstelle zur Umwelt. Enterprise JavaBeans erweitern
das Komponenten-Konzept auf verteilte Umgebungen. D.h. die verwendeten Beans können
verteilt, über ein Netzwerk erreichbar, platziert sein.
Und es gibt auch Technologien die vermuten lassen, dass die auf Java basieren.
JavaScript ist eine Scriptingsprache, die genau genommen mit Java gar nichts zu tun hat.
So ist Java
• objektorientiert
• portabel und plattformunabhängig
• multi-threaded
• sicher und stabil
• verteilt
Objektorientiert
• Java ist eine vollkommen objektorientierte Sprache.
• In der objektorientierten Programmierung betrachtet man reale Objekte, die im Programm
•
•
abgebildet werden sollen, als Einheiten mit bestimmten Eigenschaften und Funktionen.
So kann zum Beispiel das reale Objekt AUTO im Programm durch die Eigenschaften
FARBE, MOTORLEISTUNG und GESCHWINDIGKEIT
beschrieben werden.
Gleichzeitig gibt es Methoden (Funktionen) wie
HUPEN, BREMSEN und BESCHLEUNIGEN,
die das Objekt ausführen kann.
Objektorientiert
•
•
•
Durch konsequente Verwendung von Objektorientierung bei der Programmierung
erreicht man vor allem:
eine klare Abgrenzung einzelner Aufgabenstellungen. Dies ist gerade bei großen
Projekten, wo viele Personen mitwirken, von großer Bedeutung.
eine leichte Wiederverwendbarkeit von einmal erstellten Programmteilen. Diese Teile
können problemlos in neue Programme übernommen und integriert werden. Bei
Änderungen bzw. Erweiterungen ist das Prinzip der Vererbung nützlich.
• ein natürliches Software-Design.
• Leichteres Verständnis des Quellcodes: Die Welt als eine Ansammlung von Objekten
zu betrachten, fällt einem Menschen leichter, als sie in Datenstrukturen und
Funktionensammlungen zu pressen.
Portabel & Plattformunabhängig
Write once, run anywhere!
•
•
•
Als portabel bezeichnet man Software, die relativ leicht an verschiedene Plattformen, also
Kombinationen aus Hardware und Betriebssystem, angepasst werden kann.
Im eigentlichen Sinne ist also nicht die Programmiersprache portabel, sondern die damit
erstellten Anwendungen. Ein C Programm kann als portabel bezeichnet werden - es muss am
Zielsystem aber ein entsprechender Compiler vorliegen.
In Java programmierte Anwendungen unterliegen diesen Einschränkungen nicht. Sie sind sogar
mehr als portabel - sie sind plattformunabhängig. Lediglich die Existenz einer VM wird verlangt,
und schon kann das Programm, ohne neu übersetzt werden zu müssen, ausgeführt werden.
Multi- Threading
•
•
•
•
•
thread ist das englische Wort für ”Faden”.
Einfache Programme sind single-threaded. Sie bestehen aus einer Reihe von Anweisungen, die
wie Perlen an einem Faden aufgereiht sind. Trotz der Tatsache, dass es Verzweigungen gibt,
werden die einzelnen Anweisungen nacheinander ausgeführt.
Bei einem multi-threaded Programm gibt es mehrere Fäden, denen gleichzeitig gefolgt wird.
Eine Anwendung führt also mehrere Anweisungen gleichzeitig aus.
In einem Rechner mit nur einer CPU können diese Prozesse natürlich nicht wirklich parallel
zueinander ablaufen. In Wirklichkeit wird die CPU-Leistung in kleine Zeitscheiben aufgeteilt
und den einzelnen Prozessen reihum zugeteilt.
Trotzdem kann Multi-Threading auch auf einem Ein-Prozessor-System Vorteile bringen, weil
die zur Verfügung stehende Rechenzeit effektiver ausgenutzt werden kann.
Sicher & Stabil
• Sicherheit und Stabilität sind zwei
wesentliche Eigenschaften einer
Anwendung. Sichere und stabile
Anwendungen zu entwickeln soll und
muss das Ziel eines jeden
Programmierers sein.
• Der Sicherheitsaspekt ist besonders
bei aus dem Internet geladenen
Applets wichtig. Die in Web
Browsern integrierten Interpreter
bzw. Appletviewer verweigern z.B.
jeden Zugriff auf das lokale
Dateisystem oder ungeschützte
Speicherbereiche. Dieses Verfahren
trägt auch den Namen Sandbox.
Sicher & Stabil
•
Weiters überprüfen so genannte Bytecode Verifier, ob die geladenen
Applets bestimmte Maßgaben erfüllen, bevor sie ausgeführt werden.
• Stabilität ist für Applets als auch für Applikationen wichtig. Anwendungen
sollen möglichst unbehelligt von Abstürzen laufen.
• Als Beispiel für potentielle Absturzquellen von Programmen seien hier Pointer
(C/C++) erwähnt, welche in Java nicht existieren. Nicht mehr benötigte
Strukturen werden in Java vom Garbage Collector erkannt und entfernt. Tritt
ein Fehler auf, so stürzt das Programm nicht ab, sondern es wird eine
Exception ausgelöst (auch in C++ möglich).
Verteilt
• Unter diesem Begriff fasst man sehr global die außerordentliche Eignung
Javas für die Verwendung in Netzwerken zusammen
• Java implementiert bereits in den Standardbibliotheken umfangreiche
Funktionen für die Nutzung von allen erdenklichen Protokollen und
Diensten.
Fragen & Übungen
•
Worin liegt der Hauptvorteil von Java Anwendungen gegenüber compilierten und gelinkten
Programmen ?
• Welche Nachteile gibt es?
• Was bedeutet Plattformunabhängigkeit ?
• Was ist die Aufgabe des Garbage Collectors ?
• Was ist der Unterschied zwischen Applets und Java-Applikationen
• Ist Java eine maschinennahe Programmiersprache?
• Was versteht man unter einer SandBox?
Informationen für die Implementierung
•
•
•
•
•
•
Eine neue Programmiersprache lernt man nur, wenn man selbst Programme in dieser
Sprache schreibt. Je mehr, desto besser.
Erstellen Sie die Quelldatei mit einem ASCII-Editor. Verwenden Sie keine Textverarbeitung,
denn die würde dem Code unverständliche Steuerzeichen hinzufügen.
Achten Sie darauf, dass die Datei die Erweiterung .java trägt, und geben Sie ihr exakt
denselben Namen wie der Hauptklasse.
Übersetzen Sie das Programm mit dem Compiler javac, und geben Sie dabei den
Dateinamen als Argument an. Um alle Java-Dateien in einem Verzeichnis zu übersetzen,
können Sie auch *.java als Argument verwenden.
Falls im Quelltext syntaktische Fehler enthalten sind, meldet der Compiler sie zusammen mit
der Zeilennummer und der Quelldatei, in der sie aufgetreten sind.
Am Anfang passieren leicht Fehler wie vergessene oder überflüssige Klammern
oder Semikolons.
Bedenken Sie auch, dass alle Schlüsselwörter kleingeschrieben werden
Informationen für die Implementierung
•
•
•
•
•
Mitunter gibt es Fehlermeldungen/Warnungen, weil Variablen nicht initialisiert werden. Das
ist in Java nicht erlaubt und wird vom Compiler mittels Datenflussanalyse überprüft. Stellen
Sie den Code in einem solchen Fall geeignet um.
Ignorieren Sie zunächst Warnungen, bei denen der Compiler die Verwendung von Klassen
oder Methoden, die als deprecated markiert wurden, kritisiert. Derartige Programmteile
funktionieren zwar meist noch, sind aber veraltet und sollten eigentlich nicht mehr
verwendet werden.
Gibt der Compiler gar keine Meldung aus, wurde das Programm erfolgreich übersetzt.
Sie können das Programm nun mit dem Java-Interpreter java starten. Geben Sie als
Argument nur den Klassennamen ohne die Erweiterung .java oder .class an.
Wenn es beim Aufruf des Interpreters eine Fehlermeldung der Art
NoClassDefFoundError gibt, liegt das fast immer daran, dass der Name der Klasse
falsch geschrieben wurde oder dass keine oder eine falsch benannte main-Methode
vorhanden ist.
Hallo Welt - the very beginning
/* Hello.java */
public class Hello
{
public static void main (String[] argument)
{
System.out.println ("Hello world!");
}
}
•
•
•
•
Das obig abgedruckte Programm enthält die Definition der Klasse Hello mit der Methode
main, die das Hauptprogramm unserer ersten Applikation enthält.
Diese Datei muss nun mit dem Kommando javac (so heißt der Java-Compiler des
JDK) übersetzt werden. Das kann man entweder in der Kommandozeile machen,
oder die integrierten Funktionen der IDE verwenden.
Nach erfolgreicher Übersetzung kann das Programm gestartet werden. Dies geschieht mit dem
Kommando java Hello.
Wenn der Java Interpreter den Bytecode zur angegebenen Klassendatei nicht finden kann, so
wird eine Fehlermeldung NoClassDefFoundError ausgegeben.
Formatierung der Quelltexte
•
•
•
Es ist bekannt, dass man sich über die Formatierung von Quelltexten und die Einrückung von
Deklarationen und Anweisungen streiten kann. Jeder Entwickler hat seinen eigenen Stil und
kennt gute Argumente, genau diesen zu verwenden.
Bei Java-Programmen gibt es einige große Lager, denen man sich anschließen kann.
Im professionellen Umfeld ist man sogar meist gezwungen, sich einem vorgegebenen Stil
anzupassen.
• Trotzdem wollen wir folgende Regeln beachten:
• Bei Klassen- und Methodendefinitionen stehen die geschweiften Klammern unterhalb der
Deklarationsanweisung, und die eigentliche Deklaration ist eingerückt
• Bei Kontrollanweisungen innerhalb einer Methode schreiben wir die öffnende Klammer
dagegen in dieselbe Zeile wie die einleitende Anweisung
• Dies gilt auch für fortgesetzte Anweisungen wie beispielsweise else oder else if
• Diese Technik verwenden wir meist auch, wenn bei einem Methodenaufruf nicht alle
Argumente in eine Zeile passen
Namenskonventionen
Wie in allen Programmiersprachen, gibt es auch in Java Konventionen für die Vergabe von Namen. Sie
sind zwar nicht zwingend erforderlich, erleichtern aber das Verständnis der Quelltexte ungemein
und sollten daher unbedingt eingehalten werden:
Klassennamen beginnen stets mit einem Großbuchstaben. Beispiele sind String, Vector oder Hello.
Besteht ein Klassenname aus mehreren Silben, können zur Steigerung der Übersichtlichkeit auch
die Folgesilben mit einem Großbuchstaben beginnen. Beispiele dafür wären HelloWorld,
KeyAdapter oder NoSuchMethodException.
Klassennamen, die nur aus Großbuchstaben bestehen, sind unüblich.
Methodennamen beginnen mit einem Kleinbuchstaben. Haben sie mehrere Silben, ist die erste oft
ein Verb. Weitere Silben beginnen mit einem Großbuchstaben. Beispiele sind println,
hasMoreElements oder isEnabled.
Paketnamen bestehen ausschließlich aus Kleinbuchstaben. Beispiele sind java.lang, javax.swing.event
oder com.solution42.util (mehrteilige Paketnamen werden durch Punkte separiert).
Für Variablennamen gelten dieselben Konventionen wie für Methoden. Es ist teilweise üblich,
Membervariablen mit einem Präfix wie z.B. "m_" zu versehen. (in C und C++ weit verbreitet)
Grundlagen
public class Compute
{
public static void main
{
int i;
i
}
•
•
•
}
=
9
+
(String[] argument) throws IOException
7;
System.out.println
(i);
Die Zeile i = 9 + 7; sollte intuitiv verstehbar sein. Die Werte 9 sowie 7 werden
mittels Additionsoperator verbunden und dann der Variablen i zugewiesen. Das Semikolon
zeigt, dass die Anweisung zu Ende ist und ist somit für den Compiler wichtig, um zu
erkennen, wann ein Ausdruck fertig ist und evaluiert werden kann.
Das = Zeichen steht in Java nicht für das Gleichheitssymbol, sondern ist das Zuweisungszeichen.
Ausdrücke wie der obige können in Java beliebig komplex sein. Es wird jedoch empfohlen
Ausdrücke übersichtlich zu gestalten: Weniger (Anweisungen pro Zeile) == mehr
(Übersichtlichkeit)
Grundlagen - Einfache Ausgaben
public class Sample
{
public static void main (String[] argument)
{
System.out.println ("1+2=" + (1+2));
System.out.println ("1+2=" + 1+2);
}
}
• Für die ersten Schritte in einer neuen Sprache benötigt man immer I/ORoutinen, um einfache Ein- und Ausgaben vornehmen zu können.
Glücklicherweise kann man in Java nicht nur grafikorientierte Programme
schreiben, sondern auch auf die Standardein- und -ausgabe zugreifen.
• Damit stehen für kleine Programme einfache I/O-Routinen zur Verfügung,
die wie in den meisten konventionellen Programmiersprachen verwendet
werden können.
Grundlagen - Einfache Eingaben
import java.io.*;
public class Sample
{
public static void main
{
int a, b, c;
BufferedReader dIn
= new BufferedReader
(System.in));
System.out.println
("Bitte a eingeben: ");
a
= Integer.parseInt
System.out.println
b
}
}
•
•
(String[] argument) throws IOException
());
("Bitte b eingeben: ");
= Integer.parseInt
c = a + b;
System.out.println
(dIn.readLine
(new InputStreamReader
(dIn.readLine
());
("a+b="+c);
Daten zeichenweise von der Tastatur zu lesen ist etwas komplizierter als die Ausgabe von
Informationen und Daten. Zwar steht ein vordefinierter Eingabe-Stream System.in zur Verfügung.
Er ist aber nicht in der Lage, die eingelesenen Zeichen in primitive Datentypen zu konvertieren.
Statt dessen muss zunächst eine Instanz der Klasse InputStreamReader und daraus
ein BufferedReader erzeugt werden. Dieser kann dann dazu verwendet werden, die
Eingabe zeilenweise zu lesen und das Ergebnis in einen primitiven Typ umzuwandeln.
Zahlen
•
Im vorigen Beispiel haben wir zwei Zahlen miteinander verknüpft. Wir haben eine Addition
ausgeführt. Für uns ist es dabei ganz egal, ob wir mit ganzen Zahlen, oder mit reellen Zahlen
arbeiten - nicht jedoch für den Compiler. Denn verschiedene Zahlen werden in
unterschiedlichen Größenordnungen dargestellt.
• Abhängig von der Darstellung wird die Zahl dann repräsentiert.
• Ein Beispiel für ganze Zahlen ist:
• 0 1 -1 214748324
• jedoch können in Java ganze Zahlen nicht beliebig lang sein (wie in der Mathematik)
• Zahlen mit einem Vor und Nachkommateil werden in Java Gleitkommazahlen genannt. Für
Gleitkommazahlen kann die wissenschaftliche Exponentenschreibweise verwendet werden.
Bsp.: 0.0 1.0 -1.0 0.398282
3.1415
2.98E-10
• Etwas später mehr zu den einzelnen in Java verfügbaren Datentypen…
Kommentare
•
•
Programme, selbst in einer höheren Programmiersprache wie Java geschrieben, können
manchmal von der Person, die es geschrieben hat, nicht mehr leicht gelesen bzw. verstanden
werden. Schlimmer wird das Ganze, wenn eine dritte Person versucht, hinter die
Geheimnisse eines fremden Programmen zu steigen.
Daher ist das Dokumentieren des Codes extrem wichtig. Es erhöht die Verständlichkeit und
senkt auch die Wartungszeit und die damit verbundenen Kosten.
• Will man eine Anweisung kommentieren, verwendet man den einzeiligen Kommentar:
Zeilen-Kommentare beginnen mit // und enden am Zeilenende.
Block-Kommentare beginnen mit /* und enden mit */.
Block-Kommentare können nicht geschachtelt werden! Deshalb im Programm lieber
Zeilen-Kommentare anwenden, damit kann man zu Testzwecken besser ganze Blöcke
auskommentieren.
Dokumentations-Kommentar als Sonderfall des Block-Kommentares beginnt mit /**
und endet mit */. Er wird durch das Tool Javadoc ausgewertet.
Beispiel:
a = b + c; // die Inhalte von Speicherzelle b und c werden addiert und a zugewiesen
/* Die Zeichen // werden hier ignoriert. */
/** Ein Kommentar... /* // und jetzt das Ende */
/** /* Das ist geschachtelt */ */
Variablen
•
•
•
Im Programm war auch die Anweisung
int i;
zu finden. Mit dieser Anweisung wird dem Rechner mitgeteilt, dass er eine Variable mit dem
Namen i erzeugen soll, und diese Variable Daten im Wertebereich von int aufnehmen können
soll
Diese Anweisung wird daher auch Variablendeklaration genannt.
In Java ist es möglich an jeder beliebigen Stelle im Programm eine Variable zu deklarieren.
Jedoch muss vor der Benutzung die Variable deklariert werden, denn es muss der Typ bekannt
sein - ansonsten ist die Benützung nicht möglich.
Variablen
• Variablen dienen also dazu, Daten im Hauptspeicher eines Programms abzulegen und
gegebenenfalls zu lesen oder zu verändern. In Java gibt es drei Typen von Variablen:
Instanzvariablen, die im Rahmen einer Klassendefinition definiert und zusammen mit
dem Objekt angelegt werden.
Klassenvariablen, die ebenfalls im Rahmen einer Klassendefinition definiert werden,
aber unabhängig von einem konkreten Objekt existieren (Schlüsselwort : static)
Lokale Variablen, die innerhalb einer Methode oder eines Blocks definiert werden und
nur dort existieren.
Variablen
•
Variablen können auf zwei unterschiedliche Arten
verändert werden
durch eine Zuweisung : i=5;
durch einen Inkrement- oder DekrementOperator: i++
// Klasse
InstanzenZaehler
public class
InstanzenZaehler
{
// Klassenvariable
static int counter = 0;
// Instanzvariable
int num;
….
}
Variablen - Sichtbarkeit, Lebensdauer
• Die Sichtbarkeit lokaler Variablen erstreckt sich von der Stelle ihrer
Deklaration bis zum Ende der Methode, in der sie deklariert wurden.
Die Lebensdauer einer lokalen Variable beginnt, wenn die zugehörige
Deklarationsanweisung ausgeführt wird. Sie endet mit dem Ende des
Methodenaufrufs.
• Falls innerhalb eines Blocks lokale Variablen angelegt wurden, sind sie bis zum
Ende des Blocks sichtbar. Ihre Lebensdauer endet mit dem Verlassen des
Blocks.
Es ist in Java nicht erlaubt, lokale Variablen zu deklarieren, die gleichnamige
lokale Variablen eines weiter außen liegenden Blocks verdecken. Das Verdecken
von Klassen- oder Instanzvariablen ist dagegen zulässig.
Variablen - Sichtbarkeit, Lebensdauer
• Instanzvariablen werden zum Zeitpunkt des Erzeugens einer neuen Instanz
einer Klasse angelegt. Sie sind innerhalb der ganzen Klasse sichtbar, solange sie
nicht von gleichnamigen lokalen Variablen verdeckt werden. In diesem Fall ist
aber der Zugriff mit Hilfe des this- Zeigers möglich:
this.variablenname greift immer auf die Instanz- oder Klassenvariable
variablenname zu, selbst wenn eine gleichnamige lokale Variable existiert. Mit
dem Zerstören des zugehörigen Objektes werden auch alle Instanzvariablen
zerstört/ gelöscht.
• Klassenvariablen leben während der kompletten Laufzeit des Programms. Die
Regeln für ihre Sichtbarkeit entsprechen denen von Instanzvariablen.
Bezeichner und Namen
•
•
Bei der Erstellung einer Applikation, eines Frameworks oder einer Toolbox wird man öfter in
die Verlegenheit kommen, und Platzhalter/Variablen deklarieren müssen.
Solche Platzhalter setzen sich aus folgenden Elementen zusammen:
Buchstaben: a, b, c, ..., z, A, B, ..., Z
(da Java eine internationale Programmiersprache ist, sind diverse landesspezifische
Erweiterungen erlaubt, sollten aber wenn möglich vermieden werden.)
•
Unterstrich: _
Dollarzeichen: $
Ziffern: 0,1,2,...,9
Ein Bezeichner muss dabei immer mit einem Buchstaben, einem Unterstrich oder einem
Dollarzeichen beginnen. Eine Ziffer ist nicht erlaubt.
• Hallo_Welt _H_A_L_L_O
• 17JahrBlondesHaar
Kati311079
Literale
•
•
•
•
Ein Literal bzw. Literalkonstante beschreibt einen konstanten Wert, der sich innerhalb eines
Programmes nicht ändern kann.
Ein Literal wird vom Java Compiler direkt (üblicherweise) in den Bytecode aufgenommen
Literale haben, abhängig von ihrem Typ, vorgegebene Schreibweisen
Es gibt folgende Arten von Literalen
✓ganze Zahlen
✓Gleitkommazahlen
✓ Wahrheitswerte
✓ einzelne Zeichen in einfachen Hochkommata („a„)
✓ Zeichenketten in Anführungszeichen (“Hallo
Welt“)
✓ das so genannte Referenz-Literal (null, this, super)
Trennzeichen
•
Der Java Compiler muss in der Lage sein, einzelne Bezeichner und Wortsymbole voneinander
zu trennen. Um dies zu tun, stehen mehrere Möglichkeiten zur Verfügung.
• Leerzeichen
• Zeilenendzeichen (ENTER Taste)
• Tabulatorzeichen
• Operatoren (+, -, *, /, ...)
• Kommentare
• Interpunktionszeichen: . , ; )( []{}
• Operatoren, sowie Interpunktionszeichen haben in Java jedoch eine sehr spezielle
•
•
Bedeutung. Daher sollten diese nur dort eingesetzt werden, wo sie auch hingehören.
Dem Punkt in der deutschen Sprache entspricht in Java das Semikolon.
Befehle werden in Java immer mit einem Semikolon abgeschlossen. Fehlt dieser Abschluss, so
meldet der Java Compiler einen Fehler der Form: MyProg.java:12: ‘;‘ expected
Operatorsymbole
•
•
Operatoren sind spezielle Symbole, die dazu dienen, Operanden zu einem neuen Wert zu
verknüpfen.
monadische Operatoren
benötigen nur einen Operanden. Bsp.: ++ --
•
dyadische Operatoren
verknüpfen zwei Operanden und werden absolut am häufigsten verwendet. Bsp.: + - ==
•
triadische/ternäre Operatoren
verknüpfen drei Operanden. Als einziges Beispiel in Java ist der Operator ?: zu nennen:
Allgemein: x = BOOL_TEST ? TRUE_FALL : FALSE_FALL
Konkret:
•
int max = i>j ? i:j,
Operatoren sind in Java mit so genannten Prioritäten versehen, wodurch gewisse
Reihenfolgen bei der Auswertung eingehalten werden (Punkt vor Strich)
Reservierte Wörter, Schlüsselwörter
• Schlüsselwörter dürfen in Java nicht als Bezeichner verwendet werden.
• Literalkonstanten (true, false, null) und eine Reihe anderer Wortsymbole sind
Schlüsselwörter:
•abstract
•assert
•boolean
•break
•byte
•case
•catch
•char
•class
•const
•continue
•default
•do
•double
•else
•enum
•extends
•final
•finally
•float
•for
•if
•goto
•implements
•import
•instanceof
•int
•interface
•long
•native
•new
•package
•private
•protected
•public
•return
•short
•static
•strictfp
•super
•switch
•synchronized
•this
•throw
•throws
•transient
•try
•void
•volatile
•while
Herunterladen