variablen und ihr Geltungsbereich

  • Antworten:4
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 60

22.05.2014, 19:16:46 via App

hallo zusammen.

wie der Titel schon sagt brauche ich eine Erklärung der Geltungsbereiche von variablen.

bisher kam ich mit tutorials ganz gut vorran, habe Düse auch verstanden und in meinem Projekt angepasst verwenden können.

jedoch passieren mir immer Fehler was variablen angeht.

ich erstelle datenklassen mit variablen und verbringe Stunden damit herauszufinden warum die variable sich nicht ändern lässt und erst nach einem erneuten Start korrekt dargestellt wird.

nun komme ich aus object Pascal bzw. PHP und da hatte ich bisher nicht mit static zu tun.

private und public ist mir geläufig.

Beispiel ( bitte Syntax Fehler ignorieren )

[CODE]

class appSettings {
private String userName;

public String getuserName() {
return uswrName;
}

public void setuserName( String Name ) {
userName = Name;
// sharedpreferences set function
}
}
[/CODE]

wie ihr sicher bemerkt geht es um Einstellungen :)

wie ich diese mittels sharedPreferences Auslese weiss ich auch bereits. funktioniert auch.

nun zu meiner Frage :

weshalb in Gottes Namen

ändert sich der wert nicht wenn ich diesen code ausfuhre :

[CODE]

AppSettings settings;

settings.setuserName("Sascha";);

echo settings.getuserName();
[/CODE]

für jemanden wie mich der sich da erst ein arbeitet ist das schwer zu verstehen.

Wird jetzt sicher einige geben die sagen wie doof ich dich bin oder ob diese Frage ernst gemeint ist.

aber dennoch wie ist der geltungsbereich und warum ist der wert immer der selbe bis ich die app neu gestartet habe ???

Antworten
  • Forum-Beiträge: 222

22.05.2014, 21:01:03 via Website

Hallo,
php ist jetzt auch "schwer" OOP geworden!
Dein Problem / Lösung soll eigentlich (als php- eher) Dir bekannt werden.
"IHR!!! - php- eher" habt mich von vielen Jahren auch immer zu den Grundlagen geschickt!
.... auch Dein Problem basiert aus dem Grundwissen! mangeln.

1) der die das DOT Operator (settings.setuserName(....) wird auch für statisch deklarierte Variablen ... angewendet - aber nicht nur!

2) AppSettings settings; ist lediglich eine deklaration deiner Klasse.
Um irgendwas anzusprechen, benötigst du eine initialisierung, .... instantierung .... also eine Instanz deiner Klasse.
AppSettings settings; // Klassen deklaration
settings = new AppSettings(); // (new) erzeugt eine Instanz der Klase
und jetzt wird es auch mit:
settings.setuserName(....) // aufruf der setuserName(....) Methode der AppSettings klasse
FUNKTIONIEREN.

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
  • Forum-Beiträge: 60

22.05.2014, 21:28:41 via App

erstmal danke Georg.

erstmal möchte ich mich von denen distanzieren die andere Leute einfach auf die Grundlagen verweist.

deine Erklärung ist einleuchtend und schön verständlich gemacht.

jetzt hast du mich aber zu einer weiteren Frage gebracht.

muss ich das jedesmal neu initialisieren ? oder reicht es in der oncreate einer activity ??

oder jedes mal wenn ich darauf zugreifen will ???

den code hab ich aus dem Kopf geschrieben. in der APP habe ich die Initialisierung in der onCreate wie du oben beschrieben hast erstellt gehabt.

ich gebe zu das mir ab und an Grundlagen wissen in java fehlt.

deshalb Frage ich ja, wie kann man etwas besser verstehen wenn man etwas noch nicht verstanden hat ??

fragen :)

kein Buch kann eine Konversation ersetzten um jegliche Missverständnisse im Keim zu ersticken.

also nochmal danke :)

mit dem static ,wann man eine variable static deklariert, und wann nicht ist das was mir noch nicht ganz klar ist.

Antworten
  • Forum-Beiträge: 222

22.05.2014, 23:07:14 via Website

Hi,

... erstmal möchte ich mich von denen distanzieren die andere Leute
einfach auf die Grundlagen verweist

Und ich werde SEHR GERNE den Gebrauch davon (Grundlagen lernen) machen!

... kein Buch kann eine Konversation ersetzten um jegliche
Missverständnisse im Keim zu ersticken

Ich besitze (und habe die alle gelesen) "paar" Java Bücher, und habe davon gelernt; was keines Forum ersetzen könnte! - aber

Abstrahierend davon und bei alla Respekt!
Sascha; hmmmmm
1) muss ich das jedesmal neu initialisieren ?
- NEIN
2) oder reicht es in der oncreate einer activity ??
- was ? initialisieren oder instantieren?
In der oncreate einer activity muss / kann oder soll eine Instanz eine Klasse neu erzeugt werden.
Bin ich gemein? - nein - alles oberes stimmt!
Es kommt auf den Programmrumpf, ... Logik usw. an. (man nennt das auch Programmlayout)

Fazit:
eine in der onCreate Methode der MainActivity Klasse erzeugte Instanz, wird (erstmal) so lange leben wie die MainActivity selbst.
Zugriff auf Methoden ... Felder ... werden immer gültig sein.
Also weitere Instanzen der Klassen sind (im "Normalfall";) nicht nötigt, belasten unnötig den Speicher, und führen zu Fehlern.
NUN!!!! - es soll Dir bewusst sein, dass wir hier! - sich über die Grundlagen unterhalten!
Deshalb SORRY- bin raus.

LG
Georg

Ps.
Android hat aber sein "eigenes System", kann sein, das ich (gerade was Life- .... UI .. betrifft) was Falsches sage - bin noch Anfänger.

— geändert am 22.05.2014, 23:09:44

Sorry für Gramatik & Stilistik Fehler.

Antworten

Empfohlene Artikel