Zugriff auf Methodenergebnisse?

Original geschrieben von squeaker
Globale Variablen sind Variablen die von überall aus erreichbar sind und änderbar sind.

public static sind zwar nicht im strengen Sinn globale Variablen, aber sie verhalten sich wie globale Variablen. Sie haben die selben schlechten Eigenschaften. Damit sind sie quasi synonym zu betrachten.

Nein das ist unsinn, es gibt keine Definition einer globalen Variable in Java. Und wenn jemand
im Bezug auf Java von Globalen Variablen spricht so ist das einfach nur falsch.
Es sind und bleiben öffentliche Klassenvariablen.

Das ist genauso wie eine Methode eine Methode ist, und niemals zu einer Funktion wird. So ähnlich
sie auch sind.
Es gibt keine Globale Variablen und keine Funktionen in Java. Und wenn mann als Anfänger wie
TomHH sich nicht gleich an die richtige Ausdrucksweise gewöhnt dann hat mann es später schwer.

Wie sie sich verhalten ist absolut unrelevant, es gibt richtige Bezeichner die genau beschreiben was
gemeint ist.

z.B Snape hat nicht verstanden was als globale Variable gemeint ist, ich auch nicht. Gewöhnt euch (du und dario) besser an die Dinge beim Namen zu nennen, dann werdet ihr auch verstanden.
 
Ok, drücken wir es so aus. Wenn jemand in Java von globalen Variablen redet, übersetze ich es automatisch in ein Konstrukt das vom Verhalten her am dichtesten den normalen globalen Variablen in C++ entspricht.
Dies sind nun einmal öffentliche statische Klassenvariablen. Diese sind natürlich nach der Definiton keine globalen Variablen - da hast du recht - aber in den Sprüchen:

"Globale Variablen sind böse" bzw. "globale Variablen zeugen von schlechtem Design"

lässt sich das "Globale Variablen" einfach durch "öffentliche statische Klassenvariablen" ersetzen ohne, dass der Sinn verloren geht.
 
Original geschrieben von squeaker
Ok, drücken wir es so aus. Wenn jemand in Java von globalen Variablen redet,
übersetze ich es automatisch in ein Konstrukt das vom Verhalten her am dichtesten den normalen globalen Variablen in C++ entspricht.

Wenn jemand von einer globalen Variable redet, dann kommt mir in den Sinn das er keine Ahnung
von Java hat.

Original geschrieben von squeaker

Dies sind nun einmal öffentliche statische Klassenvariablen. Diese sind natürlich nach der Definiton keine globalen Variablen - da hast du recht - aber in den Sprüchen:

"Globale Variablen sind böse" bzw. "globale Variablen zeugen von schlechtem Design"

lässt sich das "Globale Variablen" einfach durch "öffentliche statische Klassenvariablen" ersetzen ohne, dass der Sinn verloren geht.

Die Aussage "Globale Variablen sind böse" ist nicht Java Spezifisch und somit korrekt.
Es gibt in verschiedenen Sprachen globale Variablen, aber es gibt sie nicht in Java.

"lässt sich das "Globale Variablen" einfach durch "öffentliche statische Klassenvariablen" ersetzen ohne, dass der Sinn verloren geht."

Im Bezug auf Java würde aus einer Unsinnigen Bezeichnung eine sinnige Bezeichnung werden.

Ich glaube dir und Dario das ihr wisst das es eigentlich keine "wirklichen" globalen Java Variablen gibt. Aber für jene die mit Java anfangen, wie eben der Threadstarter, können solche falschen Bezeichnungen tötlich sein. Mann schnappt etwas falsches auf, und falsche Angewohnheiten sind schwer wegzubekommen.
Gerade im Lernfluss ist es wichtig die offiziellen Bezeichnungen zu kennen und zu nutzen, nur wenn mann jene kennt und nicht irgendwelche "Sinngemässen Bezeichnungen" kann mann technische Texte wirklich verstehen.

