classTelefonEintrag{String name;// Name einer PersonString telefon;// ihre TelefonnummerTelefonEintrag(String name,String telefon ){this.name = name;this.telefon = telefon;}}classTelefonBuch{TelefonEintrag[] telefonbuch;TelefonBuch()// Konstruktor{
telefonbuch =newTelefonEintrag[5];// das Telefonverzeichnis mit Daten füllen....}TelefonEintragsuchen(String targetName )//<<<<<<<<<<<<<<<<<<<<<<1.{// verwenden Sie lineare Suche, um den Zielnamen zu finden....}}classTelefonBuchTester{publicstaticvoid main (String[] args ){TelefonBuch telebuch =newTelefonBuch();// suchen for "Violet Smith"TelefonEintrag eintrag = telebuch.suchen("Violet Smith");//<<<<<<<<<<<<<<<<<2.if( eintrag !=null)System.out.println( eintrag.name +": "+ eintrag.telefon );elseSystem.out.println("Namen nicht gefunden");}}
Die Zeilen zu denen ich Fragen habe, habe ich mit //<<<<1. und //<<<<2. markiert.
1.: Was für eine Art von Methode ist das? Ich habe hier etwas erwartet wie void suchen, hier steht jedoch der Klassenname einer anderen Klasse, was hat dies somit genau zu bedeuten? (Da keine rechteckigen Klammern, ging ich nicht davon aus das es sich um das Array handelt)
2.: Ich hätte auf der rechten Seite vom = einen Konstrukter erwartet, hier steht jedoch eine methode das auf das Objekt telebuch angewandt wird. Wie habe ich somit die linke Seite zu interpretieren?
1. Das ist der Rückgabewert. Bei void (welches du anscheinend gewöhnt bist), wird nichts zurückgegeben.
public int getNumber() ist zB eine Methode die eine Ganzzahl zurückgibt (Rückgabewert int). Deine markierte Methode hat also als Rückgabewert ein Objekt vom Typ "TelefonEintrag".
2. Aus der 1. Frage ergibt sich im Prinzip auch das 2. Die suchen-Methode gibt ein Objekt vom Typ "TelefonEintrag" zurück. Dieser Rückgabewert wird dann der Variablen 'eintrag' zugewiesen.
Da der Rückgabewert ein Objekt vom Typ "TelefonEintrag" ist, bedeutet dies auch das er die selben Eigenschaften besitzt wie ein Objekt das mittels eines Konstruktors erstellt wurde + die return Daten der Methode?
Kurze Antwort: ja.
Die suchen-methode soll offenbar das array TelefonEintrag[] durchgehen und eineTelefonEintrag Instanz mit passendem Namen zurückgeben. Diese Instanz ist selber auch nur durch einen schnöden Konstruktoraufruf entstanden, der zum Zeitpunkt der Suche aber schon längst "gelaufen" ist.
Dieser Konstruktoraufruf geschieht somit automatisch im Hintergrund?
Ist dies dann ein Default Konstruktor?
Und was ist wenn ich einen Konstruktor mit Parameterübergabe nur angegeben hätte und keinen weiteren Default Konstruktor.
So würde übrigens der Inhalt der Methode suchen aussehen. Da der Rückgabetyp ja ein Objekt ist hätte ich eigentlich als return auch ein Objekt erwartet.
Nein. TelefonEintrag[] muss vorher explizit mit TelefonEintrag-Instanzen befüllt werden. Für jede TelefonEintrag-Instanzen muss der Konstruktor von TelefonEintrag aufgerufen werden. Das ganze passiert offenbar in dem Codeabschnitt, den du in deinem ersten Post mit // das Telefonverzeichnis mit Daten füllen abgekürzt hast.
Stiiiimt telefonbuch[j] referenziert ja ein Objekt von TelefonEintrag. In dem Skript das ich verfolgt habe kam das auf einmal so plötzlich ohne Erklärung das ich (auch wie gesagt, durch die Namensgebungen) total verwirrt war. Danke euch! )
Ja genau, mir war in dem Moment noch nicht klar das telefonbuch[j] auf ein Objekt verweist. Habe einen Tag vorher erst mit Arrays angefangen gehabt, bin da dann ein bischen durcheinander gekommen Aber ich glaube es nun zu verstehen
Aber ich lerne seit 100 Seiten über Referenzen das telefonbuch[j] eine Referenz auf ein Objekt ist oO
Bitte sag mir nicht das war alles umsonst 0(-.-)0
Unser Dozent zieht uns immer die Ohren lang wenn jemand bei einem Ausdruck wie
Telefonbuch t1 = new Telefonbuch();
behauptet t1 sei ein Objekt. Sondern nur die Referenz dazu. Und bei String objekten war es zumindest so das zb telefonbuch[1] die Referenz auf den Slot im Array ist der ein String Objekt enthält
Aber ganz allgemein wird ein Array so bezeichnet: Unter einem Array in Java versteht man ein Feld oder Container, das in der Lage ist, mehrere Objekte vom gleichen Typ aufzunehmen und zu verwalten!
Da Strings unveränderbar sind, wäre es doch dann eigentlich nicht möglich bei einem String Array einem Slot einen neuen String zuzuweisen, da man ja somit das StringObjekt ändern würde. Ich dachte jedoch das dabei der alte String zu Ausschuss wird und der Garbage Collector sich um ihn kümmert.
Bin aber noch ziemlich Neuling in java und komme bei manchen Sachen noch durcheinander
Muss an diesem Wochenende meinen Terminkalender abgeben den ich für das Testat programmieren muss, werde mich daher sicherlich noch ein paar mal hier im Forum melden müssen
Mir wurde jetzt nochmal gesagt das ein ausdruck wie waerme nur auf den slot des Arrays verweist, (hier i) aber der Wert bzw das Objekt nicht waerme ist... Nun bin ich verwirrt :/
Mit meinem momentanen Wissensstand meinte ich zu wissen das String-Objekte unveränderbar sind und wenn waerme[0] nicht nur den Slot des String-Objektes referenziert, sondern dieses ist, erschien es mir unlogisch das es sich dann hier ändert. Vielleicht versteht ihr jetzt besser was mich so verwirrt, vielleicht verwirre ich euch damit aber auch nur umso mehr
Ich akzeptiere jetzt einfach mal das array[ i ] das Objekt an sich ist anstatt die Referenz und gehe damit davon aus das es wohl Regeln gibt in denen Strings doch änderbar sind, wie z.B. wenn sie Teil eines Arrays sind. Ach ich habe doch keinen Plan
EDIT: Der Texteditor sieht anscheinend eckige Klammern als Code für den Texteditor an, deswegen wurden die Array Klammern erst nicht mitgedruckt. Dachte gerade eben ich habe sie nochmal vergessen (Macht ja auch Sinn, da das einbetten von Codes durch eckige Klammern dargestellt wird)
In deinem Code erzeugst du ein neues String-Objekt und packst es in das array. Das alte Stringobjekt mit dem Inhalt "zehn grad" wird nirgendwo mehr referenziert und dürfte alsbald vom garbage collected abgeräumt werden.