static oder nicht?
-
aus meiner sicht macht static einen tollen job in der Math class
bzgl. der wartbarkeit behaupte ich... das mit dieser lösung mehr übersicht ermöglicht wird
ebenso ist das singleton pattern auf static angewiesenwie schon erwähnt es ist schwierige zu beantworten
aber darauf verzichten? -nein
ich denke nur wenn man es benutzt lernt man die vorteile und nachteile
-
golden_jubilee schrieb:
ich denke nur wenn man es benutzt lernt man die vorteile und nachteile
static ist etwas sehr kritisches. Wenn einem nicht klar ist, wann man static benutzen sollte, dann ist das keine Frage, ob man ein bestimmtes Sprachmittel schon gut genug verstanden hat. Wenn man sich diese Frage stellt, dann heißt das, dass man keine objektorientierte Sichtweise auf seine Problemstellung hat. Vermutlich denkt man dann insgesamt noch nicht objektorientiert. Und deshalb sollte man sich in dem Fall mit Objektorientierung auseinandersetzen. Und dann ist es gut, sich zu objektorientierter Programmierung zu zwingen.
Der Threadersteller fragt, welche Vorteile static hat. Damit drückt er praktisch aus, dass er davon ausgeht, dass static etwas wesentliches zur Sprache hinzufügt. Das Gegenteil ist der Fall: Ohne static schreibt man den mächtigeren Code. Und deshalb sollte die Frage eher sein, was man ohne static an mächtigen Konstrukten programmieren kann.
Klar, es gibt Stellen, an denen static sinnvoll eingesetzt wird. die Math-Klasse ist so ein Fall und Singletons hattest Du auch erwähnt. Wenn Du ein großes Programm schreibst, dann sind das allerdings erstaunlich wenig Stellen.
-
Vielen Dank für eure Erklärungen
wenn ich z.B. den folgenden code hätte...
code1:
public class Main{ public static void main(String[] args){ a(); } public static void a(){ System.out.print( "Hallo " );} }
wäre es hier sinvoller static zu verwenden oder sollte man doch lieber
ein extra Objekt, der klasse Main, anlegen um damit die Funktion a() aufzurufen?code2:
public class Main{ public static void main(String[] args){ Main obj = new Main(); obj.a(); } public void a(){ System.out.print( "Hallo " );} }
-
hmmmm schrieb:
Vielen Dank für eure Erklärungen
wenn ich z.B. den folgenden code hätte...
code1:
public class Main{ public static void main(String[] args){ a(); } public static void a(){ System.out.print( "Hallo " );} }
wäre es hier sinvoller static zu verwenden oder sollte man doch lieber
ein extra Objekt, der klasse Main, anlegen um damit die Funktion a() aufzurufen?code2:
public class Main{ public static void main(String[] args){ Main obj = new Main(); obj.a(); } public void a(){ System.out.print( "Hallo " );} }
leider ist das ein extrem sinnfreies beispiel...
hier gibt es für beide seiten gute argumente
-
Dann sein doch bitte so freundlich und nenne
mir ein paar gute Argumente für beide Seiten
-
hmmmm schrieb:
Dann sein doch bitte so freundlich und nenne
mir ein paar gute Argumente für beide Seitenund die methode aufzurufen benötigst du eigentlich kein objekt in main solange du static benutzt, dass ist natürlich bequem, gleichzeitig benutz die methode keine member der klasse und kann demzufolge bei mehreren objekten von Main kein ungewolltes verhalten verursachen
aber es geht nicht um bequemlichkeit... du wendest dich vom konzept ab, da es außer der erwähnten bequemlichkeit keinen vorteil gibt
wenn du jetzt noch die funktionen b() und c() hinzufügst, die sich wenn es geht noch member teilen, dann benötigst du auch keine klasse mehr
-
@hmmmm
Es ist nicht möglich die Vor- und Nachteile von static bei diesem Minimalbeispiel aufzuzeigen. Das Stückchen Code zeigt eigentlich nur die Syntax von static <-> non-static, mehr nicht.Ich bin sowieso der Meinung, dass man bei static ein paar mal auf die Schnauze fliegen muss bis man es verinnerlicht hat. Es ist ungeheuer verlockend. Meist geht es aber schief weil Erweiterungen erschwert werden.
Spiel einfach damit rum bis Du ein Gefühl dafür kriegst.
-
Meiner Meinung nach:
Utils-> static machen (Utils.paintBox(Graphics g, Rectangle pos) etc...)
Singletons -> sind meistens auch als static schöner lesbar als mit getInstance() dauernd rumzuhampeln
Konstanten -> eh static
Schnittstellen -> ein MailSystem.sendMail("xxx") ist auch immer recht... nett zu benutzen statt Verwendung irgendwelcher irgendwo gespeicherten Instanzen, wobei das dann langsam gefährlich wirdAber in mini-Programmen kommt das alles nicht zum tragen wie hier schon gesagt wurde, meist ist exzessives static benutzen da übersichtlicher und besser lesbar weil weniger Ballast... zum lernen solltest du das aber nicht machen.
-
dreaddy schrieb:
Meiner Meinung nach:
Utils-> static machen (Utils.paintBox(Graphics g, Rectangle pos) etc...)
Singletons -> sind meistens auch als static schöner lesbar als mit getInstance() dauernd rumzuhampeln
Konstanten -> eh static
Schnittstellen -> ein MailSystem.sendMail("xxx") ist auch immer recht... nett zu benutzen statt Verwendung irgendwelcher irgendwo gespeicherten Instanzen, wobei das dann langsam gefährlich wirdAber in mini-Programmen kommt das alles nicht zum tragen wie hier schon gesagt wurde, meist ist exzessives static benutzen da übersichtlicher und besser lesbar weil weniger Ballast... zum lernen solltest du das aber nicht machen.
1. getInstance ist static? was ist da mit static schöner lesbar?
2. konstanten sollte man seit 5 mit enums realisieren
-
Meinte eher, eine reine static Klasse ist in der Verwendung angenehmer als ein Singleton und erfüllt meist den gleichen Zweck.