Static char Problem

xyZman

Bekanntes Mitglied
Hi, ich habe hier in meiner Klasse BTFigur 2 static chars die jeweils die Konstanten returnen sollen.
Allerdings sagt er mir hier : The method getAFigur cannot be declared static; static methods can only be declared in a static or top level
type.

Wenn ich die Klasse extern irgendwo ablege gibt es kein Problem diesbezüglich.
Wo ist denn der Fehler ?

lg

Java:
class BTFigur{
final static char KREUZ='x';
final static char KREIS='o';
final static char LEER='.';

boolean aOderB;
int zeile,spalte;

 BTFigur(boolean aOderB, int zeile,int spalte){
	 this.aOderB =aOderB;
	 this.zeile= zeile;
	 this.spalte=spalte;
 }
 boolean istAFigur(){
	 return this.aOderB;
 }
 boolean istBFigur() {
		return !this.istAFigur();
 }
 int getZeile() {
		return this.zeile;
	}

	int getSpalte() {
		return this.spalte;
	}
	
  static char getAFigur() {
		return KREUZ;
	}

	static char getBFigur() {
		return KREIS;
}
   char getLeer(){
	   return LEER;
   }
}
 

chalkbag

Bekanntes Mitglied
Um statische Variablen per Methode zurück zu geben muss die Methode nicht statisch sein. Also entweder static weg von der Methodendeklaration oder die static variablen public /protected machen und einfach per BFFigur.KREUZ ansprechen, so muss keine Instanz von BFFigur zwangsweise existieren. (Methode 2 nur wenn die entsprechenden Variablen auch final sind).
 

ARadauer

Top Contributor
static methods can only be declared in a static or top level type.
mhn ja doch eindeutig... man kann anscheinend keine statischen methoden in inneren klassen machen, wenn diese nicht statisch sind... ist mir zwar neu, arbeite aber auch ganz selten mit inneren klassen...
 

hdi

Top Contributor
man kann anscheinend keine statischen methoden in inneren klassen machen, wenn diese nicht statisch sind... ist mir zwar neu
Trifft übrigens nicht nur auf Methoden zu:Ich wollte mir auch erst kürzlich ein paar statische Konstanten in ner inner class definieren. Selber Fehler. Fand ich dann auch ziemlich doof dass das nicht geht. Hat dafür jemand eine Erklärung?
 
N

nillehammer

Gast
Fand ich dann auch ziemlich doof dass das nicht geht. Hat dafür jemand eine Erklärung?
Nicht statische innere Klassen existieren nur, wenn es eine Instanz der äußeren Klasse gibt. Um auf statische Felder einer Klasse zuzugreifen, muss diese aber existieren. Da das bei der genannten Konstellation nicht garantiert ist, geht static eben nicht.

Anders herum gesagt, gibt es die nicht statische innere Klasse mehrmals. Auch so rum wäre ein Zugriff auf statische Felder/Methoden anders als bei einer echten Klasse. Auch das mag ein Grund sein, wieso es nicht geht.

Es wird empfohlen, innere Klassen immer static zu machen (z.B. siehe Effective Java von Joshua Bloch).
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
> Nicht statische innere Klassen existieren nur, wenn es eine Instanz der äußeren Klasse gibt.

dann kann man genauso wieder fragen warum das so ist, dass die Objekte von den umgebenden Instanzen abhängen ist ja klar,
warum aber die Klasse?

zudem:
Java:
public class Test {
    public static void main(String[] args)  {
        Class c = Test.Inner.class;
        System.out.println(c); // schon vor Objekterzeugung da

        Test a = new Test();
        Test b = new Test();

        Inner d = a.new Inner();
        Inner e = b.new Inner();

        System.out.println(d.getClass() == e.getClass()); // true
    }

    class Inner {      
    }
}

---

@hdi
finale Konstanten sollten aber wiederum gehen und statische innere Klassen erlauben wiederum alles,
hier steht bestimmt noch ne Menge:
java - Why cant we have static method in an inner class? - Stack Overflow
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
dann kann man genauso wieder fragen warum das so ist, dass die Objekte von den umgebenden Instanzen abhängen ist ja klar,
warum aber die Klasse?
Dieses Konstrukt gibt es, weil es mit nicht statischen inneren Klassen möglich ist, direkt auf die Instanzvariablen der äußeren Klasse zuzugreifen. Das geht nur, wenn es den Bezug/die Abhängigkeit von einer Instanz der äußeren Klasse gibt.
 
S

SlaterB

Gast
siehe auch mein edit im vorherigen Posting,
ich weiß nicht was genau du meinst aber die Existenz einer Klasse (nicht der Objekte) kann eigentlich nicht in Frage stehen,
und wenn es die Klasse gibt, dann auch die statischen Konstanten?
 

hdi

Top Contributor
finale Konstanten sollten aber wiederum gehen
Krass, ich hab's grad nochmal getestet weil ich ja in Erinnerung hatte dass das eben nicht ging bei mir. Und jetzt check this shit:

Java:
public class Clazz {

	class Inner{
		
		private static final int i = 10; // no problem

	}
}

Geht tatsächlich, wie du sagst. Aber was ich damals hatte war das hier:

Java:
public class Clazz {

	class Inner{
		
              private static final Color c = Color.RED;

	}
}

Und DAS gibt: The field c cannot be declared static; static fields can only be declared in static or top level types

ABER:

Java:
public class Clazz {

	class Inner{
		
		private static final String c = "das hier geht auch!!";
	}
}

Hab grad paar Typen durchprobiert. Meine erste Vermutung ist jetzt dass sich diese Konstanten auch nur auf diejenigen Typen beschränken, die im java.lang package liegen?!
 
S

SlaterB

Gast
in der Tat sehr merkwürdig, bei String ist null wiederum ein Problem..,

außer String als halb-primitiver Typ habe ich noch gar keine andere Klasse geschafft,
mit Object oder Comparable als Variablen-Typ ließen sich ja auch beliebige Objekt reinschmuggeln
 

hdi

Top Contributor
Hast wohl Recht, ich hab's auch nur mit nem String hinbekommen bisher. Arrays gehen auch nicht.

PS: Aha, Strings geht wohl nur wg. dem constant Pool. Denn mittels new-Erzeugung geht's auch mit Strings nicht. Also nur String Literale und primitive Typen, wie's aussieht. Merkwürdig ist dass die Compiler Meldung dann ja eigentlich schlicht falsch ist. Steht darüber denn nix in der JLS?

edit: Ok hat sich erledigt, danke tfa
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
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
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
W Variablen Automatisch static? Java Basics - Anfänger-Themen 3
O Warum muss ich static? Java Basics - Anfänger-Themen 6
O Static Java Basics - Anfänger-Themen 15
E non-static method und static context Java Basics - Anfänger-Themen 15
B non static interface Methode Java Basics - Anfänger-Themen 16
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
S Static void Methode Java Basics - Anfänger-Themen 12
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
O Main-Methode static modifier umgehen Java Basics - Anfänger-Themen 10
J Variablen non-static variable Java Basics - Anfänger-Themen 2
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
J static - Methoden Java Basics - Anfänger-Themen 22
X Erste Schritte Methode ohne Static Java Basics - Anfänger-Themen 4
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
S Methoden Warum ist sleep static? Java Basics - Anfänger-Themen 9
K static, non-static Krise Java Basics - Anfänger-Themen 4
R Schlüsselworte static Methoden und Imports Java Basics - Anfänger-Themen 10
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
Y Gebrauch von static Java Basics - Anfänger-Themen 29
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
T getClass() im static Kontext Java Basics - Anfänger-Themen 12
S Frage zu public static Java Basics - Anfänger-Themen 29
M Problem mit Static Method Java Basics - Anfänger-Themen 8
H Methoden Static ? Java Basics - Anfänger-Themen 10
K Erste Schritte Zugiff ohne static Java Basics - Anfänger-Themen 5
H static final vs. final static Java Basics - Anfänger-Themen 3
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben