Mehrbenutzer Klassen

Status
Nicht offen für weitere Antworten.
G

Gast3838

Gast
Hallo nehmen wir an ich hab folgende Klasse:

Code:
public class Hello {

    private String hello;

    public Hello(String param) {
        this.hello = param;
    }

    public void sayHello() {
        System.out.println("Hello");
    }
}

Nun so weit alles klar.

Benutzer 1 ruft nun auf:

Code:
Hello h = new Hello("Test1111");
h.sayHello();

Benutzer 2 ruft nun auf:

Code:
Hello h = new Hello("Test666");
h.sayHello();


Nun hab ich folgende Befürchtung. Wenn beides gleichzeit kommt. Also Benutzer1 ruft Konstruktor auf. Benutzer2 ruft Konstruktor auf. Benutzer 1 ruft sayHello auf bekommt nun aber Test666 und Benutzer 2 ruft sayHello() auf und bekommt auch Test666.

Bekommt da jeder sein eigenes Objekt oder wie sieht das aus?. Macht es einen Unterschieder wenn sayHello static ist?

Ich hab eben angst das was überschrieben wird!!!


Bitte um Antwort
 

Wildcard

Top Contributor
Es ist zwar keinesfalls ersichtlich was du unter 'Benutzer' verstehst, aber deine Befürchtungen sind unbegründet.
 
S

SlaterB

Gast
> Bekommt da jeder sein eigenes Objekt oder wie sieht das aus?.

ja, jeder sein eigenes (Grundlagen?), keine Probleme

> Macht es einen Unterschieder wenn sayHello static ist?

ja, denn dann haben einzelne Objekte keinen Einfluss mehr,
dann kannst du auf keine Variablen wie hello mehr zugreifen (außer wenn sie auch statisch sind)
und musst dir was neues überlegen


----------

> Benutzer 1 ruft sayHello auf bekommt nun aber Test666

die Ausgabe von sayHello() ist übrigens immer "Hello",
der im Konstruktor übergebene Wert spielt (bisher) keine Rolle
 
G

gast

Gast
Also dann nochmal genauer was ich meine:

Code:
public class Hello {

    private static String hello;

    public static void sayHello(String param) {
        // Hier folgt z.B. eine Berechnung mit dem String this.hello (dauert so 1 min sagen wir)        
        this.hello = param;
        System.out.println(this.hello);
    }
}

Benutzer 1 ruft auf: Hello.sayHello("Test 111");

10 Sekunden später:

Benutzer 2 ruft auf: Hello.sayHello("Test 666");

Nun hab ich Angst das beide Test 666 als Ausgabe bekommen!!!
 

Leroy42

Top Contributor
Code:
Hello.sayHello("Test 111");

Das geht gar nicht, da sayHello eine Instanzmethode ist:

Code:
new Hello().sayHello("Test 111");
 
S

SlaterB

Gast
> Das geht gar nicht, da sayHello eine Instanzmethode ist

? static ?

--------

> Nun hab ich Angst das beide Test 666 als Ausgabe bekommen!!!

aber Benutzer 1 bekam seine Ausgabe doch 10 Sekunden vorher,
wie soll die im Nachhinein geändert werden,
Zeitreisen?
 
G

Guest

Gast
Code:
public class Hello { 

    private static String hello; 

    public static void sayHello(String param) { 
        hello = param; 

        // Hier folgt z.B. eine Berechnung mit dem String this.hello (dauert so 1 min sagen wir)        

        System.out.println(hello); 
    } 
}


17:00:00 Benutzer 1 ruft sayHello("BLUB") auf --> hello ist nun = BLUB
17:00:10 Benutzer 2 ruft sayHello("WAS GEHT") auf --> hello ist nun = WAS GEHT
17:01:00 Benutzer 1 hat die Methode durchlaufen ---> was bekommt er für eine Ausgabe? BLUB oder WAS GEHT
17:01:10 Benutzer 2 hat die Methode durchlaufen ---> was bekommt er für eine Ausgabe? BLUB oder WAS GEHT

Ich hoffe ihr wisst nun was ich will ;) schwere Geburt!
 
S

SlaterB

Gast
beide bekommen WAS GEHT, unter der Annahme, dass die beiden 'Benutzer' im gleichen Programm ablaufen,
was bei deinem Kenntnissstand nur schwer vorzustellen ist
(Threads?)
 

Ocean-Driver

Bekanntes Mitglied
Mach dir erstmal um das Problem keine sorgen, die Ausgabe erfolgt erst wenn deine 'Berechnung' durch ist. ;)

Es wird erst Test111 und dann Test666 ausgegeben.
 
G

Guest

Gast
naja konkret geht es um einen Datenbankklasse auf einem Webserver:

da gibts eine Methode: executeQuery(); die ist statisch

außerhalb der Methode wird ResultSet set; definiert, natürlich auch statisch

Nun ist das Problem das ein Benutzer ein ResultSet will mit 1000 DS und dann kommt ein Benutzer wo 2 DS will. Nun hab ich eben Angst, dass das ResultSet von Benutzer 1 überschrieben wird...

ist das denn wirklich so schwer zu erklären?!
 
S

SlaterB

Gast
du kannst dir sicher sein, dass statische Variablen allgemein schon sehr fragwürdig sein,
für temporäre Daten umso mehr
und bei mehreren Benutztern gleichzeitig müssen noch eine Potenz mehr die Alarmglocken klingeln,
das geht eigentlich absolut nicht

wenn dir die unterschiedlichen Ergebnisse nicht gefallen, dann schreibe dir flink einen Test und du hast die Sicherheit,
das kann dir niemand abnehmen, denn niemand weiß, was eigentlich diese ominösen 'Benutzer' sind
 
G

Gast

Gast
Es wird beides mal WAS GEHT herauskommen.

Wenn das ganze in einer VM abläuft. Also in einem Programm.

Bei 2 virtuellen Maschinen, also 2 Konsolen etc. wird das erste mal BLUB und das zweite mal WAS GEHT rauskommen.

Hello hello1 = new Hello() legt ein neues Objekt an, plus Speicherplatz für alle Instanzvariablen.
auf diese Variablen wird dann über dieses Objekt zugegriffen.
zb. hello1.instanzvariable;
Jedes dieser Objekte hat seinen eigene Instanzvariable.

Auf static Variablen kann zum einen über ein Objekt zugegriffen werden.
hello1.staticVariable;
oder über die Klasse
Hello.staticVariable;

Staticvariablen existieren nur einmal pro Programm, bzw. VM.
d.H. hello1.staticVariable verweist auf die gleiche Speicheradresse wie Hello.staticVariable oder auch hello2.staticVariable.

static Methoden dürfen nicht auf Instanzvariablen zugreifen.
 
G

Gast

Gast
ich glaub da war der entscheidende Tipp! Damit müssten meine Benutzer ja keine Probleme haben!
 
G

Gast

Gast
Wie wäre es das Resultset einfach in der Methode executeQuery zu definieren?

also

public static ResultSet executeQuery(){
ResultSet result ;
// das übliche
return result;
}
 
G

Gast

Gast
ja das kann ich machen, ich würde eben gerne eine Methode schreiben wo das resutlset die connection usw.. zu macht und null setzt. Da ich mehrere Methoden habe execute Query, executeUpdate, execute XY hätte ich ja da Coderedundanz!
 
G

Guest

Gast
Gast hat gesagt.:
udn wie kann ich das herausfinden oder steuern?
Zum Beispiel eine Logausgabe im Konstruktor der Klasse.
Wenn der nur 1 mal aufgerufen wird, handelt es sich vermutlich um mehrere Threads die auf das gleiche Objekt zugreifen.
 
S

SlaterB

Gast
> udn wie kann ich das herausfinden oder steuern?

genausogut könntest du fragen, wie du herausfindest, ob du Operation x() aufrufst,
wenn du Threads nicht kennst, dann verwendest du sie wohl noch nicht, also kein Problem,
dann ist aber immer noch die Frage, wie denn mehrere Benutzer in dein Programm kommen,
oder verwenden die alle das Programm einzeln auf ihren eigenen Rechner?
dann ist wie gesagt gar keine Interaktion möglich, oder soll das magisch über das Internet geschickt werden?

wenn du dich in einer fremden komplexen Anwendung befindest,
dann frage den/ die, der/ die das Program geschrieben hat/ haben
 
G

Gast

Gast
public static closeResultSet(ResultSet rs){
rs.getConnection().close();//rs.getConnection() = null;
rs.close();}
 
G

Gast

Gast
nein also die klasse liegt auf einem Tomcat Webserver. Benutzer sind die einzelnen Internetuser. Von dem her kann ich ja die Methoden statisch machen und hab keine Probleme! die haben unterschiedliche VMs ja!
 
S

SlaterB

Gast
ähm, bei einer normalen Webanwedung hast du nur einen WebServer,
alle Request landen in dem einen Programm, in einer VM und zwar als Threads,

so ist das zumindest in J2EE, Servlets, JSPs, JSF, Struts usw. der Standard,
also Probleme mit static angesagt
 
G

Gast

Gast
dann lieber gar nichts static machen?

es wäre eben leichter aufzrufen: Klasse.Methode();

wie wimmer Klasse k = new Klasse();
k.methode();
 

Wildcard

Top Contributor
Bei dem derzeitigen Stand deiner Java Kenntnisse, kann man dir nur dringend davon abraten eine Webapplikation zu publizieren
 
S

SlaterB

Gast
Sicherheit geht vor Einfachheit,
brauchst du diese bisher statischen Variablen eigentlich später noch?

wenn sie nur für die Bearbeitung des Aufrufs angelegt werden, dann kannst du das ganze ein wenig vereinfachen:

Klasse.Methode();

und diese statische Methode enthält die beiden Zeilen:
Klasse k = new Klasse();
k.methode();
 
G

Gast

Gast
@ wildcard das hat überhaupt nichts mit Kenntnissen zu tun, ich will die Sachen eben konkret erforschen und genau auf den zahn fühlen! Jemand anderes hätte es einfahc programmiert und gut ist, später kracht es dann!

@slaterB danke für deine ausführliche Hilfe
 
S

SlaterB

Gast
Kenntnis wäre schon nicht schlecht,
es bringt nix, jetzt hier 3-4 Sachen abzufragen und dann zu glauben, dass es einigermaßen geht,
wenn dir 99 andere Gedanken noch völlig fehlen,

nicht umsonst sind entsprechende Lehrbücher hunderte Seiten lang,
es gibt so vieles zu bedenken
 
M

maki

Gast
das hat überhaupt nichts mit Kenntnissen zu tun,
Ach wirklich?

ich will die Sachen eben konkret erforschen und genau auf den zahn fühlen!
Wie willst du denn erforschen?
Einfach mal ins Blaue fragen?
Hast du dich denn schon mit den Grundlagen auseinander gesetzt?
Anscheinend noch nicht... 1-2 Jahre Java ohne Web und JEE sind mindestens nötig damit was brauchbares rauskommt.

Jemand anderes hätte es einfahc programmiert und gut ist, später kracht es dann!
Das hört sich ganz nach dem an was du da machst.
 
G

Gast

Gast
sei dir sicher das etwas brauchbares bei mir rauskommt :) es war nur ein kleiner Teil was ich nicht ganz verstanden habe mit static. Man kann die Welt auch untergehen lassen!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Import von Klassen aus anderen Projekten mit dem Setzen des "Classpath" Java Basics - Anfänger-Themen 9
R Klassen Anonyme Klassen: Zugänglichkeit neuer Methoden Java Basics - Anfänger-Themen 2
D Initialisierung von Klassen-Objekte Java Basics - Anfänger-Themen 47
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
E Klassen implementieren Java Basics - Anfänger-Themen 94
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
A Methode, Klassen Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
G Klassen und Objekte Java Basics - Anfänger-Themen 2
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
D Klassen ausgeben Java Basics - Anfänger-Themen 2
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
Queiser Nicht statische Klassen Java Basics - Anfänger-Themen 6
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
J Gleiche Methode in 2 verschiedenen Klassen - Lösung ? Java Basics - Anfänger-Themen 8
G Refactoring von mehreren identischen Klassen Java Basics - Anfänger-Themen 36
O Wrapper Klassen Java Basics - Anfänger-Themen 6
CptK Best Practice Klassendiagramm aus fertigen Klassen erstellen lassen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben