Das leidige Thema static....

Hallo,
ich habe eine kleine Klasse mit Hauptprogramm programmiert, weil mir eine Sache noch nicht klar ist.

Java:
public class Haus {

    private String name;
    private String farbe;
   
    public Haus() {
       
    }
   
    public Haus(String name, String farbe) {
        this.name=name;
        this.farbe=farbe;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFarbe() {
        return farbe;
    }

    public void setFarbe(String farbe) {
        this.farbe = farbe;
    }
}

Java:
public class HausTest {
   
    static Haus haus1 = new Haus();
    static Haus haus2 = new Haus("Haus 1", "rot");
   
    public static void main(String[] args) {
       
        Haus haus3 = new Haus("Haus 1", "rot");
        Haus haus4 = new Haus("Haus 4", "grün");
       
        final Haus haus5 = new Haus();
        haus5.setFarbe("weiss");
       
        System.out.println("Farbe: " + haus1.getFarbe() + "\tName: " + haus1.getName());
        System.out.println("Farbe: " + haus2.getFarbe() + "\tName: " + haus2.getName());
        System.out.println("Farbe: " + haus3.getFarbe() + "\tName: " + haus3.getName());
        System.out.println("Farbe: " + haus4.getFarbe() + "\tName: " + haus4.getName());
        System.out.println("Farbe: " + haus5.getFarbe() + "\tName: " + haus5.getName());
    }
}

1) haus1 und haus2 kann man bestimmt nicht in der main-Methode definieren, weil diese static sind. Aber warum ist das so, dass man statische Variablen nicht in der main definieren kann/darf?

2) haus5 ist als final deklariert. Trotzdem kann ich die Hausfarbe ändern. Was bewirkt also dieses final?

3) Mir ist noch nicht der Unterschied zwischen diesen beiden Codezeilen bekannt. Beide geben dasselbe auf der Konsole aus aber nur haus2 ist static.
Wann verwendet man, welche Variante?

static Haus haus2 = new Haus("Haus 1", "rot");
Haus haus3 = new Haus("Haus 1", "rot");
 

JStein52

Top Contributor
Aber warum ist das so, dass man statische Variablen nicht in der main definieren kann/darf?
Welche Eigenschaft (in Worten) sollte eine static-Variable haben die du in main deklarierst ? Sie ist eh nur lokal in main gültig. Static bedeutet aber im Kontext einer Klasse gültig. Dann musst du diese Definition auch so bei der Klasse, nicht in der Methode unterbringen.
Was bewirkt also dieses final?
Versuche mal haus5 ein neues Haus() zuzuweisen. Dann siehst du was es bewirkt
Wann verwendet man, welche Variante?
Beide Varianten beschreiben ein Haus mit den gleichen Eigenschaften, also wird auch das gleiche ausgegeben.
Und static verwendet man dann wenn es sinnvoll ist. http://openbook.rheinwerk-verlag.de...tml#dodtp866b6111-d90d-4a76-b824-b4cb3d527f05
 
Statische Methoden und Variablen benötigen doch keinerlei Instanzen einer Klasse?
Mich verwirrt einfach, dass man mit einer statischen Variable den Konstruktor aufrufen kann.
Dasmüsste doch nur mit nichtstatischen Variablen gehen?

static Haus haus2 = new Haus("Haus 1", "rot");

Was ist hiermit gemeint?
"Eine Klassenmethode bzw. eine Klassenvariable gilt für alle Instanzen einer Klasse."
 

AndyJ

Bekanntes Mitglied
"Eine Klassenmethode bzw. eine Klassenvariable gilt für alle Instanzen einer Klasse."
static ist einfach nur ein bloeder Name, keine Ahnung wieso die das so benannt haben. Letztendlich bedeutet das nur, dass eine Variable oder eine Methode zur Klasse direkt gehoeren. Statt

Code:
 System.out.println("Farbe: " + haus2.getFarbe() + "\tName: " + haus2.getName());

hattest du auch


Code:
 System.out.println("Farbe: " + HausTest.haus2.getFarbe() + "\tName: " + HausTest .haus2.getName());

schreiben koennen. Du musst also nicht erst eine Instanz von HausTest erzeugen, um auf haus1 und haus2 zugreifen zu koennen.
 

JStein52

Top Contributor
Du hast eine (static ) Klassenvariable in der Klasse HausTest namens haus2 und diese zeigt auf ein Objekt vom Typ Haus. Das macht hier jetzt keinen grossen Sinn weil es halt ein Minimalbeispiel ist. Aber wo genau hast du das Problem ? Wenn haus2 jetzt vom Typ int wäre und eine 17 enthält, würdest du dann mehr sinn drin sehen ? Oder wenn haus2 vom Typ String wäre und auf ein String-Objekt zeigt ???
 

AndyJ

Bekanntes Mitglied
Eine Klassenvariable kann man als globale Variable ansehen, leicht darauf zuzugreifen von ueberall her. Ein enum z.B. ist genau das. Ob und wann es Sinn macht, haengt ja von deinen Anforderungen ab.
 
Aber wo genau hast du das Problem ?

1)
Genau, das verwirrt mich. Eine Klassenvariable in der Klasse HausTest namens haus2 zeigt auf ein Objekt vom Typ Haus. Im Allgemenen: statischer Kontext = Nichtstatischer Kontext
Mich verwirrt, dass soetwas überhaupt möglich ist.
2)
Und immer noch was es für einen Unterschied macht zwischen static Haus haus1 = new Haus(); und Haus haus2 = new Haus();

Mit haus1(welches static ist) und haus2(nichtstatisch) kann ich auf dieselben Methoden zugreifen.
 

JStein52

Top Contributor
was es für einen Unterschied macht zwischen static Haus haus1 = new Haus(); und Haus haus2 = new Haus();
Keinen. Beide (haus1 und haus2) verweisen auf eine Instanz von Haus.
Mit haus1(welches static ist) und haus2(nichtstatisch) kann ich auf dieselben Methoden zugreifen.
Ja klar, siehe oben. Der Unterschied liegt nicht darin wie du auf die Objekte zugreifen kannst auf die beide verweisen sondern darin wie du auf haus1 und haus2 zugreifen kannst.
Auf haus1 (static) kannst du über HausTest.haus1 zugreifen. Auf haus2 (nicht static) kann du über meineInstanzVonHausTest.haus2 zugreifen
 

Flown

Administrator
Mitarbeiter
Auch solltest du wissen, dass es nur ein Objekt gibt, dass haus1 referenziert und für jedes neu angelegt Haus-Objekt (EDIT: eigentlich HausTest) auch ein neues haus2-Objekt erstellt wird.
 
Zuletzt bearbeitet:
Also zusammengefasst kann man sagen, dass

static Haus haus2 = new Haus("Haus 1", "rot"); und Haus haus3 = new Haus("Haus 1", "rot"); dasselbe sind. Nur der Zugriff darauf ist anders?
HausTest.haus1.getFarbe();
haus3.getFarbe();
 

Flown

Administrator
Mitarbeiter
Es kommt drauf an wie du das Selbe definierst.
Kurz: Beide Objekte sind das Gleiche und nicht das Selbe.

Lang: Es sind verschiedene Objekte mit dem gleichen Inhalt.

Auch der Zugriff ist anders, oder besser Scope. Bei dem einen brauche ich explitzit ein Objekt bei dem anderen (static) nur die Klasse.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kotelettklopfer Java und das leidige Thema "wording" Java Basics - Anfänger-Themen 61
G Dieses leidige ID Thema Java Basics - Anfänger-Themen 9
W Die leidige Referenz-Frage Java Basics - Anfänger-Themen 9
S Prüfungsvorbereitung Januar ( Thema Ausdrücke ) Java Basics - Anfänger-Themen 14
N Thema Vererbung Java Basics - Anfänger-Themen 31
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
V Hilfe zum Thema einlesen eines Datums Java Basics - Anfänger-Themen 5
F Concurrent Thema Java Basics - Anfänger-Themen 6
T Klassen Kleine Übung zum Thema Klassen Java Basics - Anfänger-Themen 3
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
E Erste Schritte Vorschläge für mich zum Thema Punkt vor Strich ? Java Basics - Anfänger-Themen 7
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
J Verständnisfragen zu dem Thema Objekten Java Basics - Anfänger-Themen 7
D Zähler nicht sichtbar (Thema: Konstruktoren) Java Basics - Anfänger-Themen 2
A Hilfestellung zum Thema Persistenz Java Basics - Anfänger-Themen 12
J Frage zum Thema ... alles mögliche! Java Basics - Anfänger-Themen 6
P Noch zum Thema Arrays Java Basics - Anfänger-Themen 13
T Bin Anfänger ... das Thema auch ? Java Basics - Anfänger-Themen 10
N JAR das Endlose Thema Java Basics - Anfänger-Themen 2
J Neues Forum Thema erstellen mit java(httpclient) Java Basics - Anfänger-Themen 11
Dit_ Frage zum Thema Speicherreservierung Java Basics - Anfänger-Themen 3
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
I Verständnisfrage zum Thema APIs Java Basics - Anfänger-Themen 6
N Das alte Thema "File Encoding" Java Basics - Anfänger-Themen 2
D Frage zum heiss geliebten Thema MVC Java Basics - Anfänger-Themen 24
D Abschlussklasse 13 Projektarbeit, thema? Java Basics - Anfänger-Themen 15
J Fragen zum Thema Arrays Java Basics - Anfänger-Themen 5
P Applet not inited - leidiges Thema Java Basics - Anfänger-Themen 6
Z leidiges Thema Datumsformatierung Java Basics - Anfänger-Themen 3
G Leidiges Thema Classpath Java Basics - Anfänger-Themen 5
G Syntax der if-Anweisung (Thema getrennt!) Java Basics - Anfänger-Themen 7
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
A Instance methods should not write to "static" fields Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
H Static Java Basics - Anfänger-Themen 5
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
L non-static Fehler Java Basics - Anfänger-Themen 16
S Klassenmethode ohne static Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
V the static method should be accessed is a static way Java Basics - Anfänger-Themen 6
NormanPatrickBenner static non-static Java Basics - Anfänger-Themen 82
N Erste Schritte "non-static method" oder "XYZ can not be resolved" Java Basics - Anfänger-Themen 21
B Email versenden, muss Methode static sein? Java Basics - Anfänger-Themen 7
R static in der Methode Java Basics - Anfänger-Themen 2
E Problem mit static Methode Java Basics - Anfänger-Themen 4
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
T Datentypen enum static Chaos (blutiger anfänger) Java Basics - Anfänger-Themen 5
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
T Problem mit static Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
snipesss Was kann 'static'? Java Basics - Anfänger-Themen 4
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
E Objekte und static Java Basics - Anfänger-Themen 2
K Methoden Methoden in Methoden -> static oder nicht? Java Basics - Anfänger-Themen 7
D Erklärung static boolean Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
F Static final Klasse Java Basics - Anfänger-Themen 0
N static und Objekt kombiniert?!? Java Basics - Anfänger-Themen 3
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
A Static variablen --- Anwendungsbereich Java Basics - Anfänger-Themen 11
B Erste Schritte Wie komme ich aus Static raus?!! Java Basics - Anfänger-Themen 4
V Static Methods Java Basics - Anfänger-Themen 5
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
B static individuell "vererben"? Java Basics - Anfänger-Themen 8
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
T Static Fehler Java Basics - Anfänger-Themen 1
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben