Softwareentwicklung Java allgemein, Kommentare, Datentypen

Werbung
Mag. iur. Dr. techn. Michael Sonntag
Softwareentwicklung
Java allgemein, Kommentare, Datentypen, Variablen,
Konstanten
Institut für Informationsverarbeitung und
Mikroprozessortechnik (FIM)
Johannes Kepler Universität Linz, Österreich
E-Mail: [email protected]
http://www.fim.uni-linz.ac.at/staff/sonntag.htm
© Michael Sonntag 2004
?
?
?
Fragen?
?
Bitte gleich stellen!
?
© Michael Sonntag 2004
?
Java
Allgemeines
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
3
Vom Programm zum Maschinencode
z
z
z
Ein Programm ist für einen Menschen gut lesbar, für einen
Computer aber nicht ideal: Übersetzung in ein "besseres"
Format: Maschinensprache
Dies bedeutet aber auch, dass das übersetzte Programm dann
nur mehr auf diesem Rechner(typ) ausführbar ist!
Lösung: Übersetzen in Zwischensprache (Java: "Bytecode"),
diese wird bei der Ausführung dann interpretiert
Æ
z
Neuere Ablaufumgebungen führen für Teile teilweise (und
trickreich) Compilierungen durch, um die Geschwindigkeit zu
vergrößern
Fertige Bausteine werden bei der Laufzeit einfach geladen
Æ
Michael Sonntag
Bibliotheken, z. B. Datei - Ein-/Ausgabe, Stringfunktionen, etc.
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
4
Bearbeitungsvorgang:
Vom Problem zur Ausführung
Problemanalyse &
Spezifikation
Bytecode
.class
Lösungsidee &
Algorithmus
Programm
.java
Mensch
Michael Sonntag
Maschinencode
java
Ausführung
javac
Compiler
Lader
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
5
Java-Programme:
Allgemeines
z
Groß-/Kleinschreibung ist wichtig; muss beachtet werden
Æ
z
Einrückungen sind für das Programm egal
Æ
z
while, While, wHile und WHILE sind verschiedene Dinge!
Für den Leser aber nicht, daher unbedingt korrekt durchführen
Der Computer ist genau: Immer exakt arbeiten!
Æ
Æ
Ein Hochkomma ´ ist etwas anderes als ein Anführungszeichen "
{, [, (, ], }, ) besitzen verschiedene Bedeutungen
» Der Computer nimmt sie beim Wort!
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
6
Java
Programmaufbau, Kommentare,
Datentypen, Variablen, Konstanten
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
7
Struktur eines
Java-Programms
public class Hello
{
Name der Klasse; muss identisch
zu Dateinamen sein
Hauptprogramm; dieser Block wird
ausgeführt
public static void main(String[] args)
{
Programmbeginn
Jede Anweisung
System.out.println("Hello World\n");
(=statement) muss mit
}
Strichpunkt enden
Programmende
}
z
Ergebnis: Ausgabe des Textes „Hello World“ sowie eines
Zeilenumbruchs
Hello.java
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
8
Kommentare in Java
z
Block-Kommentare:
Æ
Æ
/* */
Alles dazwischen wird ignoriert
» Inklusive „/*“, also keine Schachtelung möglich!
z
Zeilenende-Kommentare:
Æ
Æ
Æ
Æ
z
//
Alles bis zum nächsten Zeilenumbruch wird ignoriert
Keine Bedeutung innerhalb von /* */
/* und */ haben keine Bedeutung nach //
Wo kommentieren:
Æ
Æ
Michael Sonntag
Überall, wo Zustand, Tätigkeit oder Grund nicht von vornherein
sofort absolut eindeutig klar sind!
Sowie: Allgemeine Beschreibung (siehe JavaDoc später!)
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
9
Datentypen in Java
z
z
z
Datentypen definieren den Wertebereich und die verfügbaren
Operationen darauf
Jede Variable, Parameter, etc. besitzt in Java einen genau
bestimmten Datentyp
Dieser lässt sich zur Laufzeit niemals ändern
Æ
z
Bereits bei der Compilierung wird überprüft, ob
Æ
Æ
Æ
z
Polymorphie (siehe später) lässt die Referenz unberührt!
der Wert korrekt ist (Konstanten)
eine Zuweisung tatsächlich durchgeführt werden kann (Ausdruck)
Dies wird „statische Typprüfung“ genannt
Nicht überprüfbar: Über-/Unterlauf
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
10
Datentypen in Java
Ganze Zahlen
z
z
z
z
byte:
short:
int:
long:
8 Bit
16 Bit
32 Bit
64 Bit
-128
-32768
-2147483648
…
…
…
127
32767
2147483647
-9223372036854775808 … 9223372036854775807
z
Wertebereiche sind jeweils inklusive der Endwerte
In der Regel wird mit int gearbeitet (schnellste Berechnung)
z
Über-/Unterlauf:
z
Æ
Æ
Æ
Dies wird ignoriert
Keinerlei Fehlermeldung
Ergebnis kann „seltsam“ sein, z. B. falsches Vorzeichen
» Siehe Zweierkomplement: Dieses wird für die Berechnung verwendet!
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
11
Datentypen in Java
Ganze Zahlen - Beispiele
z
z
z
z
z
z
byte b;
byte b2=-128;
byte b3=+128;
// FEHLER! Außerhalb des Wertebereichs!
short s=+128;
short s2=128; // Wie vorige Zeile
int i=s2;
Æ
Æ
z
Wertvergrößerung ist immer erfolgreich und korrekt möglich!
byte ⊂ short ⊂ int ⊂ long
long l=123456789;
MinMax.java
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
12
Datentypen in Java
Zeichen und Strings
z
char:
Æ
Æ
Zeichen (16 Bit Unicode)
Es lassen sich praktisch alle Schriften der Welt darstellen
Auch der Quellcode ist Unicode, daher können in Strings alle
beliebigen Zeichen verwendet werden
» Sofern der Editor dies unterstützt!
Æ
Æ
Æ
z
Unicode: http://www.unicode.org/
Konstanten: Unter geraden Hochkomma ''
Beispiele: 'a', 'Z', '3'
String: Eigentlich kein Datentyp sondern eine Klasse
Æ
Æ
Æ
Æ
Michael Sonntag
Wird später gesondert behandelt, da sehr wichtig
Wichtig aber für Konstanten und Initialisierung, daher schon hier
Konstanten: Unter Anführungszeichen
Beispiele: "Test", "Softwareentwicklung"
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
13
Datentypen in Java
Sonderkonstanten
z
Manche besondere Zeichen können nicht direkt in Konstanten
eingebaut werden
Æ
Æ
z
Vollständige Liste (für Zeichen und Strings):
Æ
z
z
Z. B. Zeilenumbruch, nicht-druckbare Zeichen bei Verwendung von
Unicode ohne Editor-Unterstützung
Hierzu dienen "Escape-Sequences"
\b (Backspace), \t (Tabulator), \n (Zeilenvorschub),
\r (Wagenrücklauf), \f (Seitenvorschub), \" (Anführungszeichen),
\' (Hochkomma), \\ (Rückstrich)
Zeichen: '\u????' Fragezeichen sind durch Hexadezimal-ziffern
zu ersetzen, die den Unicode-Code des gewünschten Zeichens
angeben
Oktalcode: \??? (von 000 bis 377)
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
14
Datentypen in Java
Boolean und Gleitkomma
z
boolean:
Æ
Æ
z
Æ
z
Fließkommawert
Wertebereich: ca. 1.4E-45 … 3.4E38 (optional "f": Kennzeichen)
Beispiele: 3.141592657E+0, 7e3, 123.56E-3f
double: Langer Fließkommawert
Æ
Æ
z
Werte: "true" und "false" (0, 1, -1, … sind nicht erlaubt!)
Beispiel: boolean currentlyTeaching=false;
float:
Æ
Wahrheitswert
Wertebereich: ca. 4.9E-324 … 1.8E308 (optional "d": Kennzeichen)
Beispiele: 3.141592657E+0D, 123.56e-3, 129E127
Fließkommawerte/-arithmetik entspricht IEEE 754-1985
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
15
Variablen in Java
z
z
Variablen müssen vor Verwendung deklariert werden
Dies kann praktisch überall erfolgen
Æ
Sollte aber immer nur am Beginn eines Blockes erfolgen!
» Lesbarkeit!
z
Namen: Frei wählbar
Æ
Beliebig lange Folge von Unicode-Buchstaben und -Ziffern
» Beginn mit einem Buchstaben (inkl. A-Z, a-z, _, $)
» Sonstige Unicode-Buchstaben auch erlaubt
– Vorsicht: Gleiches Aussehen, aber andere Nummer = andere Variable!
Æ
Keine doppelten Namen erlaubt
» Außer: Verschiedene Tiefe (siehe später unter "Blöcke")
Æ
Michael Sonntag
Schlüsselwörter sind nicht erlaubt (z. B. "if", "while", …),
ebensowenig wie "true", "false" und "null"
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
16
Variablen in Java
Beispiele und Konventionen
z
Beispiele:
Æ
Æ
Æ
z
int j=57;
char nextChar='3';
bufferFull=true;
Æ
Æ
Æ
z
z
Konventionen:
Æ
Æ
Æ
Æ
Falsch:
int 3faches=57; (Anfangsbuchstabe)
char c='A'; char c='c'; (Doppelt)
boolean goto=false; (Schlüsselwort)
Schlecht:
Æ
int Variable_drei=2;
Beginnt mit Kleinbuchstaben
Zusammengesetzte Worte: Neues Wort beginnt groß
Substantive oder Zusammensetzungen verwenden, ev. Adjektive
Nicht zu kurz, nicht zu lang
» Lokale Variablen (z. B. Schleifen) kurz
z
Noch notwendig: Alle globalen Variablen müssen "static" sein
Æ Siehe später unter Objektorientierung!
Æ Beispiel: static int j=57;
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
17
Konstanten in Java
z
z
Gleich wie Variablen, aber mit Präfix
Durch das Schlüsselwort "final" wird gekennzeichnet, daß eine
Variable nicht mehr verändert werden darf
Æ
z
In der Regel zusätzlich noch als "static" deklariert
Æ
z
Der Compiler prüft dies; eine Zuweisung darauf kann dann gar
nicht mehr erfolgen (Fehlermeldung beim compilieren!)
Wird später bei Klassen behandelt
Zu unterscheiden von konstanten Ausdrücken:
Æ
Michael Sonntag
Beispiel: 3, 7.56e12, 0x3fff, …
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
18
Konstanten in Java
Beispiele und Konventionen
z
Beispiele:
Æ
Æ
Æ
Æ
z
final static int MAX_VALUE=100;
final byte CREDENTIAL_ACCEPTED=0;
final byte CREDENTIAL_REJECTED=1;
final byte CREDENTIAL_UNDECIDED=2;
Konventionen:
Æ
Æ
Æ
Æ
Æ
Michael Sonntag
Lauter Großbuchstaben
Zusammengesetzte Worte: Neues Wort mit '_' trennen
Substantive oder Zusammensetzungen verwenden, ev. Adjektive
Eher länger
Gruppen zusammengehöriger Konstanten (Alternativ-Werte)
sollten einen gemeinsamen Anfang besitzen
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
19
Java
Einrückung
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
20
Einrückung
z
z
Einrückung ist für den Computer egal - Sie wird ignoriert
Einrückung ist für den Programmierer essentiell
Æ
Æ
Weder er noch andere können das Programm sonst lesen
Einrückungen "müssen" IMMER mit den Blöcken korrespondieren!
» if (val<0)
»
doSomehting();
Sehr
»
doSomethingOther();
z
schwerer Fehler: Ausrücken!
Es existieren 4 Grund-Muster (siehe nächste Folie)
Æ
Welches gewählt wird, hängt ab von
» Geschmack des Programmierers
» Verwendeten Tools (z. B. Editor)
» Firmen-Richtlinien
Aber immer konsistent bleiben!
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
21
Einrückung
4 Grundformen
z
Die beiden linken Formen
(1 + 2) sind gebräuchlicher
Æ
Und meiner Meinung nach
besser geeignet!
z
Beide untereinander gleich
z
Variante 2 ist die "offizielle"
Java Empfehlung
Suchen Sie sich aus, was
Ihnen besser gefällt. Dann
bleiben Sie konsistent dabei!
Michael Sonntag
if ( …) 1
{
doIt();
}
if ( …) 3
{
doIt();
}
if ( …) { 2
doIt();
}
if ( …) { 4
doIt();
}
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
22
Einrückung
Was? Wie?
z
z
Wie tief? 2-4 Zeichen oder 1 Tabulator
Was soll man Einrücken?
Æ
Jeden Block (= { … })
» Ebenso: Inhalt von Klassen, Methoden
Æ
z
Nicht einrücken:
Æ
Æ
z
Alles Anweisungen im inneren von if, while, do, switch, for, try,
synchronized, static
Variablen-Deklaration
Kommentare
Sondereinrückung: Fortsetzungszeilen
Æ
Æ
Michael Sonntag
Viel stärker: Optisch "passend" oder >=doppelter normaler Tiefe
Beispiel:
» if (a&&b || c&&d ||
»
e&&f || g&&h)
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
23
Ein- / Ausgabe
"Kürzest-" Fassung
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
24
Ein- / Ausgabe
Ausgeben
z
Wiederholung: Siehe schon oben!
z
Verwenden der Klasse PrintWriter
Æ
Æ
z
Methoden:
Æ
Æ
Æ
z
"print( … );": Für alle Datentypen (Ausgabe)
"println( … );": Für alle Datentype (Ausgabe + neue Zeile)
"println();": Zeilenumbruch alleine
Länge eines Strings feststellen
Æ
z
System.out: Normale Programmausgabe
System.err: Ausgabe von Programmfehlern
String str; int len=str.length();
An die Zeichenkonstanten denken!
Æ
Michael Sonntag
\r, \n, \t, \\, ...
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
25
Ein- / Ausgabe
Einlesen
z
Zeilenweise einlesen:
Æ
BufferedReader verwenden
» BufferedReader in=new BufferedReader(new InputStreamReader(
System.in));
Æ
Fehlerüberprüfung "ausschalten"
» Beim Hauptprogramm anfügen "throws IOException"
– "public static void main(String[] args) throws IOException"
z
Zeile einlesen: String zeile=in.readLine();
Æ
Aufteilung in einzelne Werte: Siehe Kapitel über Strings!
» Derzeit: Immer nur ein Wert pro Zeile
z
Einzelne Zeichen lesen:
Æ
"read();": liefert einen int zurück
» -1 falls nichts mehr zu lesen (Dateiende)
» Sonst: Typecast auf char
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
26
Ein- / Ausgabe
String in Zahlen umwandeln
z
".parse" Datentyp-Name mit Großbuchstaben "(" String ")"
Æ
Æ
Æ
Dies sind eigentlich Klassen; siehe später!
Beispiel: String s="13";byte b=Byte.parseByte(s);
Gibt es für: Byte, Short, Long, Float, Double
» Integer ist Sonderfall: "Integer.parseInt(s);"
Kommt gegenüber Variable
z Fehlerüberprüfung "ausschalten"
hinzu!
Æ
Beim Hauptprogramm anfügen "throws NumberFormatException"
» public static void main(String[] args) throws NumberFormatException
» Gemeinsam mit zeilenweisem einlesen:
– "throws IOException, NumberFormatException"
– oder einfach für alle Fehler: "throws Exception"
InOut.java
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
27
Java
Sprachdefinition
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
28
Java-Sprachdefinition
z
Die Programmiersprache Java ist exakt definiert: Sowohl Syntax
als auch Semantik sind genau festgelegt
Æ
Æ
Dies ermöglicht es, daß auch andere Firmen als Sun Compiler und
VM herstellen können!
Für Programmierer: Bei Detailfragen einfach nachschauen!
Java_Language_Grammar.htm
z
Entnommen aus der Online Version von Gosling, Joy, Steele,
Bracha: The Java Language Specification.
http://java.sun.com/docs/books/jls/
z Online unter http://java.sun.com/docs/books/jls/second_edition/html/
Æ
Michael Sonntag
Java allgemein, Kommentare, Datentypen, Variablen, Konstanten
29
Herunterladen