Variable angeblich nicht vorhanden

Cherrycoke

Mitglied
Hallo,

ich habe folgenden kurzen Code:

Java:
public class Sparbuch{

  public Sparbuch( float k, float p, int l ) throws Exception{
    if( k < 0 || p < 0 || l < 0 )
      throw new Exception( "Fehler beim Erzeugen des Sparbuchs." );
  }
  
  public static void main( String[] args ){
    try{
      Sparbuch sb = new Sparbuch( 100, 5, 3 );
       System.out.println( sb.k );
    }
    catch ( Exception e ){
      System.out.println( e );
    }
    
  }
}

Nun zeigt mir der Compiler an, dass die Variable k (Zeile 14) nicht existieren würde. Das kann ich aber nicht ganz nachvollziehen. Kann mich jemand kurz aufklären?
 
Zuletzt bearbeitet von einem Moderator:
Hallo!

Da ist eindeutig ein Denkfehler vorhanden. :D

Schau,
Die Parameter die dem Konstruktor übergeben werden, existieren nur innerhalb von diesem.
Eben bis zur Klammer "}".

Was du benötigst, sind Attribute, also die "Eigenschaften" der Klasse.

Attribute werden üblicherweise im Klassenbody vor dem Konstruktor definiert.
Sie bekommen dann Werte durch den Konstruktor zugewiesen.

Hier ein Beispiel:

Java:
public class Sparbuch{

  public float k;
  public float p;
  public int l;

  public Sparbuch( float k, float p, int l ) throws Exception{
    if( k < 0 || p < 0 || l < 0 ){
      throw new Exception( "Fehler beim Erzeugen des Sparbuchs." );
    }

    this.k = k;
    this.p = p;
    this.l = l;
  }
  
  public static void main( String[] args ){
    try{
      Sparbuch sb = new Sparbuch( 100, 5, 3 );
       System.out.println( sb.k );
    }
    catch ( Exception e ){
      System.out.println( e );
    }
    
  }
}

Ich habe also drei Attribute erstellt, und ihnen im Konstruktor Werte zugewiesen (eben die dem Konstruktor übergebenen).

Die erstellten Attribute tragen das Schlüsselwort "public", was bedeutet dass sie von außen aus sichtbar sind.
Dies ist nicht immer erwünscht.

Bitte sieh dir dazu auch speziell das Thema "Datenkapselung" an.


Ich kann dir folgende Lektüre ans Herz legen:

http://openbook.galileocomputing.de/javainsel8/


Weiters noch ein Tipp:

Es ist sinnvoller aussagekräftigere Namen als k,p und l zu verwenden, damit sofort ersichtlich ist, worum es sich handelt.


mfg
Martin
 
Zuletzt bearbeitet von einem Moderator:
Zurück