# Zugriff auf Variablen anderer Klassen



## Potti (21. Jun 2010)

Ich habe ein Problem welches zwar schon häufig aufgegriffen wurde, aber ich bekomme es trotzdem nicht auf die Kette. Deswegen bitte ich trotzdem um eure Hilfe, da ich schon viel versucht habe.

Ich möchte gerne aus einer anderen Klasse auf die Variable "text" zugreifen und genau das  bekommen was momentan über [JAVA=18]System.out.println(text);[/code] ausgegeben wird.




```
import java.io.*;

public class LeseAusDatei {

  public static void main (String[] args) throws IOException{
     byte zeichen;
     char buchstabe;
     String text = "";
     String dateiName = "Test.txt";
     FileInputStream leseStrom = new FileInputStream(dateiName);
     do{
       zeichen = (byte)leseStrom.read();
       System.out.print(zeichen+" ");
       text += (char)zeichen;
     } while (zeichen !=-1);
     leseStrom.close();
     System.out.println();
     System.out.println(text);
  }
}
```

vielen Dank für eure vermutlich schnellen Antworten schon einmal im voraus

mit freundlichen Grüßen Rene


----------



## Appleleptiker (21. Jun 2010)

Wenn die Variable statisch ist, dann


```
System.out.println(Klassenname.text)
```

Ist sie jedoch Teil eines Objektes, dann


```
System.out.println(Objektname.text)
```

Da Text jedoch derzeit ein Teil Deiner main()-Methode ist, ist es sinnvoller, in Deiner anderen Klasse eine Methode zu schreiben, die sich den Text holt und in einer Variable abspeichert. Also ungefähr so:


```
//Teil der anderen Klasse
static String zuHolenderText;
static String getText(String str)
{
zuHolenderText = str;
}
```

In der main() machst Du das dann so:

```
andereKlasse.getText(text);
```

Und schon kannst Du mit dem text in der anderen Klasse weiterarbeiten.

P.S.: Die Variante meines Nachposters ist auch eine gute Möglichkeit, Du kannst es Dir im Prinzip aussuchen.


----------



## Gast2 (21. Jun 2010)

Du kannst dir für die Variable text eine getter methode schreiben:


```
public class LeseAusDatei {

   private static String text = "";
 
  public static void main (String[] args) throws IOException{
     byte zeichen;
     char buchstabe;
     String dateiName = "Test.txt";
     FileInputStream leseStrom = new FileInputStream(dateiName);
     do{
       zeichen = (byte)leseStrom.read();
       System.out.print(zeichen+" ");
       text += (char)zeichen;
     } while (zeichen !=-1);
     leseStrom.close();
  }

   public static String getText() {
      return text;
   }
}
```


----------



## Ofof91 (9. Dez 2012)

Irgendwie funktioniert das bei mir auch nicht. Ich möchte in der Klasse "Name" auf die Variable "choice" der Klasse "Web" zugreifen. Wie kann ich das machen?


public class Web {

    public static void main(String[] args) {

    int choice=0;
}}

class Name{

  int choice= Web.choice;
}


----------



## TKausL (9. Dez 2012)

1.: Die Variable wird in der Main Definiert und verfällt danach
2.: Deine main tut GARNICHTS außer eben die Variable zu definieren. Danach beendet sich dein Programm
3.: Wenn die Klasse "Web" heißt, WIE zum Teufel kommst du darauf, diese mit Webshop. abzurufen?
4.: Bitte Java-Tags nutzen.


----------



## Gast2 (9. Dez 2012)

Bei dir existiert aktuell keine Variable choice in der Klasse Web.
choice ist bei dir nur lokal in der Methode main sichtbar. Wenn du per Web.choice (statisch!) drauf zugreifen willst, dann musst du das so machen:


```
public class Web {
  public int choice = 123;
}

class Web {
  public static void doIt () {
    System.out.println (Web.choice);
  }
}
```


----------



## Ofof91 (9. Dez 2012)

TKausL hat gesagt.:


> 1.: Die Variable wird in der Main Definiert und verfällt danach
> 2.: Deine main tut GARNICHTS außer eben die Variable zu definieren. Danach beendet sich dein Programm
> 3.: Wenn die Klasse "Web" heißt, WIE zum Teufel kommst du darauf, diese mit Webshop. abzurufen?
> 4.: Bitte Java-Tags nutzen.



Nein die Klasse heißt eh "Web". Mir geht es nur darum, auf die Variable zuzugreifen.


----------



## Ofof91 (9. Dez 2012)

EikeB hat gesagt.:


> Bei dir existiert aktuell keine Variable choice in der Klasse Web.
> choice ist bei dir nur lokal in der Methode main sichtbar. Wenn du per Web.choice (statisch!) drauf zugreifen willst, dann musst du das so machen:
> 
> 
> ...



Ja ich weiß, aber ich habe diese Variable eben in der Main-Methode und möchte auf diese zugreifen.
Ist dies nicht möglich?


----------



## TKausL (9. Dez 2012)

Ofof91 hat gesagt.:


> Ja ich weiß, aber ich habe diese Variable eben in der Main-Methode und möchte auf diese zugreifen.
> Ist dies nicht möglich?



Kurz und bündig: Nein! Du kannst nur auf Instanz oder Klassenvariablen zugreifen und diese MÜSSEN außerhalb von Methoden Definiert werden. Aber das Hindert dich nicht daran, diese von der main() aus zu füllen.


----------



## Gast2 (9. Dez 2012)

Nein, die Variable ist nur innerhalb der main gültig. Siehe die Antwort von TKausL.


----------



## Ofof91 (9. Dez 2012)

TKausL hat gesagt.:


> Kurz und bündig: Nein! Du kannst nur auf Instanz oder Klassenvariablen zugreifen und diese MÜSSEN außerhalb von Methoden Definiert werden. Aber das Hindert dich nicht daran, diese von der main() aus zu füllen.



Den letzten Satz verstehe ich nicht ganz. Und wenn ich diese Varibale außerhalb der Main-Methode definiere und dann von der Main-Methode aus auf diese zugreife, wie kann ich das machen?


----------



## TKausL (9. Dez 2012)

Ofof91 hat gesagt.:


> Den letzten Satz verstehe ich nicht ganz. Und wenn ich diese Varibale außerhalb der Main-Methode definiere und dann von der Main-Methode aus auf diese zugreife, wie kann ich das machen?


Anscheinend hast du die Grundlagen nicht verstanden...


```
class X {
  static int i = 0;
  public static void main(String[] args){
    i = 1;
  }
}
```


----------



## Ofof91 (9. Dez 2012)

TKausL hat gesagt.:


> Anscheinend hast du die Grundlagen nicht verstanden...
> 
> 
> ```
> ...



Möglich... Ok das ist verständlich und wenn ich jetzt von einer anderen Klasse auf die Variable i zugreifen möchte? Schreibe ich dann: X.i; 
?


----------



## TKausL (9. Dez 2012)

Richtig.


----------

