unklarheiten mit schlüsselwörtern

Status
Nicht offen für weitere Antworten.
G

gast

Gast
hallo

ich beschäftige mich gerade mit java, und da gibt es paar sachen die mir noch immer unklar sind.

1. der konstruktor dient um die instanzvariablen zu initialisieren. wozu dient mir aber dieser code. speziell gemeint ist jetzt das this.

Code:
  public Entry(String firstName, String lastName, int number) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.number = number;
  }


2. wenn ich die methoden
Code:
getxxx()
und
Code:
setxxx()
habe
sind das spezielle methoden oder wurde das get und das set als freiwilliger name gewählt

3. was bedeutet genau das
Code:
toString()


hoffe auf eure hilfe

mfg
 
R

Roar

Gast
1. this verweist auf die aktuelle instanz this.var != var
2. ja, methodennamen entstehen ganz freiwillig und werden dir von niemandem aufgezwungen, die methode kann auch herMitKartoffelsalat() heißen anstatt getKartoffelsalat()
3. das ist eine methode wie jede andere auch? http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#toString()
 
B

bygones

Gast
der Konstruktor legt die Initiierung einer Instanz fest. Mit ihm erzeugst du dir Objekte der Klasse.

das this wird dann verwendet, wenn die Instanzvariablen den gleichen Namen haben, wie die Parameternamen. In deinem Fall heißen z.b. sowohl die Instanz- als auch Parametervariable firstname. Damit der Compiler weiß welches die Instanzvar und welches der Paramter ist, bekommt die instanzvariable this vorangestellt.

getXXX und setXXX sind Namenskonventionen, XXX steht für die Variable, die manipuliert werden soll. Also getFirstName oder setFirstName. Somit wurden sie irgendwann mal frei gewählt.

toString ist eine spezielle Methode, die jede Klasse von Object erbt. Sie dient dazu eine Stringrepräsentation deines Objekts anzuzeigen. Überschreibst du sie nicht, so wird die Methode aus Object aufgerufen, die eine spezielle Kodierung hat, dir aber nichts über dein Objekt sagt

z.b.
Code:
public String toString() {
   return firstName + " " + lastName;
}
 

swerflash

Aktives Mitglied
1.Wenn du zb mit vielen Klassen arbeitest, können paar Klassen gleiche Variablen haben, die aber unterschiedliche Werte haben zb Name. In einer Klasse ist Name ein String zb "Test", in anderen Klasse ist Name ein int Wert zb 2. Und mit this, sagst du deinem Programm, dass du Variable Name meinst, die sich in dieser Klasse befindet, in der du gerade arbeitest.
2. Ja, aber die Programmierer haben sich geeignet set und get zu verwenden, damit man das leichter lesen kann.
3. Damit wandelst du zb eine Zahl in einen String um.
 
B

bygones

Gast
swerflash hat gesagt.:
1.Wenn du zb mit vielen Klassen arbeitest, können paar Klassen gleiche Variablen haben, die aber unterschiedliche Werte haben zb Name. In einer Klasse ist Name ein String zb "Test", in anderen Klasse ist Name ein int Wert zb 2. Und mit this, sagst du deinem Programm, dass du Variable Name meinst, die sich in dieser Klasse befindet, in der du gerade arbeitest.
etwas unklar gesagt... das this hat im grunde nichts mit anderen Klassen zu tun....

swerflash hat gesagt.:
3. Damit wandelst du zb eine Zahl in einen String um.
das stimmt leider gar nicht - siehe posts oben
 

Bleiglanz

Gesperrter Benutzer
mal zu 2:

Warum
Code:
getButter
setButter
und nicht
Code:
hermitDemButter
dahastduDenButter
?

Obwohls tatsächlich völlig egal ist - das sind ja erstmal ganz normale Methoden mit völlig willkürlichen namen - gibts doch einige Gründe set/get zu verwenden

1. Lesbarkeit (alle haben sich dran gewöhnt)

2. Viele Tools, Hilfsprogramme und Frameworks werten Java-Objekte über Reflection aus und würden bei getButter/setButter eine "Property" namens "butter" erkennen
(das ist manchmal praktisch)

3. Viele IDEs können die getter/setter "auf Knopfdruck" aus den Variablen generieren

4. In der guten alten "JavaBeans" Zeit war die Namenskonvention tatsächlich mal sowas wie eine Spezifikation, aber das ist lange her:)
 

swerflash

Aktives Mitglied
Wenigstens 2 stimmt :)

hmm ich dachte ich habe toString() verwendet um etwas in String umzuwandeln und dann auf der Konsole auszugeben. Habe mich wahrscheinlich geirrt oder mit etwas verwechselt, bin selber noch Anfänger :)
 
B

bygones

Gast
swerflash hat gesagt.:
hmm ich dachte ich habe toString() verwendet um etwas in String umzuwandeln und dann auf der Konsole auszugeben. Habe mich wahrscheinlich geirrt oder mit etwas verwechselt, bin selber noch Anfänger :)
das stimmt schon :)

mit toString gibst du einfach die Stringrepräsentation deines Objektes wieder.... es wird nur nich alleinig verwendet, um eine Zahl in einen String zu verwandeln
 
R

Roar

Gast
es gibt statische String.toString() methoden die genau das machen und auch statische toString()s in allen wrapper klassen, die toString() hat dann nur nix mehr mit der aus Object zu tun :)
 
G

Guest

Gast
hallo

was sind genau namenskonvetionen

hat es bei den konstruktoren einen vorteil wenn ich die gleichen instanz- und parameternamen verwende.
so ist es doch nur unleserlicher
 

Bleiglanz

Gesperrter Benutzer
Anonymous hat gesagt.:
hat es bei den konstruktoren einen vorteil wenn ich die gleichen instanz- und parameternamen verwende.
so ist es doch nur unleserlicher

Vorteil: Lesbarkeit für den Aufrufer (!) der Funktion und in der Javadoc

Nachteil: ein vergessenes this führt zum no-op varname=varname, ein manchmal schwer zu erkennender Fehler

als Anfänger solltest du vielleicht Parameternamen und Membervariablennamen immer unterscheiden :)
 

mischer

Aktives Mitglied
Stimmt, find ich auch äußerst unübersichtlich.

Für die Parameter benutze ich folgende Namensgebung:

Code:
public Entry(String aFirstName, String aLastName,int aNumber)
{
    firstName = aFirstName;
    lastName = aLastName;
    number = aNumber;
}

... um mal dein Beispiel aufzugreifen. Das "a" steht hierbei für Argument. Damit hast du es sauber getrennt und musste Dir trotzdem nicht immer nen sinnlosen Namen ausdenken.

Ist halt Geschmackssache

mfg mischer
 
G

Gast

Gast
Spricht Dein Konstuktor jetzt auch die this. Variablen an, obwohl sie nicht vorweggestellt sind?
 
B

bygones

Gast
Gast hat gesagt.:
Spricht Dein Konstuktor jetzt auch die this. Variablen an, obwohl sie nicht vorweggestellt sind?
es gibt eigentl. keine "this" variablen. Was du wahr. meinst sind die Instanzvariabeln....

klar - bsp firstName ist die Instanzvariable

im ersten Fall der hier besprochen wird heißt der parameter auch firstName. Ergo musst du das this. voranstellen, damit der Compiler unterscheiden kann zw. Instanzvariable und Paramter

bei mischers Lösung braucht man kein this, da die Namen unterschiedlich sind und somit eindeutig ist, was Instanzvariable ist und was parameter
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben