Schlüsselworte static Methoden und Imports

RolandK

Mitglied
Hallo Leute,

ich habe mal eine generelle Frage zu static Methoden und static Imports.

Mein Projekt besteht aus 17 Klassen und ca. 3400 Zeilen Netto-Code.

Es gibt eine Klasse (A), die eine Art Hauptprogramm darstellt und auch die main()-Methode enthält. In dieser Klasse werden Konstanten und Objekte definiert und instanziiert. Andere Klassen müssen auf diese Elemente zugreifen können.

Bisher ist diese Klasse A (850 Zeilen Code) so implementiert, dass alle Konstanten, Objekte und Methoden als static deklariert sind. Andere Klassen, die auf diese Elemente zugreifen müssen benutzen als import-Statement "import static Package-Name.A.*;" Die meisten Methoden der Klasse A sind private.

Ist das ok so, oder gibt es eine bessere Art, das zu implementieren? Soll / muss man von dieser Klasse ein Objekt erzeugen (das dann nur einmal existiert)? Und wie sähe dann das import-Statement aus?

Danke, Roland
 

Int42

Mitglied
Du kannst die Klasse auch ohne "static" importieren, dann musst du aber die statischen Eigenschaften mit dem Klassennamen ansprechen:
Java:
A.eigenschaft;

Wenn du aber die statischen Eigenschaften der Klasse oft verwendest, ist es vielleicht mühselig, immer den Klassennamen voranzustellen. Dann ist es z.B. besser, einen static import zu verwenden:
Java:
import static PackageName.A.*;
 

Schandro

Top Contributor
Ist das ok so, oder gibt es eine bessere Art, das zu implementieren? Soll / muss man von dieser Klasse ein Objekt erzeugen (das dann nur einmal existiert)? Und wie sähe dann das import-Statement aus?
Eventuell ist es schöner aus
Code:
A
ein Singleton zu machen, dass musst du aber selber entscheiden.

Generell gesehen würde ich mir um
Code:
import
keine Gedanken machen, imports sind immer der unwichtigste Teil eines Quellcodes. Ich persönlich halte nichts von static imports, da es auf dem ersten Blick eher verwirrend aussieht und eine Technick ist die sehr selten genutzt wird. Außerdem bereitet es später eventuell Arbeit wenn man die static imports aus irgendeinen Grund wieder entfernen will.
 
Zuletzt bearbeitet:

RolandK

Mitglied
@ Schandro: Die static Imports hat mir IntelliJ IDEA automatisch eingebaut, nachdem es gesehen hat, dass ich auf statische Konstanten/Variablen zugreife. Fand ich ganz praktisch, die Konstanten/Variablen direkt nutzen zu können.

Also evtl. ein Singleton mit non-static Methoden und static Konstanten/Variablen?
 

timbeau

Gesperrter Benutzer
Muss es unbedingt ein Singleton sein? Was spricht gegen die Übergabe des Objekts?

Auf die Werte kann man dann auch zugreifen
 
S

Spacerat

Gast
Eine weitere Möglichkeit besteht darin, gemeinsam genutzte Konstanten in einem Interface zu vereinen bzw. in mehreren zu gruppieren. Klassen, die diese Konstanten benötigen, können diese Intefaces dann einfach implementieren. Das war eine gängige Technik, bevor mit Java 5 (oder war es bereits in 4? :bahnhof:) die static imports kamen. Leider funktioniert das nicht bei Methoden, aber dazu kann man dann eben Singletons als Konstanten deklarieren, die dann diese Methoden anbieten. Static imports sind aber sauberer.
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
Ja klar, dann muss man halt immer den Objektnamen voranstellen, was bei einfachen Variablen etwas kompliziert aussieht.
Grundsätzlich muss man wissen, was man denn konkret vorhat, denn davon hängt auch die passende Lösung ab..

Auf "statische Variablen" per static imports zuzugreifen klingt 3-fach falsch.


Bisher ist diese Klasse A (850 Zeilen Code) so implementiert, dass alle Konstanten, Objekte und Methoden als static deklariert sind. Andere Klassen, die auf diese Elemente zugreifen müssen benutzen als import-Statement "import static Package-Name.A.*;" Die meisten Methoden der Klasse A sind private.
Das wiederum klingt als ob da kein objektorientierter Code vorliegt.
 

RolandK

Mitglied
Das wiederum klingt als ob da kein objektorientierter Code vorliegt.

Ich weiß, dass Klasse A nicht besonders objektorientiert ist. Das liegt daran, dass das Programm ursprünglich nur per Kommandozeile gestartet wurde.

Mittlerweile kann der Benutzer wählen, ob er die Kommandozeilenversion (Start des JAR mit Parametern) oder die GUI-Version benutzen will. Die Kommandozeilenversion ist in einer Methode der Klasse A enthalten und die GUI gibt ihre Befehle (Reaktion auf Button-Klicks) teilweise wieder an Klasse A zurück.

Z.B. gibt es eine Methode saveReport() (enthalten in A) die sowohl von der Kommandozeilen-Methode als auch von der GUI aufgerufen wird. Ausserdem gibt es einige Konstanten in A z.B.

Java:
    final static String PROGRAMMNAME = "Programmname";
    final static String VERSION = "Version 0.6.1";

auf die ich wirklich von allen Klassen zugreifen will, statt sie über die Klassen zu verteilen.
Sowohl die Kommandozeilenversion als auch die GUI brauchen Zugriff auf diese beiden Beispiele.

Ich denke, ich werde A noch etwas aufräumen und dann ihre Methoden entweder static lassen oder ein Singleton draus machen.

Danke für den Hinweis, Problem gelöst denke ich.
 

timbeau

Gesperrter Benutzer
Ich halte die Möglichkeiten die dir vorschweben für die eher schlechteren.

Nochmal, Objektorientiert erreichst du mit Objekten. Und nicht mit einer Monsterklasse, die alle möglichen Daten beinhaltet. Du kannst auch dein Objekt mit den finalen Werten initialiseren und ja, dann müssen andere Klassen mit
Java:
a.getValueXY()
darauf zugreifen und nicht mit
Java:
a.valuexy
Das nennt man Kapselung und sollte mE immer wenn möglich verwendet werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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 Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
K Methoden Methoden in Methoden -> static oder nicht? Java Basics - Anfänger-Themen 7
J static - Methoden Java Basics - Anfänger-Themen 22
F LogDatei static Methoden Java Basics - Anfänger-Themen 8
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
K non-static Methoden ausführen? Java Basics - Anfänger-Themen 3
M Datentypen static methoden Java Basics - Anfänger-Themen 5
L Zusammenhang Methoden, Klassen, Objekte, static - sun doku Java Basics - Anfänger-Themen 4
D static Methoden/Variablen Java Basics - Anfänger-Themen 11
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
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
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
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
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
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
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

Ähnliche Java Themen

Neue Themen


Oben