Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- toString() (http://www.informatikerboard.de/board/thread.php?threadid=2113)


Geschrieben von Erstsemester am 26.01.2015 um 19:59:

  toString()

Meine Frage:
Hey :-)

Ich frage mich gerade, wie das genau mit der toString() - Ausgabe funktionieren soll?

Meine Ideen:
Vielen Dank



Geschrieben von eulerscheZahl am 26.01.2015 um 20:06:

 

toString() wird in Object definiert, von dem ja alles erbt.
Im Object werden nur Klassenname und Speicheradresse zurückgegeben, aber da man die Funktion überschreiben kann, liefert die Funktion immer sinnvolle Ergebnisse, wenn der Programmierer nicht zu faul war.



Geschrieben von Erstsemester am 26.01.2015 um 20:25:

 

Mache ich dann einfach ein Objekt von einer Klasse?

Sprich: Mensch h = new Mensch ();
h.toString();



Geschrieben von eulerscheZahl am 26.01.2015 um 20:27:

 

Ja, das würde gehen. Je nachdem, ob toString() überladen wurde, kann die Ausgabe variieren.



Geschrieben von Erstsemester am 26.01.2015 um 20:31:

 

Wo würde ich denn hier jetzt mein toString einbauen?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
public class Wurf
{
	public static void main (String[]args)
	{
		Ball objekt = new Ball ();
		objekt.drucken(); 
	}
}

class Ball
{
	int ballgroesse = 5;
	
	public void drucken()
	{
		System.out.println(ballgroesse);
	}
}



Geschrieben von eulerscheZahl am 26.01.2015 um 20:33:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
class Ball
{
	//...

	@Override
	public String toString() {
		return "ich bin ein Ball!";
	}
}



Geschrieben von Erstsemester am 26.01.2015 um 20:39:

 

Danke dir :-)



Geschrieben von Karlito am 26.01.2015 um 21:22:

 

Kleine Zusatzinfo: Bei der Verwendung von System.out.println() wird implizit toString() aufgerufen.

code:
1:
2:
3:
4:
Mensch m = new Mensch();
System.out.println(m);


gibt also m.toString() auf der Konsole aus.

Gleiches passiert beim impliziten Cast:

code:
1:
2:
3:
4:
Mensch m = new Mensch();
String s = "Mensch: " + m;


Hier wird auch m.toString() aufgerufen um m an einen String zu konkatenieren. Der Ausdruck ist also äquivalent zu:
code:
1:
2:
3:
4:
Mensch m = new Mensch();
String s = "Mensch: " + m.toString();


Gruß,

Karlito



Geschrieben von Erstsemester am 26.01.2015 um 21:26:

 

Aber warum benutzt man dann toString() und nicht die ganz normale System.out.println () - Funktion?

(Ich wage mal einen Ansatz: Bei System.out.println muss ich ja jeden Befehl einzeln eingeben (name, adresse, usw. --> während toString() die ganzen Daten auf einmal zieht? )



Geschrieben von Karlito am 26.01.2015 um 22:05:

 

Weil man nicht unbedingt immer auf die Konsole printen möchte. Man kann ja die Rückgabe auch anderweitig verwenden, z.B. in einer graphischen Oberfläche oder zum debuggen. Weiterhin so ist auch ein einheitlicher Zugriff möglich. Und außerdem kann so der Programmierer der toString Methode entscheiden, was ausgegeben werden soll und wie es ausgegeben werden soll.

Gruß,

Karlito



Geschrieben von Erstsemester am 27.01.2015 um 07:57:

 

Vielen Dank :-)



Geschrieben von Björn am 13.05.2015 um 13:44:

 

Ich schließe mich diesem Thema auch einmal an (bin gerade dabei, die toString() Methode zu entdecken).

Die main - Funktion:

code:
1:
2:
3:
4:
5:
6:
package javatostring;  
public class JavatoString  
{    
 public static void main(String[] args)     
{         Multiplikation multi = new Multiplikation ();         
multi.toString();     } }


Die Methode (soll einfach den Text ausgeben)

code:
1:
2:
3:
4:
5:
6:
7:
package javatostring;  
public class Multiplikation  
{     
public String toString()     
{         
String name = "Test";        
return name;       }    }



Warum bekomme ich denn keine Ausgabe (also Test) angezeigt?


Vielen Dank



Geschrieben von eulerscheZahl am 13.05.2015 um 13:50:

 

versuche mal
code:
1:
System.out.println(multi.toString());



Geschrieben von Björn am 13.05.2015 um 13:58:

 

Erst einmal danke für deine Antwort. Allerdings dachte ich immer, dass die toString - Methode genau System.out.println() ersetzen sollte?



Geschrieben von eulerscheZahl am 13.05.2015 um 14:02:

 

Nein, toString() wandelt nur in einen String um. Ob du den jetzt auf die Console pinselst, in eine Datei schreibst und über eine MessageBox ausgibst, entscheidest du.
Wenn du toString() überschreibst, kannst du es teilweise auch implizit verwenden, das heißt du musst es nicht extra schreiben.
Du könntest auch einfach schreiben
code:
1:
System.out.println(multi);

dann wird automatisch toString() aufgerufen.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH