Verständnisfrage Objekt Getter Setter

T

Trjavnamen

Bekanntes Mitglied
temi du wirfst 2 Ordner in ein Ordner 1. ordner eins besteht aus Pakage applicationZ Main.java SampleController. java und sample.fxml
2. Odner 2 besteht aus applicationY Main.java MyGlas.java SampleController. java und sample.fxml. 3.Die zeile MyGlas glas =new MyGlas();steht in SampleController im zweiten Ordner. 4. Im ersten ordner steht im SampleController ohne es in eine class gepackt alles was in MyGlas steht nur nicht public class MyGlas. Was man ja oben sieht. Komischer Weise hat sich mein Problem daraus ergeben das ich in meiner uhrsprüglichen Programmierung
Java:
package applicationY;

privat class MyGlas {// KLasse verstecken?

   privat Double vollesGlas= new Double(0.1);//zugriff verstecken
    privat Double getvollesGlas () {return vollesGlas;      //}zugriff verstecken
    privat void setvollesGlas(Double  vollesGlas   )          {this.vollesGlas=vollesGlas;      }//zugriff verstecken
}
was zu folge hatte
Java:
public class SampleController {
    MyGlas glas = new MyGlas();
kein Erfolg in den folgeMethoden zeigte. wenn ich dort dann glas.vollesGlas eintippte; kamm eine Fehlermeldung die dich aufforderte "lege eine Variable an" Was soviel wie bedeutet: "Das verstehe ich nicht"
wenn ich aber
Java:
package applicationY;

public class MyGlas {

   public Double vollesGlas= new Double(0.1);
   public Double getvollesGlas () {return vollesGlas;      }
   public void setvollesGlas(Double  vollesGlas   )          {this.vollesGlas=vollesGlas;      }
}
in der klasse MyGlas schreibe und im
Java:
public class SampleController {
    private MyGlas glas = new MyGlas();
kann ich den Wert glas.vollesGlas =10 in einer Methode setzen und in einer anderen Methode mit glas.vollesGlas mit dem gesetrzten wert abrufen. Und das ist der selbe Efeckt wie im Ordner 1 im SampleController zu schreiben this.Gehalt =10.. Ist die Zeile private MyGlas glas = new MyGlas(); dann der Zweck des versteckens damit erreicht? Und ist das das der Autor eigendlich gemeint hatte?
 
Zuletzt bearbeitet:
temi

temi

Top Contributor
Komischer Weise hat sich mein Problem daraus ergeben das ich in meiner
Daran ist überhaupt nichts komisch. Sowohl die Instanzvariable als auch die Getter/Setter der Klasse MyGlas sind privat, darum kannst du darauf auch nicht zugreifen.

In #50 steht, wie es geht, ich wiederhole das jetzt nicht noch einmal. Lies dort einfach nach.
 
T

Trjavnamen

Bekanntes Mitglied
temi #50 nur eines privat machen also so?
Java:
package applicationY;

public class MyGlas {

   private Double vollesGlas= new Double(0.1);// nur das hier private machen
   public Double getvollesGlas () {return vollesGlas;      }
   public void setvollesGlas(Double  vollesGlas   )          {this.vollesGlas=vollesGlas;      }
wenn ich das mache dann ist mein Anfangsproblem wieder da.
 
T

Trjavnamen

Bekanntes Mitglied
Eclipse meckert und sagt 2 quiks aviabel change visible of vollesGlas create getter and setter for vollesGlas
 
temi

temi

Top Contributor
Eclipse meckert und sagt 2 quiks aviabel change visible of vollesGlas create getter and setter for vollesGlas
Du hast doch Getter und Setter, du musst sie halt einfach verwenden. Steht aber auch im zweiten Satz von #50.

Dir etwas zu erklären ist ähnlich wie mit einer Wand zu reden...

Schau dir die Beispiele aus #34 und #44 an. Das sind einfache Grundlagen, wenn du das verstanden hast, dann hast du keine Probleme mehr. Wenn du Frage zu den Beispielen hast, dann stelle sie.
 
T

Trjavnamen

Bekanntes Mitglied
ja aber es passiert nichts glas.getvollesGlas wird unterstrichen und glas.setvollesGlas(SliFuellstand.getValue())ist nicht unterstrichen aber es läst sich garnichts damit anstellen sogar direkt dahinter System.out.println(glas.vollesGlas+"sli") wird unterstrichen.
 
T

Trjavnamen

Bekanntes Mitglied
Wenn ich das programm au8sführe dann kommt
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470)
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:941)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$4(WinApplication.java:185)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
... 31 more
Caused by: java.lang.Error: Unresolved compilation problems:
getvollesGlas cannot be resolved or is not a field
Syntax error on token "(", delete this token
The field MyGlas.vollesGlas is not visible
The field MyGlas.vollesGlas is not visible

at applicationY.SampleController.onMoClifuellstand(SampleController.java:60)
... 41 more
 
temi

temi

Top Contributor
ja aber es passiert nichts glas.getvollesGlas wird unterstrichen und glas.setvollesGlas(SliFuellstand.getValue())ist nicht unterstrichen aber es läst sich garnichts damit anstellen sogar direkt dahinter System.out.println(glas.vollesGlas+"sli") wird unterstrichen.
glas.getvollesGlas ist kein Methodenaufruf, sondern der Versuch auf das Feld (= Instanzvariable) "getvollesGlas" zuzugreifen. Ein Methodenaufruf hat immer eine Klammer, entweder leer oder mit Parametern darin => glas.getvollesGlas();

Das steht aber auch in der Fehlermeldung
Code:
Caused by: java.lang.Error: Unresolved compilation problems:
getvollesGlas cannot be resolved or is not a field

Du bist dir sicher, dass du die Grundlagen beherrscht und du soweit bist, um mit JavaFx beginnen zu können?

Darf ich antworten?

Nein, bist du nicht. Deine Probleme sind sowas von Grundlagen. Mehr Grundlagen geht fast nicht mehr.

Und mein Tipp dazu: Lass erst mal alles mit JavaFx weg. Das macht es nur unnötig kompliziert. Nimm dir einfache Klassen, wie die aus den Beispielen hier im Thema und experimentiere damit herum. Ganz einfach in der main(). Ändere die Zugriffsmodifikatoren und probiere was passiert oder nicht mehr geht und welche Fehlermeldungen auftauchen.
 
Zuletzt bearbeitet:
T

Trjavnamen

Bekanntes Mitglied
temi dein Beispiel #34 wirft das selbe problem aus . egal ob ich es in eine Datei oder in mehren Dateien schreibe. er meckert bei foo denn ich glaube deine Kenntnissse sind nicht vollständig. Denn wenn ich eine Instanz foo aus Foo generiere kan man keine Methode
public foo getFoo() {
return foo;
}
deklarieren. UNd wenn ich zwei Instanzen aufrufe dann geben sie nur das wieder was in ihnen steckt die 42 und die Anweisung addiere5 in main hast du nicht die 42 geändert. Versuche mal
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
temi dein Beispiel #34 wirft das selbe problem aus . egal ob ich es in eine Datei oder in mehren Dateien schreibe. er meckert bei foo denn ich glaube deine Kenntnissse sind nicht vollständig. Denn wenn ich eine Instanz foo aus Foo generiere kan man keine Methode
public foo getFoo() {
return foo;
}
deklarieren. UNd wenn ich zwei Instanzen aufrufe dann geben sie nur das wieder was in ihnen steckt die 42 und die Anweisung addiere5 in main hast du nicht die 42 geändert. Versuche mal
Da gibt's einfach nur einen kleinen Tippfehler (public foo getFoo... statt public *F*oo getFoo...), das liegt nicht an mangelnden Kenntnissen und auch nicht an deiner vermuteten Ursache.

Ich kann nur wiederholen, was schon so einige Male gesagt wurde: Fang noch mal ganz von vorne an. Nichts was du jetzt erstmal machst sollte über den Inhalt einer einzigen Main-Methode hinaus gehen.
 
B

berndoa

Bekanntes Mitglied
Gegeben ist folgende Testkonstruktion:
Java:
package meintest4;

public class test4 {
    public Double w1= new Double(0.1d);
    public Double w2 = new Double(0.1d);
    public Double w3= new Double(0.1d);
    public Double w4= new Double(0.1d);
    public Double w5= new Double(0.1d);
    public Double w6= new Double(0.1d);



public Double getw1() {return  w1;     }
public Double getw2() {return  w2;     }
public Double getw3() {return  w3;     }
public Double getw4() {return  w4;     }
public Double getw5() {return  w5;     }
public Double getw6() {return  w6;     }


public void setw1(Double  w1   )               {this. w1=w1;     }
public void setw2(Double  w2   )               {this.  w2=w2;     }
public void setw3(Double  w3   )               {this.  w3=w3;     }
public void setw4(Double  w4   )               {this.  w4=w4;     }
public void setw5(Double  w5   )               {this.  w5=w5;     }
public void setw6 (Double  w6   )               {this.  w6=w6;     }




}
Java:
package meintest4;
import meintest4.test4;
public class Main {

    public static void main(String[] args) {
        rub1();
        rub2();


    }
    private static void rub1(){test4 m2 =new test4();
        m2.setw1(10000.00);
        }

private static  void rub2(){test4 m2 =new test4();
m2.getw1();
    System.out.print(m2.w1);
            }
}
Was mache ich falsch .Es sollte doch 10000.00 ausgegeben werden aber ausgegeben wird 0.1
in rub1 setze ich doch den Wert und inrub2 frage ich ihn doch wieder ab oder? Oder wie rufe ich den wert den wieder ab?
Viele Leute haben ziemlich viel gesagt und sicherlich sehr Recht und vermutlich hat schon wer drauf hingewiesen in ausführlicherer Form.

Aber dein anfängliches Problem hat einen simplen Hintergrund:


Java:
private static void rub1(){
  test4 m2 =new test4();
  m2.setw1(10000.00);
 }
private static  void rub2(){
test4 m2 =new test4();
m2.getw1();
System.out.print(m2.w1);
}

Gehen wir mal durch was da passiert.
In der Methode ub1 wird zuerst ein Objekt der Klasse test4 definiert und mit dem Namen m2 versehen.
Dieses Objekt hat due Attribute w1-w6 die aufgrund des Konstruktors anfänglich alle den Wert 0.1 liegen. einfach weil du es so ja in deienr test4 klasse definiert hast.

Als nächstes rufst du die methode setw1 des objekts m2 auf. dieses setzt wie gewünscht im objekt m2 den wert des attributs w1 auf 10000.
Also in m2 ist nun w1=10000 und alle anderen nach wie vor 0.1

und damit ist deine methode zu ende.
Da das objekt m2 in der rub1 methode erzeugt wurde, stirbt es auch mit dem ende der methode.
heißt, willst du ein objekt m2 haben, das auch noch nahc em aufruf der methode überlebt, müsstest du es ausserhalb der methode erzeugen.
und dann in einer methode die gewünschten manipulationen machen.
dazu später mehr.

machen wir mal weiter, denn hier hat sich ein doch recht dramatischer fehler eingeshcließen.
auch in rub2 wird eingangs ein test4 objekt namens m2 erzeugt, gleiches vorgehen wie oben, nur dass die objekte rein gar nix miteinander zu tun haben.
nur dass du zufällig dem nagelneuen objekt den selben namenwie dem ehemaligen objekt gegeben hast.

gut, dann rufst du die getw1 methode des objekts m2 auf.
schön und recht, die methode tut ihr nötiges und gibt dir den wert 0.1 zurück (denn m2 wurde ja gerade erst mit den standardwerten erzeugt und nicht verändert. also ist w1 nach wie vor auf 0.1)
nun tust du aber ziemlich genau gar nix mit diesem wert, insofern hatte der befehl keinerlei wirkung oder sinn.
in der nächsten zeile lässt du nun den aktuellen w1 wert drucken, weshalb naheliegenderweise hier 0.1 ausgedruckt wird.
was natürlich aber die frage aufwirft:
Warum greifst du hier direkt auf das Attribut zu, statt die get mehode zu nutzen?


sinn von get methoden ist ja gerade dass man nicht, so wie du, einfahc über m2.w1 direkt auf das attribut zugreift, sondern eine methode aufruft, die einem den wert gibt.

So im Vergleich wie wenn ich selbst etwas lese vs wenn jemand anders etwas liest und mir dann verbal davon erzählt.

hole ich mir die info selbst oder lasse ich sie mir bringen, sinnbildlich.

hat sicherheitsgründe, warum man das so macht.
so als vergleich wie in der bank.

klar könnte ein kunde auch eifnach selbst in den banktresor reingehen und sich den gewünschten abhebebetrag abholen.
nur hat da die bank berehctigte angst dass derjenige lange Finger kreigt und noch mehr mitgehen lässt.

Deshalb macht man es indirekt, du teilst dem bankheinie mit was du willst und der gibt es dir dann.

zu deiner aufgabe zurück:
damit du überall das selbe objekt hast das du weiterverwenden kannst, musst du dies so weit oben wie möglich definieren.
Wenn du ein objekt innerhalb einer methode definierst, gibt es dasauch nur in der methode und kann ausserhalb oder in einer anderen methode auch nicht aufgerufen werden.

musst es also möglichst aussen definieren und kannst dann aber methoden haben, die aufgerufen werden, innerhalb der sachen des objekts verändert werden.

Java:
class test{
public static void main(String[] args){
  objektklasse O=new objektklasse();
  methode1();
  methode2();
}
    
public void methode1(){
O.setw1(666);
}
public void methode2(){
O.setw2(69);
System.out.println("w1 und w2 addiert ergibt: ");
System.Out.println(O.getw1()+O.getw2());
}

}

Nur so als grobes Beispiel.
du erzeugst in der main klasse ein objekt O einer wie auch immer gearteten objektklasse.
dann rufst du die 2 methoden auf.

in der ersten methode wird wiederum eine methode jenes objekts aufgerufen, halt setw1(666).
in deiner aufgabe würde dies eben das w1 attribut von O auf 666 setzen.

damit ist die erste methode rum.
wohlgemerkt hat das O objekt nun nach ende der aufgerufenen methode nach wie vor den veränderten w1 wert!
denn das O objekt "exisitert" ausserhalb der methode.

genauso wird die 2. methode aufgerufen, die mittels ihrer eigenen methoden erst das w2 atttribut auf 69 setzt.
und anschließend mal noch mittels der 2 get methoden die summe aus w1 und w2 bestimmt und das ausgibt.

und ja, nach ende der aufgerufnenen methode2 hat das objekt O die attribute w1=666 und w2=69 wie gewünscht.

und im übrigen siehst du auch hier wie man setter und getter richtig verwendet:
1. man benutzt eben nicht O.w1, sonder nutzt die getw1 methode, die einem den Wert von w1 liefert.
den lässt man dann auch nicht ungenutzt verfallen 8weil wozu hatte man es auch sonst aufgerufen wenn mans nicht benutzt?)
sondern kann es wie hier bspw. mit dem rückgabewert der getw2 methode addieren und das ergebnis ausdrucken lassen.
oder irgendwas anderes damit machen.
 
T

Trjavnamen

Bekanntes Mitglied
berndoa das ist das beste Beispiel. Und heute habe ich rumprobiert und bin zu dem selben Ergebnis gekommen.
Ich habe folgende 2 classen
Starterklasse:
package meintestz;

public class MainZ { //bemerkung: kein import notwendig

    public static void main(String[] args) {MyGlas glass = new MyGlas();System.out.println (glass.getBvollesGlas()+"  Z5");System.out.println (glass.getcvollesGlas()+"  Z5");
    glass.setBvollesGlas(55.);//Hier habe ich den wert 55. neu gesetzt wenn ich die Klammer leer
    //lasse wird der wert der vordefinierten Klasse 40.1 beibehalten.
    glass.setcvollesGlas(33.);//neuer wert vorher 40.3
    System.out.println (glass.getBvollesGlas()+"  Z9");System.out.println (glass.getcvollesGlas()+"  Z9");//glass.get
    glass.sagdenFuellstand();//Die void sagdenFuellstand in Myglas wird ausgeführt


    }
public void sagdenmuellstand(){MyGlas glass = new MyGlas();//Dieses wird durch MyGlas ausgeführt
//durch den Aufruf in die Instanz maiz in MyGlas void sagdenFuelsstand
System.out.println (glass.getcvollesGlas()+"  Z16");
System.out.println (glass.getBvollesGlas()+"  Z17");
glass.setBvollesGlas(120.);
    System.out.println (glass.getBvollesGlas()+"  Z19");
    glass.setBvollesGlas(glass.getBvollesGlas()-glass.getcvollesGlas());

System.out.println (glass.getBvollesGlas()+"  Z22");

}
}
und
zweite .java datei:
package meintestz;
Man beachte obwohl

public class MyGlas { //Hier sieht man das der Anfangsobjekt private ist wenn keine änderungen gemacht werden ist das der Standartwert
    private Double BvollesGlas= new Double(40.1);//er wird in Fenstern angezeigt wenn man xxx.getBvollesGlas() abfragt.
public Double getBvollesGlas () {return BvollesGlas;      }
public void setBvollesGlas(Double  BvollesGlas   )          {this.BvollesGlas=BvollesGlas;      }

private Double cvollesGlas= new Double(40.3);//
public Double getcvollesGlas () {return cvollesGlas;      }
public void setcvollesGlas(Double  cvollesGlas   )          {this.cvollesGlas=cvollesGlas;      }
public void sagdenFuellstand(){MainZ maiz= new MainZ();
getBvollesGlas();getcvollesGlas();
    System.out.println (BvollesGlas+ "  G13");System.out.println (cvollesGlas+ "  G13");
this.BvollesGlas=250.;
System.out.println (BvollesGlas+ "  G15");
maiz.sagdenmuellstand();
}
}
obwohl in den Methoden MyGlas glass = new MyGlas steht wird doch die MyGlas klasse im laufenden Programm geändert; als ob nur immer eine Instanz gebildet wird die solange das Programm läuft bestand hat; sonst wüde die void in MyGlas nicht funktionieren und die Void in MainZ
 
Zuletzt bearbeitet:
T

Trjavnamen

Bekanntes Mitglied
# 1 mein Ausgang hatte den Fehler das die Objekte Doubel alle privat gesetzt werden musten und anstatt
m2.getw1();
System.out.print(m2.w1);
hätte dort stehen müssen

System.out.print(m2.getw1(););
man denkt das dieses m2.getw1() eine eingabe erfordert oder das in die klammer noch etwas gehört. Aber es ist Abrufer(sellvertreter) für den gesetzten Wert also synonym für w1.
 
kneitzel

kneitzel

Top Contributor
Bei der Objektorientierten Entwicklung ist es aber dennoch genau umgedreht. Bei der Kapselung ist es eben so, dass Instanzvariablen private sind. Zugriff erfolgt über Methoden (Getter/Setter im einfachsten Fall). Dies hat den Vorteil, dass man die Implementation ändern kann ohne wirkliche Konsequenzen nach außen so lange das Interface (die Methoden) gleich bleiben.

Und bei System.out.print(m2.getw1()); denkt eigentlich kein etwas erfahrener Java Entwickler, dass da eine Eingabe erforderlich ist oder weitere Parameter.

Hintergrund ist, dass Methoden das machen, was sie sagen und daher auch in der Regel eine Sache. ein getw1 macht daher nur eins: "gets w1".

Kleiner Schmankerl ganz am Rande: Für Visual Studio gibt es sogar ein AddOn, dass diese Kommentare automatisch schreibt ... Wenn man also ein "GetCar()" geschrieben hat, dann kam da automatisch die Dokumentation dazu. Bei der Windows Workflow Foundation kann (oder konnte?) man das als Beispiel damals gut betrachten. Da war die ganze API Dokumentation auf MSDN schlicht ohne jeden Wert. die (indischen) Entwickler hatten das AddOn offensichtlich im Einsatz, die automatischen Checks waren damit zufrieden und eine weitere QA schien nicht stattgefunden zu haben ...
obwohl in den Methoden MyGlas glass = new MyGlas steht wird doch die MyGlas klasse im laufenden Programm geändert;
Und bei so aussagen haben jetzt wieder einige Kopfschmerzen ... Für @temi habe ich schon ein Notarzt gerufen - den Aufschlag seines Kopfes auf der Tastatur habe ich sogar bis hier her gehört ... :)

-> Es wird keine Klasse geändert. Es wird eine Instanz geändert. Und zwar genau die Instanz, die direkt vorher erzeugt wurde. ja, das funktioniert ganz gut:
Du kannst in ein Geschäft gehen, dir dort eine neue Geldbörse geben lassen, da Dein ganzes Geld rein tun und dann die Geldbörse einfach liegen lassen, so dass der Müllmann (mit den Initialen G.C.) diese sofort entsorgt.....
Aber bitte wundere Dich nicht, wenn du dann später Dir wieder eine neue Geldbörse geben läßt und da dann nicht Dein ganzes Geld drin ist. (Ist ja auch klar - die Geldbörse mit Deinem Geld ist ja entsorgt worden)

Also ja - das geht. Findet sich auch regelmäßig. Try with Resources dreht sich nur um diese Sache: Du lässt Dir eine neue Instanz geben, mit der du irgendwas machst und unabhängig von dem Ausgang: Am Ende ist die neue Instanz sauber entsorgt ...
 
T

Trjavnamen

Bekanntes Mitglied
In der MainZ class sieht man doch in den Methoden das ich dort gemnau das benutze wo du lieber Kneitzel sagst ich mache eine neue Instanz die nur innerhalb der KLammer lebt und zum getW1(); war dein Kommentar das tut nix. Der liebe Temi hat mich darauf hingewiesen in MyGlas nicht alles sondern nur die Teil der Objektbildung private ist und nicht die Voids darunter. Hat aber in seinem Beispiel sowas wie eine mißglückte Referenz probiert. Die Referenz die in den restlichen Post wie bekloppt wiederholt wird. Habe ich jetzt plötzlich glück das in Mainz ALLE INSTANZEN AUF EIN UND DAS SELBE ZUGREIFEN wie erklärst du bitte Ich starte mit Mainz ich bilde dort eine Instanz von MyGlas und direkt dahinter rufe ich die getter ab und mache ein System out dann setze ich die neuen Werte mit Setter und wieder ein Systemout dann rufe ich die instanz von Void auf die einen neue Wertw setzt dann rufe ich die Void aus der MainZ die eine neue Instanz auslöst von was? die Instanz nach deiner Meinung dann die komplette Myglas ist aber nicht wie oben die halbe und warum ist dann nicht die erste Instanz mit den selben Wertender kompletten Instanz? probiere mein Programm und die Ausgabe zeigt dir genau die Reihenfolge Z5 steht für MainZ zeile 5 Und G13 steht für MyGlas zeile 13 im System out. Ich gebe zu das sich ein Kommentar in den code eingeschlichen hat
 
