Java 3 Sprachelemente und Anweisungen

Werbung
3 Sprachelemente und Anweisungen
Grundgerüst eines Java - Programms:
/* Datei A.java */
package ein.package;
import
import
// optional
// beliebig viele ,import'-Referenzen:
B;
// B.class
java.util.Vector; // Vector.class
// genau eine ,public'-Klasse:
public class A {
float a;
int f() {...}
double g() {...}
//
//
//
//
beliebig viele Elemente von A
Variable a
Methode f()
Methode g()
public static void main( String argv[] ) { ... }
class NurlmPackageNutzbar {
int
f() {...}
/* Ende der Datei A.java */
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Kommentare
In Java gibt es folgende Kommentartypen:
//
/*
Zeilenweise Kommentare
Beginn / Ende Kommentar
einschließlich \r, \n, \r\n
/** Dokumentationskommentar
*/
*/
Zeichensätze / Unicode
Java benutzt eine sogenannten Unicode mit 16 bit / Zeichen. Damit
sind 65.535 unterschiedliche Zeichen codierbar.
Die Java-Umgebung wandelt ASCII oder Latin-1 Dateien beim
Einlesen in den Unicode um.
Die allgemeine Darstellung des Unicodes lautet:
\udddd
Java
// d = hexadezimalziffer
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Ziffern in Unicode (Auszug)
Unicode
\u0030 - \u0039
\u0660 - \u0669
\u06f0 - \u06f9
\u0966 - \u096f
\u09e6 - \u09ef
\u0a66 - \u0a6f
\u0ae6 - \u0aef
\u0b66 - \u0b6f
Beschreibung
ISO-Latin-1 (und ASCII)-Ziffern
Arabisch-IndischeZiffern
Ost-Arabisch-Indische Ziffern
DewanagarischeZiffern
BengalischeZiffern
Gurmukhi-Ziffern
Gujarati-Ziffern
Oriya-Ziffern ....
Buchstaben und Ziffern in Unicode (Auszug)
Java
Unicode
\u0041 - \u005A
(,A'-'Z')
\u0061 - \u007A
(,a'-'z')
\u00C0 - \u00D6
\u00D8 - \u00F6
\u00F8 - \u00FF
\u0100 - \u1FFF
Beschreibung
ISO-Latin-I (+ ASCII) lateinische Großbuchstaben
ISO-Latin-1(und ASCII) lateinische Kleinbuchstaben
ISO-Latin-l, ergänzende Buchstaben
ISO-Latin-1, ergänzende Buchstaben
ISO-Latin-1, ergänzende Buchstaben
Latin
Erweiterung-A,
HS
Merseburg
WS 06/07 Latin Erweiterung-B, .....
3 Sprachelemente und Anweisungen
Die Klasse Character beinhaltet einige Methoden zur Überprüfung, ob es
sich
um ein Zeichen oder eine Ziffer handelt:
• Character.isJavaLetter() = true, wenn Zeichen Unicode–Buchstabe
• Character.isJavaLetterOrDigit()= true, wenn Zeichen ein Buchstabe
oder Ziffer ist
Namenskonventionen
Folgende Konventionen sollten bei Bezeichnern eingehalten werden:
•
•
•
•
•
•
Java
Klassen- / Schnittstellename beginnen mit Großbuchstaben
Methoden- / Variablennamen beginnen mit Kleinbuchstaben
Packagenamen werden klein geschrieben
Konstanten alles groß
Unterstriche nur für mehrteilige Konstanten
Zugriffsmethoden set(X) get(X)
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Beispiel:
package DE.fh-merseburg.de.informatik.javaclasses;
import
java.util.Date;
class EineKlasseMitEinemLangenNamen {
String s;
double radius;
double nochEinDouble;
final int MAX_VALUE = 2001;
double eineDoubleMethode() ...
int
eineIntMethode() ...
void
setRadius( double d ) ...
double getRadius() ...
}
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Literale
Literale sind Quelltextdarstellung des Wertes eines primitiven Datentyps,
eines Strings oder das NULL Symbol. Außer der Darstellung der Unicode
Zeichen (\uxxxx) ergeben sich bei Literalen in Java keine Abweichungen zur
C-Schreibweise.
Schlüsselworte
abstract
boolean
break
byte
case
catch
char
dass
const*
continue
default
do
Java
double
else
extends
final
finally
float
for
goto*
if
implements
import
instanceof
int
interface
long
native
new
null
package
private
protected
public
return
short
HS Merseburg WS 06/07
static
super
switch
synchronized
this
throw
throws
transient*
try
void
volatile
while
3 Sprachelemente und Anweisungen
In Java werden folgende Arten von Datentypen unterschieden:
Elementare Datentypen
Felder
Klassen
Schnittstellen
}
Referenztypen
Elementare Datentypen




Java
boolean
für logische Werte,
char
für Zeichen,
Integertypen
byte, short, int, long
Fließkommatypen
float, double.
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Zugriffe auf eine Variable eines elementaren Typs liefern oder setzen
immer direkt den Wert dieser Variable. Es sind keine Pointer auf
Variable eines elementaren Datentyps möglich. Ebenso kann die
Adresse dieser Variablen nicht ermittelt werden.
Die Übergabe eines elementaren Datentyps als Argument an
eine Methode erfolgt immer by-value durch Kopieren des
Wertes.
Referenztypen stehen für Objekte, auf die über einen Pointer (eine
Referenz) zugegriffen wird. Pointer werden von Java automatisch
verwaltet und können nicht modifiziert werden.
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Wertebereiche, Defaultwerte und der benötigte Speicherplatz:
Typ
Wertebereich
Default
Größe
byte
short
int
long
-128... 127
-32768... 32767
-2147483648... 2147483647
-9223372036854775808...
9223372036854775807
0
0
0
0L
8 bit
l6 bit
32 bit
64 bit
char
\u0000... \uFFFF
boolean false, true
\u0000
false
l6 bit
1 bit
float +-3.40282E+38
double +- l.79769E+308
0.0F
0.0D
32 bit
64 bit
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Berechnungsgrundsätze:
Der Operand des kleineren Typs wird automatisch und ohne
Informationsverlust in den benötigten größeren Typ konvertiert, bevor
die Operation ausgeführt wird.
Eine Zuweisung an den Typ byte oder short muß immer mit
einer expliziten Typkonvertierung geschrieben werden:
byte
int
long
Java
b1, b2 = 42, b3 = 69;
i = 2147483647, i2 = 0xfedcba98;
k = 2147483648L,
k2 = 0x0001000200030042L;
i =
b2 + b3;
b1 =
b2 + b3;
b1 = (byte)(b2 + b3);
//
//
//
b3 = (byte) k2;
// ok, liefert 0x42
HS Merseburg WS 06/07
ok.
Fehler!
ok.
3 Sprachelemente und Anweisungen
Casting
Die Typkonventierung (,,Casting") erfolgt wie in C/C++ mit:
(Datentyp) Ausdruck
Die Umwandlung eines kleineren in einen größeren Typ wird vom Compiler
bei Bedarf automatisch in der Reihenfolge (von links nach rechts)
byte short int long float double
char int long float double
vorgenommen.
Bei Konvertierung eines größeren Typs in einen kleineren Typ (etwa von
long nach int oder von short nach byte) werden nur die passenden unteren
Bits kopiert und die höherwertigen Bits abgeschnitten.
Diese Konvertierungen werden deshalb niemals von Java automatisch
vorgenommen, sondern müssen immer mit einem Cast ausdrücklich
angefordert werden.
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Der Typ char
char repräsentiert Unicode-Zeichen, die als vorzeichenloser 16 bit
Wert gespeichert werden. Die Zeichenliterale werden in einfache
Anführungszeichen geschrieben:
char c1, c2, c_a, c_b, c_A;
c_a = ´a´;
c_b = ´b´;
c_A = ´A´;
c1 = ´\n´;
c2 = ´\u4321´;
Bei Unicode-Zeichen im Bereich unter 255, (ASCII bzw. Latin-l Zeichen)
gibt es keine Unterschiede zu char in aus C. Einige Zeichen können auch
über die ESC – Sequenzen erreicht werden.
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Sequenz
\n
\t
\b
\r
\f
\\
\‘
\“
\ddd
\udddd
Bedeutung
Zeilenvorschub (engl. new line) (\u000A) LF
Tabulator (\u0009) HT
Backspace (\u0008)
BS
(Wagen-)Rücklauf (engl. return) (\u000D) CR
Seitenvorschub (engl. form feed) (\u000C) FF
der inverse Schrägstrich (engl. backslash) selbst (\u005C)
Apostroph (engl. single quote) (\u0027)
Anführungsstriche oben (engl. double quote) (\u0022)
ein durch seinen oktalen Wert angegebenes Zeichen,
ein Unicode-Zeichen, wobei jedes d eine hexadezimale Ziffer ist
Alle für Integertypen zulässigen Operationen können auch mit char
durchgeführt werden. Die Zuweisung von char zu einem short oder
byte – Typ per Typkonvertierung erfolgt durch Kopieren der Bits, wobei
aus einem (zwingend positiven) char negative Werte entstehen
können.
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Der Typ boolean
Boolean wird zur Darstellung der logischen Werte mit den Literalen
false und true verwendet.
Um den Mißbrauch von Integerwerten für logische Werte zu
verhindern, verbietet Java Typumwandlungen zwischen den
Integertypen und dem Typ boolean.
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Die Fließkommatypen float und double
Die Fließkommatypen float und double entsprechen dem Standard IEEE-754
für Gleitkommaarithmetik.
Eine float-Variable wird intern mit 32 bit gespeichert und in der Forrn
s * m * 2e
dargestellt, mit der folgenden Bedeutung
s: Vorzeichen +-,
m: Mantisse - ein positiver Integerwert < 224
e: Exponent - Integerwert zwischen einschließlich - 149 und 104.
Dies entspricht etwa dem Bereich von +-3.40 1038 mit einer Genauigkeit von
6 bis 7 Dezimalstellen.
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Eine double-Variable wird in 64 bit gespeichert, wobei die Mantisse kleiner
als 253 ist und der Exponent zwischen -1045 und +1000 liegt. Darstellbare
double Werte liegen im Bereich von etwa +-1.798 * 10308 mit einer
Genauigkeit von etwa 15 Dezimalstellen.
Die Schreibweise von Fließkommazahlen entspricht den auch in C/C++
üblichen Konventionen. Literale des Typs float müssen mit einem
angehängten ´F´ gekennzeichnet werden (ansonsten double-Werte).
Der genaue Wert der Zahlenbereiche kann über Konstanten der Klassen
java.Float bzw. java.Double (Achtung Grossschreibung) ermittelt werden.
Das Resultat einer arithmetischen Operation ist nur dann vom Typ float,
 wenn beide Operanden vom Typ float sind oder
 ein Operand float und der andere Operand ein Integerwert (außer long)
ist.
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Fließkommaoperationen lösen in Java keine Fehlerbedingungen aus (auch
nicht die Division durch Null). Falls ein Überlauf entsteht, wird dem
Resultat der spezielle Wert ,,unendlich" zugewiesen:
/* Werte für +/- unendlich:
Float.POSITIVE_INFINITY;
Float.NEGATIVE_INFINITY
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
*/
float f = Float.MAX_VALUE;
float g = Float.POSITIVE_INFINITY;
if (f == g) ...
// false!
Das Ergebnis von undefinierten Operationen, z.B. beim Aufruf von
Math.sqrt(-1), ist der Wert Double.NaN (,,Not-a-Number") bzw.
Float.NaN.
Java
HS Merseburg WS 06/07
3 Sprachelemente und Anweisungen
Konstanten
Alle Variablen der elementaren Typen können durch das Attribut final
als Konstanten markiert werden.
Sehr häufig werden final-Variablen gleichzeitig als static definiert. Eine
final-Variable muss natürlich sofort bei ihrer Deklaration initialisiert
werden, da der Wert später nicht mehr geändert werden kann:
final char MAX_VALUE = ´\uffff´;
static final double PI = 3.14159265358979323846;
final static int MIN_PRIORITY = 1;
final static int MAX_PRIORITY = 10;
Java
HS Merseburg WS 06/07
Herunterladen