Ist der Name einer Methode innerhalb oder außerhalb der Glasbox?

Eine gute Antwort wäre:

Außerhalb — so dass er von anderen Methoden "gesehen" und verwendet werden kann.

Zuweisung eines Werts an einen Parameter

Innerhalb des Körpers einer Methode kann ein Parameter genau wie eine Variable verwendet werden. Er kann in arithmetischen Ausdrücken, in Zuweisungsanweisungen usw. verwendet werden.

Aber, eine Änderung des Parameters hat keinen Effekt außerhalb des Methodenkörpers. Ein Parameter ist eine "lokale Kopie", egal welchen Wert der Aufrufer an die Methode übergeben hat. Jede Änderung, die an ihm vorgenommen wird, betrifft nur diese lokale Kopie. Zum Beispiel:

class Konto
{
  . . . .
  private int    kontostand;

  void verarbeiteAuszahlung( int  betrag  )
  {
    int gebuehr;
    if ( kontostand < 100000 )
      gebuehr = 15;
    else
      gebuehr = 0;
    kontostand =  kontostand -  betrag  - gebuehr  ;

    // Ändern der lokalen Kopie "betrag"
    betrag = 0 ; 
  }
}

class KontoTester
{
  public static void main ( String[] args )
  {
    Konto aktuell;
    int scheck = 5000;
    aktuell = new Konto( "123-345-99",
        "Wanda Fish",  100000 );

    // gibt "5000" aus
    System.out.println( "Scheck: " + scheck );

    // Aufruf von verarbeiteAuszahlung() mit dem Wert 5000
    aktuell.verarbeiteAuszahlung( scheck );

    // gibt "5000" aus —  "scheck" wurde nicht geändert
    System.out.println( "Scheck: " + scheck );

  }
}

Der formale Parameter betrag ist der Name, der von verarbeiteAuszahlung() für den Wert 5000 verwendet wird, der ihm vom Aufrufer übergeben wurde. Die Methode kann den Wert, der in betrag enthalten ist ändern, aber das hat keine Auswirkung auf die Variable des Aufrufers.

Dieses Thema wird in den folgenden Kapiteln weiter erörtert. Betrachten Sie für jetzt einen Parameter als eine "Einbahnstraßen"-Mitteilung, die der Aufrufer verwendet, um Werte an die Methode zu übermitteln.

FRAGE 8:

Angenommen, dass die main() Methode in dem Beispiel folgendes tat:

   aktuell.verarbeiteAuszahlung( 7000 );  // verarbeiteAuszahlung()
                                          // mit dem Wert 7000 aufrufen

Ist das OK? Was würde die Anweisung

   betrag = 0 ;  // lokale Kopie von "betrag" ändern

in der Methode tun?

Inhaltsverzeichnis