Zuletzt bearbeitet:
T

Trjavnamen

Bekanntes Mitglied
Und wie erklärst du mir das?
Main für FXML Fenster:
package applicationX;
    
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.fxml.FXMLLoader;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("Sample.fxml"));
            Scene scene = new Scene(root,400,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Objektklasse versteckt:
package applicationX;

public class myGlas {

    private Double BvollesGlas= new Double(0.1);//
public Double getBvollesGlas () {return BvollesGlas;      }
    public void setBvollesGlas(Double  BvollesGlas   )          {this.BvollesGlas=BvollesGlas;      }
}
SanpleController mit jeder menge Instanzen:
package applicationX;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Slider;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;

public class SampleController {
    @FXML
    private TextArea Kommentar;

    @FXML
    private Slider SliFüllstand;

    @FXML
    private TextField textfieldFüllst;

    @FXML
    void andrag(ActionEvent event) { myGlas glas = new myGlas();

    }

    @FXML
    void onMoClifüllstand(MouseEvent event) {myGlas glas = new myGlas();
        SliFüllstand.setMajorTickUnit(10.00);
        SliFüllstand.setMinorTickCount(4);
        SliFüllstand.setShowTickMarks(true);
        SliFüllstand.setPickOnBounds(true);
        SliFüllstand.setSnapToTicks(true);
      glas.setBvollesGlas(SliFüllstand.getValue());System.out.println(glas.getBvollesGlas());textfieldFüllst.setText(String.valueOf(glas.getBvollesGlas()));
          Glasbeschreibung();

    }

    @FXML
    void onMoDragFüllstand(MouseEvent event) {myGlas glas = new myGlas();
        SliFüllstand.setMajorTickUnit(10.00);
        SliFüllstand.setMinorTickCount(1);
        SliFüllstand.setShowTickMarks(true);
        SliFüllstand.setPickOnBounds(true);
        SliFüllstand.setSnapToTicks(true);
         glas.setBvollesGlas(SliFüllstand.getValue());System.out.println(glas.getBvollesGlas());textfieldFüllst.setText(String.valueOf(glas.getBvollesGlas()));
          Glasbeschreibung();
    }

    @FXML void onActiontextfieldFüllst(ActionEvent event) {myGlas glas = new myGlas()
            ;


    glas.setBvollesGlas(Double.valueOf(textfieldFüllst.getText()));
  System.out.println(glas.getBvollesGlas()); SliFüllstand.setValue(glas.getBvollesGlas());
  Glasbeschreibung();
    }
    @FXML void Glasbeschreibung(){myGlas glas = new myGlas();
        if (glas.getBvollesGlas()==250){
            Kommentar.setText("Hey das ist teurer Wisky! Nichts verschütten!!");}
        else if(glas.getBvollesGlas()>=125){Kommentar.setText("da kann noch was rein!!");}
            else if(glas.getBvollesGlas()<125) {Kommentar.setText("du willst mich wohl abzocken!!");}
        }
}
und das passende fxml dokument:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.BorderPane?>


<BorderPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="applicationX.SampleController">
    <center>
      <Slider fx:id="SliFüllstand" majorTickUnit="10.0" max="250.0" onMouseClicked="#onMoClifüllstand" onMouseDragOver="#onMoDragFüllstand" orientation="VERTICAL" prefHeight="665.0" prefWidth="89.0" showTickLabels="true" showTickMarks="true" snapToTicks="true" BorderPane.alignment="CENTER" />
   </center>
   <top>
      <TextArea fx:id="Kommentar" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
   </top>
   <left>
      <TextField fx:id="textfieldFüllst" onAction="#onActiontextfieldFüllst" BorderPane.alignment="CENTER" />
   </left>
</BorderPane>
 
T

Trjavnamen

Bekanntes Mitglied
Habe ich in den letzten Beispielen keine Instanz von MyGlas oder sondern ein Objekt ertellt. Hat die Javafx die Möglichkeit eingebaut das wenn ich dort eine Instanz bilde, die wenn ich den selben Namen benutze automatisch referenziert wird? Denn das #1 Listing bleibt bei einer Instanzierung
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Bitte, bitte geh noch mal ganz zum Anfang zurück und fang wirklich bei den absoluten Grundlagen an. Dir fehlt jegliches Verständnis davon, und keinerlei Erklärung die wir dir hier geben können führt bei dir zu irgendwas. Da kann nichts anderes helfen als nochmal alle Grundlagen selbstständig zu erarbeiten.
 
kneitzel

kneitzel

Top Contributor
Wir haben mehrfach geschrieben, wie es gehen würde. Haben sogar Codebeispiele gegeben. Mir fällt nicht ein, was ich noch anderes schreiben könnte. Daher lasse ich es dabei bewenden.
 
temi

temi

Top Contributor
Tut mir leid, dass meine Erklärungen offenbar nicht verständlich genug gewesen sind. :-(

Wobei ich immer noch glaube, dass alles, was du wissen musst, hier geschrieben wurde. Du müsstest es dir eben erarbeiten und vor allem verstehen. Und daran hapert es anscheinend, was man schon an deinen Ausführungen sieht.
nicht die Voids darunter.
dann rufe ich die instanz von Void auf
die eine neue Instanz auslöst
Was soll der Unsinn bedeuten?

Vergiss alles, was mit GUI zu tun hat und arbeite nur auf der Konsole. Nur mit einer Hauptklasse mit main() und ggf. einer weiteren Klasse. Gebrauche die Begrifflichkeiten korrekt. So versteht dich keine Sau.

Solltest du Verständnisfragen bei solchen Grundlagenthemen haben, dann stelle sie hier. Solltest du wieder mit deinem Fx-Müll kommen, dann viel Spaß damit!

Ich haben fertig!
 
Zuletzt bearbeitet:
temi

temi

Top Contributor
Hier hast du mal etwas zum Eingrooven...

Dinge und ihre Namen:
public class Foo { // Klassendeklaration mit dem Zugriffsmodifizierer "public"

    private int instanzvariable; // Deklaration einer Instanzvariablen (auch Feld oder Attribut genannt)
                                 // mit dem Zugriffsmodifizierer "private"

    public Foo() { // Parameterloser Konstruktor (auch Standardkonstruktor genannt)
        instanzvariable = 42; // Zuweisung an eine Variable (hier an die Instanzvariable)
    }

    public Foo(int wert) { // Weiterer Konstruktor mit einem Parameter vom Typ int
        instanzvariable = wert; // Zuweisung des Parameters an die Instanzvariable
    }

    public int getInstanzvariable() { // Deklaration einer parameterlosen Methode (hier speziell auch Getter genannt)
                                      // mit einem Rückgabwert vom Typ int
        return instanzvariable;
    }

    public void setInstanzvariable(int wert) { // Deklaration einer Methode mit einem Parameter vom Typ int (hier speziell auch Setter genannt)
                                               // ohne Rückgabewert (void)
        instanzvariable = wert;
    }

    public void doSomething() { // Deklaration einer allgemeinen Methode, ohne Parameter, ohne Rückgabewert
        int lokalevariable; // Deklaration einer lokalen Variablen
                                     // Diese Variable ist nur bis zum Ende dieser Methode gültig, danach gibt es sie nicht mehr
        lokalevariable = instanzvariable + 5; // addiert 5 zum Wert der Instanzvariablen
        instanzvariable = lokalevariable; // weist den Wert der lokalen Variable der Instanzvariablen zu
        // Das ist natürlich sinnlos, aber es geht um den Begriff "lokale Variable"
    }
}


Foo foo; // Deklaration der Variablen foo vom Typ Foo
foo = new Foo(); // Erzeugen einer Instanz (eines Objektes) von Foo (auch Instanziierung genannt)
                 // foo enthält anschließend eine Referenz auf das Objekt

foo.setInstanzvariable(1); // Aufruf einer Methode von foo (hier der Setter für Instanzvariable)

int wert; // Deklaration der Variablen wert vom Typ int
wert = foo.getInstanzvariable(); // Aufruf einer Methode von foo (hier der Getter)
                                 // und Zuweisung des Rückgabewerts an die Variable wert


Foo foo1 = new Foo(1); // Erzeugt eine Instanz von Foo, die durch den Konstruktor mit dem Wert 1 initialisiert wird.
Foo foo2 = new Foo(2); // Erzeugt eine weitere Instanz von Foo, die mit dem Wert 2 initialisiert wird.

// Diese beiden Instanzen (Objekte) sind völlig unabhängig voneinander.


Dann wäre da noch
Die Referenz die in den restlichen Post wie bekloppt wiederholt wird.
https://de.wikipedia.org/wiki/Metasyntaktische_Variable


Noch Fragen?
 
Zuletzt bearbeitet:
T

Trjavnamen

Bekanntes Mitglied
Nach dem durchlesen und vergleich der Büchern Sprechen sie Java Schröder lernt Java und dem onlinebuch Java ist eine Insel.
bin ich zu folgendem Ergebnis gekommen.
JVM verwaltet Objekte nicht die klassen
static Variabeln sind innerhalb der Klasse global und haben die höchste Lebensdauer und sind in der regel überall sichtbar .
Ein Objekt innerhalb einer Klasse werden normal in ein und dem selben Speicherplatz gespeichert. Eigendlich sollte also ein Objekt in einem Speicherbereich sein und die Instanz auch. Der direkte aufruf der INstanz am Anfang der class MainZ müste also eine weiteren festen Speichrplatz belegen. aber ohne static davor ist es nicht in den Methoden(im prinzip KLasse) und Klassen(Subklasse) innerhalb dieser Klasse nicht sichtbar.
Habe ich jetzt das Prinzip verstanden?
test4neu:
package meintest4;

public class test4 {
static private Double w1= new Double(0.1d);//globales Objekt also auch als Instanz global
static private Double w2 = new Double(0.1d);//globales Objekt
static private Double w3= new Double(0.1d);//globales Objekt
static private Double w4= new Double(0.1d);//globales Objekt
static private Double w5= new Double(0.1d);//globales Objekt
static private Double w6= new Double(0.1d);//globales Objekt



public Double getw1() {return  w1;     }
public Double getw2() {return  w2;     }
public Double getw3() {return  w3;     }
public Double getw4() {return  w4;     }
public Double getw5() {return  w5;     }
public Double getw6() {return  w6;     }


public void setw1(Double  w1   )               {this. w1=w1;     }
public void setw2(Double  w2   )               {this.  w2=w2;     }
public void setw3(Double  w3   )               {this.  w3=w3;     }
public void setw4(Double  w4   )               {this.  w4=w4;     }
public void setw5(Double  w5   )               {this.  w5=w5;     }
public void setw6 (Double  w6   )               {this.  w6=w6;     }




}
meine neue MainX:
package meintest4;

public class MainX {
    static test4 allewerte =new test4();//static  mache ich dieses Objekt [test4 allewerte =new test4()9] zum globalen Objekt



    public static void main(String[] args) {
        rub1();
        rub2();
    }

    private static void rub1(){

        System.out.println(allewerte.getw1()+"  z14");//aus test4 Instanz allewerte
        allewerte.setw1(10000.00);

        System.out.println(allewerte.getw1()+"  z17");//aus test4 Instanz allewerte

    }

    private static  void rub2(){
         System.out.println(allewerte.getw1()+"   z22");//in rub1 gesetzt und überlebt
         System.out.println(allewerte.getw2()+"   z23");//aus allewerte
         allewerte.setw2(9000.00);
         System.out.println(allewerte.getw2()+"   z25");//inrub2gesetzt
}

}//endeklasse
 
mihe7

mihe7

Top Contributor
JVM verwaltet Objekte nicht die klassen
Auch Klassen sind Objekte, nämlich Instanzen von Typ Class.

Ein Objekt innerhalb einer Klasse werden normal in ein und dem selben Speicherplatz gespeichert.
Jedes Objekt erhält seinen eigenen Speicherplatz. Dieser Speicher wird in der Regel mit dem new-Operator reserviert.

Der direkte aufruf der INstanz am Anfang der class MainZ müste also eine weiteren festen Speichrplatz belegen. aber ohne static davor ist es nicht in den Methoden(im prinzip KLasse) und Klassen(Subklasse) innerhalb dieser Klasse nicht sichtbar.
Habe ich jetzt das Prinzip verstanden?
Nein.

Mit static sagst Du ganz einfach, dass ein Attribut oder eine Methode zur Klasse, nicht aber zum Objekt gehört. Ein statisches Attribut existiert nur einmal, egal wie viele Objekte Du von der Klasse auch erzeugst. Eine statische Methode ist ohne ein Objekt der Klasse aufrufbar.

In MainX, Zeile 4, erzeugst Du mit new ein neues test4-Objekt und speicherst die Referenz im statischen Attribut allewerte. Diese Zeile 4 wird aber nur einmal ausgeführt (beim Initialisieren der Klasse durch die JVM). Dieses Attribut gibt es nur einmal, egal wie oft Du nun Instanzen von MainX erstellst. Daher teilen sich alle Instanzen von MainX das selbe(!) test4-Objekt.

static eignet sich vor allem zur Definition von Konstanten (static final, z. B. Math.PI), weil diese eben konstant und somit unabhängig von irgendwelchen Objekten sind. static eignet sich insbesondere auch zur Definition von reinen Funktionen (wie z. B. Math.sin) oder "Prozeduren" (wie z. B. main), weil alle benötigten Werte übergeben werden, der Code also unabhängig von irgendwelchen Objekten funktioniert.

Für die Sichtbarkeit gibt es Modifizierer wie public, private, protected. Ohne eine Angabe ist die Sichtbarkeit "package private", ist also nur innerhalb des Pakets (nicht aber in Subtypen) sichtbar.
 
kneitzel

kneitzel

Top Contributor
Und ganz nebenbei macht so ein Vorgehen keinen Sinn:
Java:
static private Double w1= new Double(0.1d);
public Double getw1() {return  w1; }
public void setw1(Double  w1) { this. w1=w1; }

Die Variable ist statisch und gehört zur Klasse. Die Methoden sind auf der Instanz und greifen über eine Instanz auf die Klassenvariable zu. Mag sein, dass Java selbst da keine Warnung auswirft, aber IntelliJ und auch diverse statische Codeanalyse Tools dürften das auch (zu Recht) anmeckern.

Auf eine Klassenvariable wird natürlich nicht mit der this Referenz zugegriffen sondern über den Klassennamen:
Java:
static private Double w1= new Double(0.1d);
public static Double getw1() {return  w1; }
public static void setw1(Double  w1) { test4.w1=w1; }

Dann wäre jetzt alles statisch - auf das ich nicht weiter im Detail eingehe (ebenso wie auf das Naming).

BTW: Nutzt du eine IDE für Deinen Code? So eine Entwicklungsumgebung kann in der Regel auf Knopfdruck den Code für einen formatieren. Und das sowohl bezüglich Einrückungen als auch bezüglich Leerzeichen / Leerzeilen. Das wäre ggf. auch etwas, das Dir weiter helfen könnte. Ordentlich formatierter Code wäre zumindest für uns hier angenehmer zu lesen.)
 
T

Trjavnamen

Bekanntes Mitglied
Java:
static private Double w1= new Double(0.1d);// dieses static ist wegen dem this im Setter überflüssig  
public Double getw1() {return  w1; }
public void setw1(Double  w1) { this. w1=w1; }
zitat aus Java ist eine INsel Der Wert einer statischen Variablen wird bei dem Klassenobjekt gespeichert und nicht bei einem Exemplar der Klasse.
(Exemplar im sinne von Instanz >>Java Insel Sprachgebrauch)
 
T

Trjavnamen

Bekanntes Mitglied
Man kann es in test4 weglassen was ich wegen diesem Satz extra hingeschrieben habe . Nun lese ich das andere Entwicklungsumgebungen darüber meckern. Ja es könnte Probleme geben static zu benutzen wenn Programme auf genau so ein Objekt im laufenden Programm trifft.Es ist nicht ratsam dann den einen Namen zu benutzen den du vorher schon benutzt hast. Wie z.B. x i y die als Lokalnamen schon benutzt werden. Kann ich mir sicher sein das die Variable mit dem benden des KLassenaufrufs stirbt und es mit der Grabage Collektion gelöscht ist darf ich das.
 
mihe7

mihe7

Top Contributor
OK, der Punkt ist nicht, ob static überflüssig ist, sondern ob static an der Stelle richtig ist. Mit Ausnahme von Konstanten ist static für ein Attribut fast nie richtig. Die Entwicklungsumgebung meckert, weil Java es zulässt, per this (=Objektreferenz) auf statische Attribute zuzugreifen - auf diese sollten über die Klasse zugegriffen werden.
 
T

Trjavnamen

Bekanntes Mitglied
Ich habe allerdings was von einer Null referenz gelesen aber entweder kann ich das nicht richtig oder Eclipse akzeptiert es nicht oder es bringt nichts.
was meint Ihr?
 
T

Trjavnamen

Bekanntes Mitglied
ich greife ja gar nicht statisch auf this. zu weil es ja private ist. ich mache aber die Klasse Statisch damit ich nur eine Instanz erzeuge und die setter und getter überall sichtbar sind was im Prinzip einer Referenz gleicht mit dem Unterschied das alle felder der KLasse referenziert werden. Die Lösungen von euch hatte nur ein Feld referenziert,
 
mihe7

mihe7

Top Contributor
Ich habe allerdings was von einer Null referenz gelesen aber entweder kann ich das nicht richtig oder Eclipse akzeptiert es nicht oder es bringt nichts.
was meint Ihr?
null ist die "Nullreferenz", die keine Referenz sondern ein Pointer ist - daher heißt die Exception auch NullPointerException.

ich greife ja gar nicht statisch auf this. zu weil es ja private ist.
Die Sichtbarkeit hat nichts mit static zu tun (s. #81). Du greifst über eine Objektreferenz (this) auf eine Klassenvariable zu. Das ist in Java zwar erlaubt, sollte man aber nicht machen.
 
T

Trjavnamen

Bekanntes Mitglied
sorry mihe7 das ist so nicht richtig In "sprechen sie Java" wird expliziet darauf hingewiesen das eine Variable am Anfang wie static int g; in allen Klassen sichtbar wird und auf die selbe Referenz zeigt weil sie als einzige nicht stirbt. alle anderen Static teile wie public static main oder static void xxx sind sterblich und nicht immer sichtbar.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
sorry mihe7 das ist so nicht richtig In "sprechen sie Java" wird expliziet darauf hingewiesen das eine Variable am Anfang wie static int g; in allen Klassen sichtbar wird und auf die selbe Referenz zeigt weil sie als einzige nicht stirbt.
Eine Variable die public static ist, ist überall sichtbar – das liegt in dem Fall an dem public, nicht an dem static.

Bei static greifen genau die gleichen Regeln zur Sichtbarkeit wie überall sonst:
public = "überall"
protected = package + Subtypen
"default = package
private = compilation-unit


alle anderen Static teile wie public static main oder static void xxx sind sterblich und nicht immer sichtbar.
Methoden "sterben" generell nicht, public static main ist auch immer und überall (durch das public) sichtbar und aufrufbar, static void xxx ohne public ist auch immer sichtbar, aber nur im eigenen Package und nicht überall.
 
mihe7

mihe7

Top Contributor
In "sprechen sie Java" wird expliziet darauf hingewiesen das eine Variable am Anfang wie static int g; in allen Klassen sichtbar wird und auf die selbe Referenz zeigt weil sie als einzige nicht stirbt. alle anderen Static teile wie public static main oder static void xxx sind sterblich und nicht immer sichtbar.
Ich kenne das Buch nicht aber das steht da so garantiert nicht und wenn, ist es falsch.
 
T

Trjavnamen

Bekanntes Mitglied
Man soll über null auch eine Referenz erzeugen können wie über this. die sollte so lauten Integer p = Null; String q =Null; p=q;
Aber bei mir meckert Eclipse Und bei euch?
 
mihe7

mihe7

Top Contributor
@Trjavnamen allmählich frage ich mich, ob Deine Fragen ernst gemeint sind... Neben dem, was @mrBrown schon geschrieben hat: Du kannst einen String nicht einfach einem Integer zuweisen.
 
T

Trjavnamen

Bekanntes Mitglied
ja das ist ja das war etwas komisches Und das unter Beratung von 3 professoren und geschrieben von hanspeter Mössenböck.professor für informatik
 
kneitzel

kneitzel

Top Contributor
null ist die "Nullreferenz", die keine Referenz sondern ein Pointer ist - daher heißt die Exception auch NullPointerException.
Und null ist eben keine Referenz, und "über null" erzeugt man ganz sicher auch keine Referenz.
Also hier möchte ich ein kleines bisschen einhaken (und klugscheißen und den armen TE endgültig verwirren).

"null" ist natürlich das Null Literal, welches in der JLS 3.10.8 explizit als "null reference" bezeichnet wird und wie alle Referenzen hat auch diese Referenz einen Typ: den null Type (JLS 4.1) (und die "NullPointerException" ist daher aus meiner Sicht vom Naming her eher inkonsistent).

Wenn man die JLS durchgeht, dann findet sich das Wort Pointer auch fast nur in Form der NullPointerException.

In JLS 4.3.1 werden Referenzen als Pointer beschrieben: "The reference values (often just references) are pointers to these objects, and a special null reference, which refers to no object" wodurch der Begriff "Pointer" auf jeden Fall umgangssprachlich akzeptabel wird.

Aber null ist eine Referenz und zwar DIE null reference.

Das wäre so meine Sicht, die ich durch das Lesen der JLS gewonnen habe (Und die würde ich im Java Bereich einfach einmal als "Bibel" setzen, wenn es um Begriffe geht. Die Begriffe, die dort definiert wurden sollten unsere Basis bilden, damit klar ist, wovon man redet).
 
kneitzel

kneitzel

Top Contributor
Nun lese ich das andere Entwicklungsumgebungen darüber meckern. Ja es könnte Probleme geben static zu benutzen wenn Programme auf genau so ein Objekt im laufenden Programm trifft.
Du hast den Punkt, der angemeckert wird, missverstanden. Es geht nicht darum, dass etwas static ist. Dinge dürfen natürlich static sein und es gibt durchaus Gründe, manche Dinge static zu machen. Damit gehört dieses Element aber zur Klasse und nicht zur Instanz. Daher sollte es auch über die Klasse angesprochen werden und nicht über eine Instanz.

In Deinem konkreten Fall sollte daher nicht per this.w1 auf die statische Variable w1 zugegriffen werden sondern über den Klassennamen: test4.w1

Das ist also ähnlich wie wenn Deiner Frau etwas gehört. Jemand der darauf zugreifen will, soll sich bitte direkt an Deine Frau wenden und nicht an Dich. Aber natürlich: prinzipiell kann man auch über Dich Zugriff drauf bekommen (Weil im Java Umfeld die Zugriffsrechte klar sind und das, worauf zugegriffen werden soll, ist nun einmal public... (oder es hat ein anderes Recht a.la. "nur die guten Bekannten" oder nur "die Kinder").
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Verständnisfrage: Objekt erzeugen u. zuweisen Java Basics - Anfänger-Themen 16
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10
J Verständnisfrage: Konstruktorproblem bei statischem Objekt Java Basics - Anfänger-Themen 4
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
Der Grütz Verständnisfrage zu Übung aus Java Kurs - Schaltjahr bestimmen Java Basics - Anfänger-Themen 2
J Verständnisfrage zu throws neben Funktionen Java Basics - Anfänger-Themen 2
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
P Verständnisfrage zum Mapping Java Basics - Anfänger-Themen 3
M Java Version Verständnisfrage Java Basics - Anfänger-Themen 16
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Verständnisfrage zur Konsolenausgabe Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
D Verständnisfrage zur Modellierung einer HDD Java Basics - Anfänger-Themen 17
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
S Verständnisfrage lokale Ordnerpfade Java Basics - Anfänger-Themen 1
T Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 7
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
O Anfänger, Verständnisfrage Java Basics - Anfänger-Themen 3
C Verständnisfrage zu Modulo Java Basics - Anfänger-Themen 6
C Verständnisfrage bezüglich der Do-While Schleife Java Basics - Anfänger-Themen 9
L Verständnisfrage - Speicherabbild Java Basics - Anfänger-Themen 4
melly_ Verständnisfrage zu args Java Basics - Anfänger-Themen 3
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
K Verständnisfrage eines Abschnitts Java Basics - Anfänger-Themen 6
K Rekursion Verständnisfrage Java Basics - Anfänger-Themen 19
S Modell View Controller Verständnisfrage Java Basics - Anfänger-Themen 24
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
JavaTalksToMe Erste Schritte Println-Frage (Verständnisfrage) Java Basics - Anfänger-Themen 1
R Verständnisfrage zu Objekten u. Übergabeparameter Java Basics - Anfänger-Themen 8
G Collections Verständnisfrage zur For-Each-Schleife Java Basics - Anfänger-Themen 7
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
G Verständnisfrage zu for-each Java Basics - Anfänger-Themen 4
DontFeedTheTroll Erste Schritte Verständnisfrage zu If-Anweisung Java Basics - Anfänger-Themen 7
K Rekursion-Verständnisfrage Java Basics - Anfänger-Themen 4
J Java Server Pages - Verständnisfrage Java Basics - Anfänger-Themen 2
Z Verständnisfrage Anfängerprogramm Java Basics - Anfänger-Themen 0
T Verständnisfrage Zuweisungs-/arithmet. Operatoren Java Basics - Anfänger-Themen 2
G Methoden Verständnisfrage zur Methoden Java Basics - Anfänger-Themen 7
LionAge Kapselung, Verständnisfrage zur Objekterzeugung Java Basics - Anfänger-Themen 4
Z Verständnisfrage zum Multithreading Java Basics - Anfänger-Themen 3
R OOP / Verständnisfrage zum Konstuktor (siehe code) Java Basics - Anfänger-Themen 7
gamebreiti Verständnisfrage zu contains() Java Basics - Anfänger-Themen 10
A Verständnisfrage - Koordinatenumrechnung Java Basics - Anfänger-Themen 9
J Erste Schritte Verständnisfrage im Bezug auf das (richtige) Programmieren Java Basics - Anfänger-Themen 5
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
H Verständnisfrage Array Java Basics - Anfänger-Themen 2
I Interface Verständnisfrage Interfaces (Bsp.: Enumeration) Java Basics - Anfänger-Themen 2
I Verständnisfrage zu BridgePattern, Verwedung von super() Java Basics - Anfänger-Themen 4
P Verständnisfrage Java Basics - Anfänger-Themen 3
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
D Input/Output Verständnisfrage Verzeichnis-/Dateiliste erstellen & Dateikonvertierung Java Basics - Anfänger-Themen 1
S Verständnisfrage zu Anweisungen und deren Wirkung Java Basics - Anfänger-Themen 7
H Verständnisfrage für oder Anweisung Java Basics - Anfänger-Themen 8
E Threads Verständnisfrage bzgl. Threads und Sleep Java Basics - Anfänger-Themen 2
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
H Verständnisfrage zu Java-Ausgabe Java Basics - Anfänger-Themen 3
S Verständnisfrage Java Basics - Anfänger-Themen 2
N Verständnisfrage Code Java Basics - Anfänger-Themen 8
B Verständnisfrage Java Basics - Anfänger-Themen 2
H Interface Comparable Verständnisfrage Java Basics - Anfänger-Themen 6
B Verständnisfrage Codezeile Java Basics - Anfänger-Themen 7
B Verständnisfrage:Beispielprogramm BlueJ Java Basics - Anfänger-Themen 3
M Kurze Verständnisfrage zu einer Java Aufgabe Java Basics - Anfänger-Themen 12
K Erste Schritte Kleine Verständnisfrage Java Basics - Anfänger-Themen 12
R Verständnisfrage Referenzvariablen in array Java Basics - Anfänger-Themen 3
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
M Verständnisfrage zu JPanel Java Basics - Anfänger-Themen 3
S Verständnisfrage: Exception Gebrauch Java Basics - Anfänger-Themen 2
R Verständnisfrage NPE Java Basics - Anfänger-Themen 5
M Verständnisfrage zur Zahlenumwandlung (Dezimal-->Dual) Java Basics - Anfänger-Themen 25
P Java Objekte - Verständnisfrage Java Basics - Anfänger-Themen 9
N Verständnisfrage zu folgendem Programm Java Basics - Anfänger-Themen 2
L Grundlegende Verständnisfrage Hasmap Referenzen Java Basics - Anfänger-Themen 4
S Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 2
VfL_Freak Verständnisfrage zur Klasse "TIMER" Java Basics - Anfänger-Themen 7
P Verständnisfrage zu Instanzen/Objekten Java Basics - Anfänger-Themen 9
M Verständnisfrage im Umgang mit Map Java Basics - Anfänger-Themen 10
K Verständnisfrage zu int.length und String.length() Java Basics - Anfänger-Themen 4
G 2D Array gleichsetzen verständnisfrage Java Basics - Anfänger-Themen 2
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
N verständnisfrage java.util.Calendar Java Basics - Anfänger-Themen 4
G Datentypen bits, bytes, chars - Verständnisfrage Java Basics - Anfänger-Themen 5
E Verständnisfrage zu Shutdownhook Java Basics - Anfänger-Themen 5
D Verständnisfrage: Java und MySql Java Basics - Anfänger-Themen 3
F Rekursion Verständnisfrage Java Basics - Anfänger-Themen 6
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
Z Comparator Verständnisfrage Java Basics - Anfänger-Themen 5
D Verständnisfrage zu Funktionen Java Basics - Anfänger-Themen 6
H Verständnisfrage Persistenz Java Basics - Anfänger-Themen 10
neurox Verständnisfrage zu Threads Java Basics - Anfänger-Themen 4
E Verständnisfrage Syntax: frame.getContentPane().add(button) Java Basics - Anfänger-Themen 11
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
I Verständnisfrage zum Thema APIs Java Basics - Anfänger-Themen 6
S Generic: Verständnisfrage Java Basics - Anfänger-Themen 2
hdi kleine Verständnisfrage lokale + Member Variable Java Basics - Anfänger-Themen 10
G [Verständnisfrage] flush() und close() Java Basics - Anfänger-Themen 6
A Verständnisfrage Sekunden/Tage Umrechnung Java Basics - Anfänger-Themen 3
hdi Verständnisfrage zu Zuweisung + Post-Inkrement Java Basics - Anfänger-Themen 3
hdi Verständnisfrage Java Basics - Anfänger-Themen 7

Ähnliche Java Themen


Oben