Demnach werde ich auch weiterhin wenn jemand von globalen Variablen und sonstigen Unsinn redet, demjenigen virtuell auf die Finger hauen :)
 
einigen wir uns drauf: egal wer java lernt oder verwendet sollte globale Variablen und öffentliche statische Klassenvariablen verwenden. (die einen gibt's nicht, die anderen sind böse)

OT: wow - ich bin bronze!
 
Original geschrieben von squeaker
einigen wir uns drauf: egal wer java lernt oder verwendet sollte globale Variablen und öffentliche statische Klassenvariablen verwenden. (die einen gibt's nicht, die anderen sind böse)

OT: wow - ich bin bronze!

*SLAP*

einigen wir uns drauf: egal wer java lernt oder verwendet sollte öffentliche (auch statische) Klassenvariablen vermeiden.

Ergänzung Snape: Statt public Variablen sind entsprechende getter und setter für die adäquaten private/protected Variablen anzulegen.
Einzige Ausnahme: Konstanten können ruhig public sein.
 
gibt es wirklich Konstanten? oder sind das nicht einfach (öffentliche) statische Klassenvariablen die nicht überschrieben werden können? *FG*
 
Original geschrieben von squeaker
gibt es wirklich Konstanten? oder sind das nicht einfach (öffentliche) statische Klassenvariablen die nicht überschrieben werden können? *FG*

Konstanten gibt es. Konstanten müssen ja auch nicht unbedingt der Klasse zugehörig sein.

Code:
private void privateMethodeMitKonstante() {
  final String TITEL = "ein konstanter String;
}

Demnach macht ist es eine unveränderliche Variable, und somit eine Konstante.
 
Hallo!

Überschrieben werden können Konstanten schon im Sinne von "man kann sie in einer erbenden Klasse wieder neu definieren" das kommt aber daher, dass statische Variablen AN DER KLASSE hängen welche so zusagen ihren Namespace angibt.

Beispiel:

Code:
public class Foo {
	protected final static String FOOBAR = "FooBar";
}

public class Bar extends Foo{

	protected final static String FOOBAR = "BarFoo";

	public static void main(String[] args) {
		
		Bar bar = new Bar();
		
		System.out.println(Foo.FOOBAR); //FooBar
		System.out.println(Bar.FOOBAR); //BarFoo
		System.out.println(((Foo)bar).FOOBAR); //FooBar
		
	}
}

Gruß Tom
 
Zuletzt bearbeitet:
Original geschrieben von squeaker
gibt es wirklich Konstanten? oder sind das nicht einfach (öffentliche) statische Klassenvariablen die nicht überschrieben werden können? *FG*

Was sind denn Variablen, die nicht überschrieben werden können? Konstanten, genau. Oder hast Du schon wieder eine andere Definition?
 
Dann als Gegenfrage, was sind dann Variablen, auf die von überall her zugegriffen werden kann?

Aber ihr habt ja recht - ich bin mir auch nicht ganz sicher was genau eine Konstante ist.

in C++ gibt es ja 2 Möglichkeiten konstante Werte zu realisieren

#define TRUE 1

ist einer - die sind echt Konstant und werden im Quelltext ersetzt.

const int true=1;

(ich bin mir mit der Syntax nicht sicher) sind ein anderer. Werden vom Compiler auch unter umständen ersetzt, das const könnte aber weggecastet werden.

in Java gibt es nur die 2te Möglichkeit (annähernd durch final), wobei allerdings das final nicht entfernt werden kann (soweit ich weis). Was davon nun eine Konstante ist und was nicht - darüber kann man sich sicher streiten. Die Unterscheidung - es wird vom Compiler Speicher in der exe/jar reserviert funktioniert leider auch nicht (die Optimierung spricht dagegen).
Vielleicht gilt ja: wenn das Datum im .const segment liegt? aber das geht in java ja nicht mehr.

Kurz - die Definitonen sind nicht immer so klar wie sie scheinen.
 

Neue Beiträge

Zurück