zur vorherigen Seite zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Ja. Der Code kompiliert. Aber er verletzt das Konzept der Modularität und ist schlecht geschrieben.

public class UnitTestBad
{
  static int N = 10;

  public static long factorial()
  {
    long fct = 1;
    for (int j=1; j<=N; j++)
      fct *= j;
    return fct;
  }

  public static void main(String[] args)
  {
     System.out.println(
       "factorial of " + N + ": " + factorial());
  }
}

Globale Variable

public class UnitTestBadBad
{
  static int N = 10;

  public static long factorialAlt()
  {
    long fct = 1;
    while (N > 0)
    {
      fct *= N;
      N-- ;
    }
    return fct;
  }

  public static void main(String[] args)
  {
     long result = factorialAlt();
     System.out.println(
       "factorial of " + N + ": " + result);
  }
}

--------------------------------------
C:\Source> java UnitTestBadBad
factorial of 0: 3628800

Der Code kompiliert und läuft sogar korrekt. Aber jetzt ist der Gültigkeitsbereich der Klassenvariablen N das gesamte Programm. Das ist gefährlich. Eine Variable, deren Gültigkeitsbereich das gesamte Programm ist, wird manchmal als globale Variable bezeichnet.

Globale Variablen verursachen oft unerwartete Interaktionen zwischen Teilen des Programms, die unabhängig sein sollten.

Betrachtet den Code. Achtet auf die alternative Berechnung von factorial(). Sieht gut aus. Was könnte schiefgehen?


Frage 13:

Was ist falsch gelaufen?


zur vorherigen Seite zum Inhaltsverzeichnis   zur nächsten Seite