zur vorherigen Seite zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Nein.


Call by Value (Rückblick)

public class UnitTestTwo
{

  public static long factorial(int N)
  {
    long fct = 1;
    for (intj=1; j<=N; j++)
      fct *= j;
    return fct;
  }
  // alt(native) Methode
  public static long factorialAlt(int N)
  {
    long fct = 1;
    while (N>0)
    {
      fct *= N;
      N-- ;
    }
    return fct;
  }

  public static void main(String[] args)
  {
     int N = 10;
     System.out.println("factorial of " + N);
     System.out.println(
       "scnd  method : " + factorialAlt(N));
     System.out.println(
       "first method : " + factorial(N));
  }
}

-----------------------------------

C:\Source> java UnitTestTwo
factorial of 10
scnd  method : 3628800
first method : 3628800
C:\Source>

Das neue Programm (oben) enthält zwei static Methoden. Das ist natürlich OK. Wir können so viele Klassenmethoden haben, wie wir brauchen. Die neue static Methode verwendet auch N für den Namen ihres formalen Parameters. Auch das ist OK. Der Gültigkeitsbereich dieses Ns ist nur der Körper der Methode. Das neue N hat mit den Ns der anderen Methoden nichts zu tun.

Beachtet insbesondere, dass die neue Methode factorialAlt() bei ihrer Ausführung den Wert in ihrem N ändert. Das ist OK. N in main() ist eine völlig andere Variable und behält den Wert, der ihr zugewiesen wurde.


Frage 11:

Wir prüfen das Folgende. Kompiliert der Code? Achtet vor allem auf N.

public class UnitTestBad
{
  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(N));
  }
}

zur vorherigen Seite zum Inhaltsverzeichnis   zur nächsten Seite