Static

Hallo!

Folgendes Szenario:

public class Bla {
 public static void main(String[] args) {
 bla bla;
 bla = retBla();
 }

 public bla retBla() {
 return bla;
 }
}

...Compilerfehler: Cannot make static reference to method retBla...

Kann mir jemand mit ein,zwei Saetzen erklaeren, warum
retBla() auch static sein muss?

Vielen Dank
Gruss
Patrick

Sorry aber kannst du das vielleicht etwas genauer angeben… was soll das für ein bla sein dass du in retBla returnierst, ich sehe kein Feld das so heisst oder einen Parameter in der Funktion… das is mir zuviel blabla um da durchzublicken :wink:

MfG
Bruno

Hallo Patrick!

Also, ich komme aus dem Land C++ und bin noch neu in diesem Land Java. Da diese Konzepte jedoch überall gleich sind versuche ich es…

Die main Methode ist static, deine retBla jedoch nicht. Nun, static bedeutet, dass diese Methode (oder aber auch Membervariablen) nur einmal für jede Klasse erzeugt werden, im Gegensatz zur „Nicht-static“ Methoden (oder aber auch Membervariablen). Am Beispiel Methoden lässt es sich vielleicht nicht so gu erklären, sehr wohl aber bei Membervariablen:

Wenn einen Membervariable für jedes Objekt erzeugt wird, wie kann denn dan eine Methode, die nur für jede Klasse „erzeugt“ wird darauf zugreifen? Welche Variable wird denn dann von welchem Objekt verwendet?
Theoretisch könntest du eine statische Methode auch ohne ein Objekt zu erzeugen aufrufen, usw.

Ich hoffe ich habe meine verwirrenden Gedanken nicht dich verwirren lassen,
KoRn!

public class Bla { 
 public static void main(String[] args) { 
 int bla = retBla(); 
 } 
 
 public int retBla() { 
 return 1; 
 }
}

Also, warum sollte oder muss retBla() auch static sein?

Gruss
Patrick

Die Methode retBla ist eine Objektmethode und kann nur auf Instanzen vom Typ Bla ausgeführt werden, wenn du nun aber eine statische Methode aufrufst, dann gibt es kein Objekt vom Typ Bla und das geht somit nicht.

Üblicherweise kannst du in der Main-Methode einfach ein Objekt vom diesem Typ anlegen.

public class Bla {
 public static void main(String[] args) {
 Bla blainstanz = new Bla();
 int bla = blainstanz.retBla();
 }

 public int retBla() {
 return 1;
 }
}
1 „Gefällt mir“

Hi!

Wenn einen Membervariable für jedes Objekt erzeugt wird, wie
kann denn dan eine Methode, die nur für jede Klasse „erzeugt“
wird darauf zugreifen? Welche Variable wird denn dann von
welchem Objekt verwendet?

Okay, klingt logisch.
Aber, wenn ich eine normale Klasse (ohne main) implementiere
brauche ich doch nicht zwingend static Variablen, oder?
Fuer mich sieht das so aus, als wenn man sobald man main
implementiert, alle anderen Methoden auch static machen
muss. Ansonsten nicht!?

Ich hoffe ich habe meine verwirrenden Gedanken nicht dich
verwirren lassen,

Ein bisschen, trotzdem danke. :wink:

Gruss
Patrick

Gluehbirne an!
Vielen Dank!

Gruss
Patrick

Hallo Patrick!

Wenn du in deiner statischen main Methode Membervariablen, welche nicht statisch sind, verwenden willst, dann musst du ein Instanz deiner Klasse erzeugen und dann wird alles gut…

_class Hallo
{
public static void main (String [] args)
{
Hallo h = new Hallo();

h.Servus();
}

public void Servus()
{
System.out.println („Servus!“);
}
}_

Tja, ich glaub’ das wars,
KoRn!

Jau!

Danke.

Gruss
Patrick