Java

Sprachaufbau


Lexikalische Elemente

Die elementaren Bestandteile von Java Programmen sind:

Kommentare

Es gibt drei Arten von Kommentaren in Java:

Bezeichner

Namen von Variablen und Methoden etc.
beginnen mit Buchstaben, dürfen "_" und "$" enthalten.

reservierte Bezeichner und Zeichen

Schlüsselwörter (key words)

Eigene Objekte und Variablen kann man beliebig nennen, bis auf folgende, von Java reservierten Worte:

abstract double     int        strictfp **
boolean  else       interface  super
break    extends    long       switch
byte     final      native     synchronized
case     finally    new        this
catch    float      package    throw
char     for        private    throws
class    goto *     protected  transient 
const *  if         public     try
continue implements return     void
default  import     short      volatile
do       instanceof static     while

* z.Zt unbenutzt, ** neu in Java 2

     ( )  { }  [ ]  ;  ,  .
     =  - + * / %
     < > ! ? & | ~ 

Daneben gibt es eine Reihe von Methodennamen mit speziellen Bedeutungen (z.B. main() oder run()). Sie werden in der Regel durch Interfaces vorgeschrieben. Eine Ausnahme ist die Methode main().

Elementare Datentypen

In Java sind die primitiven Datentypen architektur-unabhängig definiert. Eine Zusammenstellung befindet sich in Abbildung 1.3. Der Begriff `atomar' wird bei Mulit-threaded Programmen benötigt.

Abbildung 1.3: Java-Datentypen
Datentyp Inhalt Größe atomar
boolean true oder false 1 bit  ja
char Unicode Zeichen 16 bits ja
byte signed integer 8 bits ja
short signed integer 16 bits ja
int signed integer 32 bits ja
long signed integer 64 bits nein
float IEEE754 float 32 bits ja
double IEEE754 double 64 bits nein
String Zeichenkette beliebig nein
Objekt-Referenz Zeiger, Pointer null oder Referenz ja

Typ Art (Bereich)
ganze Zahlen
byte 8-bit Integer mit Vorzeichen (-128 bis 127)
short 16-bit Integer mit Vorzeichen (-32.768 bis 32.767)
int 32-bit Integer mit Vorzeichen  (-2.147.483.648 bis 2.147.483.647)
long 64-bit Integer mit Vorzeichen (-9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807)
reele Zahlen
float 32-bit IEEE 754 Fliesskomma (-3.40282347e+38 bis 3.40282347e+38)
double 64-bit IEEE 754 Fliesskomma  (-1.7976931348623157e+308 bis 1.7976931348623157e+308)
andere Typen
char 16-bit Unicode character (65536 Zeichen).
boolean Boolscher Wert (wahr oder falsch)

Die Größe der Datentypen ist unabhängig vom Rechnersystem und der Java-Implementierung!

Beispiel:

public class PrimitivTypen { 
  // lexikalische Typen sind int und double 
  // andere direkte Wertzuweisungen müssen   
  // "gecastet" werden z.B.: 
  byte b = (byte)37; 

  short s = (short)37; 
  int i = 37; 
  long l = 37L; 

  float f = 0.37F; 
  double d = 0.37; 
  
  char c = 'K'; 
  boolean b = true; 
}

Variablen

Es gibt unter anderem folgende drei Arten von Variablen:

Operatoren

Zur Verknüpfung von elementaren Datentypen:

postfix operators    [] . (params) expr++ expr--
unary operators      ++expr --expr +expr -expr ~ !
creation or cast     new (type)expr
multiplicative       * / %
additive             + -
shift                << >> >>>
relational           < > <= >= instanceof
equality             == !=
bitwise AND          &
bitwise exclusive OR ^
bitwise inclusive OR |
logical AND          &&
logical OR           ||
conditional          ? :
assignment           = += -= *= /= %= &= ^= |= <<=
                     >>= >>>=

Beispiel:

public class Operatoren { 

 public void numericalops() { 
  int n = 43; 

  n += 7; // ist eine Abkuerzung von n = n + 7; 
  // dies funktioniert auch mit -, /, >>, etc. 

  n = n * 2; // verdoppelt n 
  n = n / 2; // teilt n ganzzahlig durch 2 
  n = n % 2; // Rest der ganzzahligen Division 

  float f = n / (float)2; // liefert das float- 
                          // Divisionsergebnis 
 } 

 public void logicalops() { 
  boolean bool = true && false; // bool ist false 
  bool = true || false; // bool ist true 
  bool = true == false; // bool ist false 
  bool = false != true; // bool ist true 

  bool = 4 >= 3; // bool ist true 
  bool = 4 <> 4; // bool ist false  
 } 

 public void difficultops() { 
  // definiert ein int-Array mit 8 Eintraegen
  int array[] = new int[8]; 

  if (array[0]++ < 0); 
  // ist gleichbedeutend mit 
  if (array[0] < 0); 
  array[0] = array[0] + 1; 

  if (--array[1] == 2); 
  // ist gleichbedeutend mit 
  array[1] = array[1] - 1; 
  if (array[1] == 2); 

  boolean bool = true; 
  bool = !bool; 
  // ! nimmt eine logische Negierung vor 
  // bool ist jetzt gleich false 

  int conditional = bool == true ? 3 : -2; 
  // conditional ist jetzt -2  
 } 

 public void bitwiseops() { 
  int i = 3; 

  i = i << 1; // i ist jetzt 6 

  i = i & 7; // i ist jetzt 6 

  i = i | 3; // i ist jetzt 7 
 } 
}

Kontrollstrukturen

Kontrollstrukturen dienen dem Ausführen von Programmteilen in Abhängigkeit von sich ändernden Bedingungen.

Statement         Keyword

decision making   if-else, switch-case
loop              for, while, do-while 

miscellaneous     break, continue, label:, return 

Schleifen und bedingte Anweisungen

Java hat die üblichen auch von C und C++ bekannten while-, do- und for-Schleifen-Konstrukte.

   if (condition) {
      statements
   } else {
      statements
   }  

   while (condition) {
         statements
   }

   do {
        statements
   } while (condition);

   for (int i=0; i < end; i++) {
       statements
   }

   switch (var) {
   case a: { statements }
   case b: { statements }
   ...
   default: { statements }
   }

break und continue können analog zu C/C++ in einer Schleife benutzt werden.

Beispiel:

public class Kontrollstrukturen { 
 
  public void decision() { 

    int variable = 2; 
                      
    if (variable > 1 && variable == 2) { 
       variable = variable - 1; 
    } 
    else { 
       variable = variable + 1; 
    } 
                      
    switch (variable) { 
    case 0: 
    case 1: 
            // variable ist 0 oder 1 
            break; 
    case 2: 
            variable = variable * 2; 
            break; 
    default: 
            // variable ist nicht 0, 1 oder 2 
    } 
  } 
                     
  public void loop() { 
         // dreimal die selbe Schleife 
                      
    for (int index = 0; index < 4; index = index + 1) { 
         // tue irgendwas 4 mal 
    } 
                      
    int index = 0; 
    while (index < 4) { 
          index = index + 1; 
    } 
                      
    index = 0; 
    do { 
         index = index + 1; 
    } while (index < 3); 
  } 
                     
  public void miscellaneous() { 
    int i = 0; 
                     
    while (1 > 0) { 
      i = i + 2; 
      if (i > 5) break; // verlaesst die while-Schleife 
      continue; // faengt sofort wieder am  
                // Schleifen-Kopf an 
    } 
                      
    return; // beendet die Methode sofort 
  } 
} 

Felder, Arrays

Ein Array, d.h. einen Vektor oder eine Matrix, kann man ebenfalls durch new erzeugen.

   byte[] buffer = new byte[4096];
   byte[] data = new byte[4096];
   int[][] plot = new int[64][64];
   ...
   Date[] ds = new Date[16];

Auf die Elemente eines Arrays kann über ihren Index zugegriffen werden.

   for (int i=0; i < buffer.length; i++) 
       buffer[i] = data[i];

In der length Variablen eines Array Objekts steht die Information über die Länge bereit.

Bemerkung: Java erlaubt (aus Gründen der Kompatibilität zu C/C++) auch die Notation byte buffer[] = new byte[4096]. Wir werden davon aber keinen Gebrauch machen.


Erstellt unter Verwendung von Vorlesungsunterlagen von Dr. V.-H. Winterer, Universität Freiburg, Rechenzentrum.

© Universität Mannheim, Rechenzentrum, 2000-2002.

Heinz Kredel

Last modified: Mon Nov 19 23:02:32 MET 2001