Frage

Darüber hinaus gibt es performance-Vorteile für statische Methoden über Methoden einer Instanz?

Ich kam über die folgenden vor kurzem: http://www.cafeaulait.org/course/week4/22.html :

Wann sollte eine Methode statisch sein?

  1. Weder liest, noch schreibt zum Beispiel Felder
  2. Unabhängig von dem Zustand des Objekts
  3. Mathematische Methoden, die Argumente akzeptieren, wenden Sie einen Algorithmus, um diese Argumente, und einen Wert zurückgeben
  4. Factory-Methoden, die dazu dienen, anstelle von Konstruktoren

Ich wäre sehr daran interessiert, das feedback der Stack Overflow-community, die auf dieser.

War es hilfreich?

Lösung

Machen Sie statische Methoden, wenn Sie sind nicht Teil der Instanz.Schwitzen Sie nicht die Mikro-Optimierungen.

Vielleicht finden Sie viele private Methoden werden könnten statisch, sondern rufen Sie immer von Instanz-Methoden (oder jeder andere).In diesem Fall ist es nicht wirklich wichtig, dass viel.Jedoch, wenn Sie wollen, um tatsächlich in der Lage sein, um den code zu testen, und vielleicht verwenden Sie es von anderswo, möchten Sie vielleicht in Erwägung ziehen, diese statischen Methoden in eine andere, non-instantiable Klasse.

Andere Tipps

Ob oder nicht eine Methode statisch ist, ist eher ein design berücksichtigt als einer der Effizienz.Eine statische Methode gehört zu einer Klasse, wo eine nicht-statische Methode gehört zu einem Objekt.Wenn Sie hatte eine Math-Klasse, Sie könnte haben ein paar statische Methoden im Umgang mit addition und Subtraktion da diese Konzepte im Zusammenhang mit Mathematik.Wenn Sie jedoch ein Auto hatte Klasse, Sie könnte haben ein paar nicht-statische Methoden, um Gänge zu wechseln und Steuern, da diese im Zusammenhang mit einer bestimmten Auto, und nicht das Konzept des Autos im Allgemeinen.

Ein weiteres problem mit statischen Methoden ist, dass es ziemlich schmerzhaft ist zu schreiben unit-tests für Sie - in Java, mindestens.Sie können mock eine statische Methode in keiner Weise.Es ist ein post auf google testing blog zu diesem Thema.

Meine Faustregel ist, zu schreiben statische Methoden nur, wenn Sie keine externen Abhängigkeiten (wie Datenbank-Zugriff, das Lesen von Dateien, E-Mails und so an), um Sie zu halten so einfach wie möglich.

@jagmal ich glaube, du hast ein paar Drähte gekreuzt irgendwo all die Beispiele, die Sie Liste sind eindeutig nicht statische Methoden.

Statische Methoden umgehen sollte ausschließlich mit abstrakten Eigenschaften und Konzepte von a-Klasse - Sie sollten in keiner Weise beziehen sich auf Instanz-spezifische Attribute (und die meisten Compiler werden Schreien, wenn Sie es tun).

Zum Beispiel Auto, Geschwindigkeit, km Gefahren sind klar Attribut verwandt.Gangwechsel und Geschwindigkeit, Berechnung, wenn man berücksichtigt, dass bei der Auto-level, attribute abhängig - aber betrachten Sie eine carModel Klasse erbt von der Fahrzeug:an dieser Stelle theyy werden könnte, statische Methoden, wie Sie die erforderlichen Attribute (wie Rad-Durchmesser) kann definiert werden als Konstanten auf diesem Niveau.

Denken Sie daran, dass, wenn Sie schreiben eine statische Methode schreiben, die eine starre Methode, die nicht haben es, das Verhalten geändert werden sehr leicht.

Sie schreiben prozeduralen code, so dass, wenn es Sinn macht, procedural, dann tun Sie es.Wenn nicht, sollte es wahrscheinlich sein, eine Instanz-Methode.

Diese Idee stammt von ein Artikel von Steve Yegge,, ich denke das ist ein Interessantes und nützliches zu Lesen.

Performance-wise, a C++ statische Methode kann geringfügig schneller als ein nicht-virtuellen Instanz-Methode, da es keine Notwendigkeit für einen "this" - Zeiger zu erhalten, die an die Methode übergeben.In turn, sowohl schneller als virtuelle Methoden es gibt keine VMT-lookup benötigt.

Aber, es ist wahrscheinlich zu rechts unten in der Lärm - insbesondere für Sprachen, die unnötigen parameter übergeben werden optimiert aus.

Hier ist eine Verwandte Diskussion zu warum String.Format statisch das wird markieren Sie einige Gründe.

Eine andere Sache zu berücksichtigen, wenn Sie statische Methoden ist, dass jeder in der Lage, um zu sehen, die die Klasse ist in der Lage zu rufen Sie eine statische Methode.In der Erwägung, dass, wenn die mehtod ist eine Instanz-Methode, nur diejenigen, die Zugang zu einer Instanz sind in der Lage zu rufen Sie die Methode.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top