Objektorientierung bei Componenten häh?

Status
Nicht offen für weitere Antworten.

Triopoly

Mitglied
So irgendwie ist mein Beitrag nicht angekommen daher.
nochmal


So ich finde etwas ein bischen komisch was mir auch nicht mein Java-Dozent erklären konnte.
Ich denke mal ich habe die Frage unverständlich formuliert.
Hoffe ihr versteht was ich meine.


Wenn ich z.B. ein Objekt als Parameter an eine Methode weitergebe.
Dann wird eine Instanz in der Methode von diesem Objekt erstellt die mit dem ursprünglichen Objekt identisch ist
aber sonst keine relation mehr zum ursprünglichen Objekt hat d.h. wenn ich etwas
an dem "Methoden-Objekt" ändere ändert sich aber nicht im Originalen (Das was an die Methode übergeben wurde)
Außerdem bleiben die Objekte und andere Dinge nur so lange im Arbeitsspeicher wie sie im Methodenrumpf bleiben
(Gut bei return kann mit ihnen weiter gearbeitet werden, aber trotzdem steht dieses dann nicht mehr an der selben Stelle)

So bis hier ist mir eigentlich alles klar.



Aber nun schaut euch das an.





public void setVisible(JPanel p, boolean visible)
{

p.setVisible(false);

}



setVisible(Panel1,false);


So die Methode bringt hier nicht viel da ich direkt die Methode vom JPanle hätte aufrufen können aber das ist eben nur ein Beispiel.
Der Punkt ist das Panel1 nachher unsichtbar wird obwohl doch in der Methode eigentlich gar kein bezug mehr zu Panel1
besteht. Steht in Panel1 eine referenz auf die dazugehörige Componente. z.B. eine Referenz auf das JFrame (this.getComponent()) ?


Bitte um Hilfe
 
B

Beni

Gast
Um es einfach zu sagen: du hast etwas gründlich missverstanden. Da werden keine Kopien erstellt, sondern der Bezug zum Originalobjekt bleibt erhalten.
Anders gesagt: eine Variable wie "p" ist jedliglich ein Wegweiser zu irgendeinem Objekt. Du kannst natürlich verschiedene Wegweiser haben, die zu demselben Objekt zeigen...
 
G

Guest

Gast
In Java werden alle Objekte per Referenz übergeben.
Pass-By-Value gibt es in Java nur bei den primitiven
Typen wie int, short, byte, long etc.
Nicht aber bei Arrays, also byte[], int[] etc. Diese werden
ebenfalls per Referenz übergeben.
 

Triopoly

Mitglied
mhm ok.Dann nochmal die Frage wenn ich etwas in der Methode ändere wird das Objekt z.B. was in der Main
erzeugt wurde auch geändert?

Nur bei primitiven Datentypen verhält es sich dann wie z.B. bei C-Funktionen???

Oh scheiße und das hatte ich die ganze Zeit missverstanden...

Aber danke Jungs
 
G

Guest

Gast
>mhm ok.Dann nochmal die Frage wenn ich etwas in der Methode ändere wird das Objekt z.B. was in der Main
>erzeugt wurde auch geändert?
Ja

>Nur bei primitiven Datentypen verhält es sich dann wie z.B. bei C-Funktionen???
Jajn. Abgesehen davon, dass es in C keine Objekte gibt, werden bei
C++ alle möglichen Typen der Parameterübergabe unterstützt.
Diejenige, die Java entspricht, sieht ungefähr so aus:

Code:
#include <iostream.h>

class Obj {
  private:
    int i;
  public:
    Obj(int i): i(i) {}
    void print() { cout << i << endl; }
    void setI(int i) { this->i = i;}
};

void foo(Obj *obj)
{
  obj->print();

  obj->setI(10); // Ändert den "Inhalt" des Objekts, das übergeben wurde

  obj = new Obj(5); // Weist eine andere Referenz zu; keine Auswirkung auf main(), da
                    // obj eine Kopie der Referenz ist.
}

int main() {

  Obj *obj = new Obj(1);
  foo(obj); // Ausgabe 1
  foo(obj); // Ausgabe 10, da in foo geändert (siehe setI in foo(...) )

  return 0;
}
 

Bleiglanz

Gesperrter Benutzer
In Java werden alle Objekte per Referenz übergeben.
Pass-By-Value gibt es in Java nur bei den primitiven
Typen wie int, short, byte, long etc.
Nicht aber bei Arrays, also byte[], int[] etc. Diese werden
ebenfalls per Referenz übergeben.
Lass dich nicht verwirren, das stimmt in dieser Form eigentlich nicht (bzw. ist die Bedeutung von "by value" und "by reference" in Java etwas durcheinander)

man könnte genauso gut sagen:

es werden ALLE variablen IMMER "by value" übergeben, es gibt in Java überhaupt keine "by ref"!

dabei musst du nur beachten, dass bei einer "Objekt"-Variable

Object x = new Object();

in dieser Form der WERT von x eine Referenz auf eine Instanz von (d.h. der Wert ist die Objektreferenz, und dieser Wert wird bei Funktionsaufrufen übergeben)

allerdings gibt es in Java kein "Dereferenzieren", x wird immer automatisch dereferenziert, man kann an den Wert (= die Referenz, der Zeiger) überhaupt nicht herankommen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
L Componenten im JFrame an genaue stelle verschieben. AWT, Swing, JavaFX & SWT 2
V Swing Componenten Array AWT, Swing, JavaFX & SWT 3
B Swing JMenu zwischen anderen Componenten AWT, Swing, JavaFX & SWT 4
J Swing Componenten übereinander platzieren. AWT, Swing, JavaFX & SWT 17
M SWT SWT Componenten auf GLCanvas zeichnen AWT, Swing, JavaFX & SWT 3
earlgrey_tea GridBagLayout Componenten proportional vergößern AWT, Swing, JavaFX & SWT 12
L LayoutManager Componenten über verfügbaren Platz strecken AWT, Swing, JavaFX & SWT 7
L Swing Serverbrowser, aber welche componenten? AWT, Swing, JavaFX & SWT 2
H Mit for-schleife die Componenten eines Frames verändern AWT, Swing, JavaFX & SWT 5
H SWT Breite von componenten zu bestimmen AWT, Swing, JavaFX & SWT 2
T JFrame Componenten Problem AWT, Swing, JavaFX & SWT 17
T Swing JSplitPane Componenten ausrichten AWT, Swing, JavaFX & SWT 4
lumo Swing Componenten ersetzen AWT, Swing, JavaFX & SWT 2
L Swing Kommunikation zwischen JMenuBar und anderen Componenten AWT, Swing, JavaFX & SWT 2
E Im Frame alle Componenten abrufen AWT, Swing, JavaFX & SWT 2
R Wie kann ich programmatisch Clicks auf Componenten ausfuehren? AWT, Swing, JavaFX & SWT 26
S Standpunkt von Componenten frei bestimmen AWT, Swing, JavaFX & SWT 10
R Thumbpanel bzw. Layout das Componenten in einem Grid anordnet ..? AWT, Swing, JavaFX & SWT 13
D verschieden große Componenten in einem JPanel? AWT, Swing, JavaFX & SWT 2
A Swing: Componenten in einem deaktivierten JPanel AWT, Swing, JavaFX & SWT 2
R HTML Hintergrund für Swing - Componenten AWT, Swing, JavaFX & SWT 2
G Suche 2 Componenten: Splitpane ausblenden / Stecknadel AWT, Swing, JavaFX & SWT 2
G SystemTray BubbleInfo an anderen Componenten anzeigen AWT, Swing, JavaFX & SWT 6
J durchsichtige componenten AWT, Swing, JavaFX & SWT 3
S Componenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
R Componenten eines JFrames updaten AWT, Swing, JavaFX & SWT 11
thE_29 TableRenderer und JPanel => Abfrage auf Componenten Posit AWT, Swing, JavaFX & SWT 2
S Mehere Componenten setEnabled(false) in JToolBar AWT, Swing, JavaFX & SWT 4
M componenten im jframe erst nach fensterveränderung sichtbar AWT, Swing, JavaFX & SWT 2
S verhindern von drag-n-drop von swing componenten AWT, Swing, JavaFX & SWT 2
D Componenten Problem - aktualisieren nach hinzufügen AWT, Swing, JavaFX & SWT 2
V JTable mit mehreren Componenten in einer Spalte ? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben