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

Eine gute Antwort könnte sein:

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

Einbahnstraße zu einem 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 KontoChecker
{
  . . . .
  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 CheckingTester
{
  KontoChecker aktuell;

  public static void main ( String[] args )
  {
    int scheck = 5000;
    aktuell = new KontoChecker( "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 folgenden Kapiteln weiter erörtert. Für jetzt, betrachten Sie 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 dies OK? Was würde die Anweisung

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

in der Methode tun?