Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Aufgerufene Methode Inhalt der übergebenen Referenz
ich verzweifle gerade an einem Kapitel des Buches "Jetzt lerne ich Java".
Variablen von Klassen werden als Referenzen an Methoden übergeben.
Die aufgerufene Methode arbeitet daher mit dem gleichen Objekt wie die
aufrufende Methode. Wenn Sie nicht möchten, dass die aufgerufene
Methode den Inhalt einer übergebenen Referenz verändert, deklarieren Sie
den zugehörigen Parameter als final.
public class Methodentest {
public static void main( String[] args ) {
Beispiel hugo = new Beispiel();
Dummy uebergabe = new Dummy();
int Ergebnis;
double wert = 10.5;
uebergabe.wert = 100;
System.out.println(" Parameter vor Aufruf:\t"+ wert + "\t" + uebergabe.wert);
ergebnis = hugo.machWas (wert , uebergabe) ;
System.out.println(" Parameter nach Aufruf:\t"+ wert + "\t" + uebergabe.wert);
System.out.println(" Ergebnis: \t"+ ergebnis);
}
}
Java:
public class Beispiel {
int wert;
int machWas(double para1, Dummy para2) {
// ...Anweisungen ...
para1 = 0;
para2.wert = 50;
// ein Rückgabewert
return 0;
}
}
Java:
public class Dummy {
int wert;
}
Egal was ich versuche die Ausgabe ist immer:
Parameter vor
Aufruf: 10.5 100
Parameter nach Aufruf: 10.5 50
Ergebnis: 0
Wie kann ich Verhindern das durch Aufruf der Methode machWas der Inhalt meines Objektes Dummy verändert wird?
Wenn Sie nicht möchten, dass die aufgerufene
Methode den Inhalt einer übergebenen Referenz verändert, deklarieren Sie
den zugehörigen Parameter als final.
public class Person {
private String name;
private Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Person p = new Person("P");
printPerson(p);
}
public static void printPerson(final Person p) {
System.out.println(p.getName());
// p = new Person(); das geht nicht
p.setName("X"); // das geht
}
}
Willst du jetzt wirklich vermeiden, das name geändert werden kann, kannst du die Objekt Variable final setzen... vielleicht war das im Buch gemeint
Java:
public class Person {
private final String name;
private Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public static void main(String[] args) {
Person p = new Person("P");
printPerson(p);
}
public static void printPerson(final Person p) {
System.out.println(p.getName());
// p = new Person(); das geht nicht
p.name = "X"; // das geht auch nicht mehr..
}
}
Variablen von Klassen... habs gerade im Buch nachgeschlagen... irgendwie seltsam ausgedrückt...