Statische Variablen stehen direkt in der Klasse, in Blöcken stehen nur lokale Variablen, die können maximal final sein.statische variablen in static Blcoks
„Globale Variablen“ gibt’s in Java nicht. Klassenvariablen (also statische) werden nur oftmals so genannt.Klassenvariablen, genauso wie die globalen Variablen
Globale variablen existieren von Anfang bis zum Ende eines Programms und sind überall verfügbar.„Globale Variablen“ gibt’s in Java nicht. Klassenvariablen (also statische) werden nur oftmals so genannt.
Oder man nennt sie wie üblich Klassenvariable oder statische Variable und spart sich den Namen, unter dem jeder was anderes versteht und der nicht wirklich gut passt 🤷♂️Globale variablen existieren von Anfang bis zum Ende eines Programms und sind überall verfügbar.
Klassen Variablen erfüllen diese Kriterien wenn sie public definiert sind. Von daher würde ich sagen globale Variablen existieren in Java.
Ui, was ist das denn für eine Aussage? Lokale Variablen haben natürlich keinen Modifier.Statische Variablen haben modifier, nicht anders als normale Variablen.
In dem Fall meinte ich tatsächlich nur, dass normale Instanzvariablen die gleichen (bis auf static natürlich) Modifier wie statische Variablen haben können.@mrBrown meint wahrscheinlich aber alle Modifier (also auch Non-Access Control Modifier) wie z.B. final (bzw. auch _nur_ final bei lokalen Variablen.
Typ | static | static final | non-static | local or Block | parameters |
Bezeichnung | Klassenvariable | Konstante | Instanzvariable | Lokale Variable | Parameter |
Access Modifier | alle | alle | alle | keine | keine |
Non-Access Modifier | alle | alle | alle | nur final | nur final |
Sichtbarkeit | ab Deklaration | ab Deklaration | ab Deklaration | Block | Methode |
Noch welche vergessen?
abstract
und synchronized
sind für keine Variable/Konstante gültigstimmt! Danke.abstract
undsynchronized
sind für keine Variable/Konstante gültig
static
{
int a = 4;
}
public static int b= 3;
Das ist kein statisches Feld sondern eine lokale Variable in einem statischen BlockJava:static { int a = 4; }
Es ist richtig, dass lokale Variablen keinen Modifire haben. Jedoch ist es so, dass diese Variable nicht lokal ist. Sie wird deklariert und initialisiert, sobald die Klasse aufgerufen wird.
eine Klassenvariable bezeichnet zumindest Oracle im Prüfungsvorbereitungsbuch wie folgt:
Java:public static int b= 3;
Bitte vergiss den Begriff globale Variablen, besonders dass du es in Zusammmenhang mit Instanzvariablen bringst ist Unsinn.Klassenvariablen, globale bzw. Instanzvariablen und lokale Variablen
Hast Du Dich da verschrieben? Meintest Du nicht eher, dass er den Begriff globale Variablen vergessen soll? Denn die bringt er ja in Zusammenhang mit Instanzvariablen - dabei wären es die Klassenvariablen, die man auch als globale Variablen bezeichnen könnte (wobei ich das im Java Bereich auch eigentlich nie höre - das sind und bleiben einfach statische VariablenBitte vergiss den Begriff lokale Variablen, besonders dass du es in Zusammmenhang mit Instanzvariablen bringst ist Unsinn.
Ha, ja, das sollte natürlich global heißen 😅Hast Du Dich da verschrieben? Meintest Du nicht eher, dass er den Begriff globale Variablen vergessen soll? Denn die bringt er ja in Zusammenhang mit Instanzvariablen - dabei wären es die Klassenvariablen, die man auch als globale Variablen bezeichnen könnte (wobei ich das im Java Bereich auch eigentlich nie höre - das sind und bleiben einfach statische Variablen).
Das ist nicht ganz richtig: Klassen(variablen) können aufgrund des ClassLoader-Konzepts mehrfach existieren.Globale variablen existieren von Anfang bis zum Ende eines Programms und sind überall verfügbar.
Klassen Variablen erfüllen diese Kriterien wenn sie public definiert sind. Von daher würde ich sagen globale Variablen existieren in Java.
Das sieht der App-Server anders.IdR lädt der Class Loader alle Klassen in einem Rutsch, von daher ist das Korinthenkackerei.
Im Script der Ludwig Maximilian Unversität München wird im Bereich Java von Globalen Variablen gesprochen.dabei wären es die Klassenvariablen, die man auch als globale Variablen bezeichnen könnte (wobei ich das im Java Bereich auch eigentlich nie höre - das sind und bleiben einfach statische Variablen
Nach dem ersten Hören sollte man diese Vorlesung aber auch wieder vergessen 🤨Im Script der Ludwig Maximilian Unversität München wird im Bereich Java von Globalen Variablen gesprochen.
Siehe Seite 4 https://www.dbs.ifi.lmu.de/Lehre/EIP/WS1617/skript/script-kap06-3.pdf
Dann hast Du auch einmal im Bereich Java davon gehört.![]()
Dass das in einem Skript der LMU steht, macht die Aussage aber nicht richtiger. Man kann mittels public static in vielen Fällen Klassenvariablen haben, die sich praktisch wie globale Variablen verhalten. Nur funktioniert das nicht immer, so dass Klassenvariable und globale Variable schlicht nicht gleichwertig sind.Im Script der Ludwig Maximilian Unversität München wird im Bereich Java von Globalen Variablen gesprochen.
Siehe Seite 4 https://www.dbs.ifi.lmu.de/Lehre/EIP/WS1617/skript/script-kap06-3.pdf
Dann hast Du auch einmal im Bereich Java davon gehört.![]()
Vielen Dank, dass Du dafür sorgen willst, dass ich auch davon gehört habe. Wobei ich schon zuvor davon gehört habe: Hier im Forum im ThreadIm Script der Ludwig Maximilian Unversität München wird im Bereich Java von Globalen Variablen gesprochen.
Siehe Seite 4 https://www.dbs.ifi.lmu.de/Lehre/EIP/WS1617/skript/script-kap06-3.pdf
Dann hast Du auch einmal im Bereich Java davon gehört.![]()
public class MitGlobalerVar {
public static int sum = 0;
public static void add(int x) {
sum = sum + x;
}
public static void main(String[] args) {
int sum = 0;
add(3);
add(5);
add(7);
System.out.println("Summe: "+sum);
}
}
Ich denke, dass dort eigentlich die Konzepte imperativer Programmierung im Vordergrund stehen und diese "ungücklicherweise" anhand von Java erklärt werden. Wahrscheinlich war das früher ein Pascal-Kurs ;-)Ich wundere mich doch etwas, das eine Uni das so angeht.
Wenn imperative Konzepte im Vordergrund stehen, nimmt man einfach nicht Java sondern eine Sprache, die dabei weniger Overhead erfordertWenn imperative Konzepte im Vordergrund stehen sollen, dann schreibt man alles mit static in eine Klasse; und ignoriert die Klasse sowie das static einfach...
static: Mit dem static Schlüsselwort gehört es zur Klasse, d.h. es ist keine Instanz notwendig. Ohne static Schlüsselwort gehört es zur Instanz.
Das gleiche. Wie oben geschrieben: eine statische Variable (=Klassenvariable) ist ein Attribut, das sich nicht einem einzelnen Objekt sondern nur der Gesamtheit aller Objekte zuordnen lässt. Daher wird keine Instanz für den Zugriff darauf benötigt. Der Einsatz in der Objektorientierung ist aber sehr beschränkt, schließlich orientiert sich das Attribut gerade nicht mehr an ObjektenWenn eine static Variable zur Klasse gehört, welche Vorteile hat es dann?
Statische Methoden kann man aufrufen ohne zuvor eine Instanz erzeugt zu haben, aber wie es es bei Variablen?
Was erreicht man mit Hilfe von static bei Variablen?
public class Auto {
private static long count;
private String vin;
public Auto(String vin) {
Auto.count++;
this.vin = vin;
}
public String getVin() {
return this.vin;
}
public static long numberOfInstances() {
return Auto.count;
}
}
Naja es eignet sich auch super als counter so wie ich das jetzt gelernt habe. Da diese Variable nicht für jedes Objekt zurückgesetzt wird.Das gleiche. Wie oben geschrieben: eine statische Variable (=Klassenvariable) ist ein Attribut, das sich nicht einem einzelnen Objekt sondern nur der Gesamtheit aller Objekte zuordnen lässt. Daher wird keine Instanz für den Zugriff darauf benötigt. Der Einsatz in der Objektorientierung ist aber sehr beschränkt, schließlich orientiert sich das Attribut gerade nicht mehr an Objekten![]()
Jein, das ist zwar eine einfache Lösung, hat allerdings auch ziemliche Nachteile. Eine einfache Grundregel für statische Felder ist, dass die keinen veränderbaren Zustand haben sollten, damit fährt man nahezu nie falsch.Naja es eignet sich auch super als counter so wie ich das jetzt gelernt habe. Da diese Variable nicht für jedes Objekt zurückgesetzt wird.
Okay danke und nützlicher Tipp. In der Vorbereitung auf das OCA finde ich immer wieder diese statischen Blöcke und auch statische Variablen als Counter. Vielleicht abe rauch nur, da es so am einfachsten ist, das abzufragen.Jein, das ist zwar eine einfache Lösung, hat allerdings auch ziemliche Nachteile. Eine einfache Grundregel für statische Felder ist, dass die keinen veränderbaren Zustand haben sollten, damit fährt man nahezu nie falsch.
Das kann schon sein. Man spart sich ein "new"In der Vorbereitung auf das OCA finde ich immer wieder diese statischen Blöcke und auch statische Variablen als Counter. Vielleicht abe rauch nur, da es so am einfachsten ist, das abzufragen.