Java Methode kann nicht ausgeführt werden, da kein static

TheWalkingJoke

Lt. Junior Grade
Registriert
Aug. 2014
Beiträge
414
Hallo zusammen,
ich habe folgendes Problem:
Ich habe im Public class ein paar Variablen erzeugt. Diese brauche ich nachher in einer Methode. Wenn ich die Methode nachher im Main aufrufen will, dann kriege ich eine Fehlermeldung, ich soll die Methode nicht public void Methode(){} machen sondern public static void Methode(){}. Wenn ich das mache, dann kann ich in der Methode nicht mehr auf die Variablen aus dem public class zugreifen.

Code:
public class Name1{
double x = 3.5;
}

public void Methode(){
System.out.println(x);
}

public static void main(String[] args) {
Methode();                    <--------- Fehlermeldung
}

Der Code ist nicht so wie hier, allerdings vom Prinzip her schon. Ich will nur im main nicht so viel script haben.

Gibt es da eine Möglichkeit?
 
Du musst ein Objekt der Klasse Name1 anlegen, sonst geht es schlicht nicht.
 
Code:
public class Name1 {
    double x = 3.5;

    public void Methode() {
        System.out.println(x);
    }
 
    public static void main(String[] args) {
        Name1 deinObjekt = new Name1(); // Legt eine Variable "deinObjekt" des Typs "Name1" an, erzeugt ein Objekt des Typs "Name1" und weist dieses der Variablen zu
        deinObjekt.Methode();
    }
}
 
Es gibt viele Möglichkeiten das Problem zu lösen.

Als erstes sollte man wissen was static bedeutet und wieso man dieses einsetzt.

static legt objekte sofort an, heißt man brauch zb eine Klasse nicht instanziieren um eine enthaltene Methode aufzurufen. Deswegen müssen alle Teile in solch einer Methode auch static sein, weil es zu Laufzeitfehlern führen würde, weil zb Methode xy mit Werte arbeitet die garnicht angelegt wurden.



Es sollte auch reichen die Methode Static zu machen.

Code:
    public class Name1{
    double x = 3.5;
    }
     
    public static void Methode(double x){
    System.out.println(x);
    }
     
    public static void main(String[] args) {
    Name1 meineKlasse = new Name1();    // Objekt anlegen welche Variable x enthält
    Methode(meineKlasse.x);
    }
 
Zuletzt bearbeitet:
Static bei Methoden legt keine Objekte an, weder "sofort" noch sonst irgendwann.

Außerdem ist der Variablenname "meineKlasse" fehl am Platz, da die Variable keine Klasse referenziert.
 
Was ist das dann?

Code:
    public class Name1{
    double x = 3.5;
    }

Aus dem MSDN:
Eine statische Klasse gleicht im Grunde einer nicht statischen Klasse, mit einem Unterschied: eine statische Klasse kann nicht instanziiert werden. In anderen Worten, Sie können das new-Schlüsselwort nicht verwenden, um eine Variable des Klassentyps zu erstellen. Da keine Instanzvariable vorhanden ist, greifen Sie auf die Member einer statischen Klasse mit dem Klassennamen selbst zu.

Ich wollte es nur mit einfachen Worten ausdrücken.

Ps ist halte mich an den Code Schnipsel des Threaderstellers. Nicht an den umgebauten Code von Wa1lock.
 
Zuletzt bearbeitet:
Das ist eine gewöhnliche top-level Klasse, an der nichts statisch ist. Java hat keine static top-level Klassen. Dein Doku-Auszug ist von C#.

Statische klassen gibt es in Java nur nested und sie sind sehr wohl instantiierbar:
Code:
public class Sandbox {

    public static class StaticClassTest {
        double number = 5.0;
    }

    public static void main(String[] args) {
        StaticClassTest staticClassTest = new Sandbox.StaticClassTest();
        double number = staticClassTest.number;
        System.out.println(number);
    }
}
Ansonsten hat character Recht. Wenn eine Klasse geladen wird und dementsprechend ihre statischen Felder initialisiert werden, hat das nichts mit der Erzeugung eines Objekts dieser Klasse (ggf. aber deren Felder) zu tun. Und eine Klasse kann zudem durchaus statische und nicht-statische Felder und Methoden enthalten.
 
Zuletzt bearbeitet:
Zurück
Oben