Ich wollte nur eine Frage klären, die ich habe. Was ist der Sinn einer privaten statischen Methode im Gegensatz zu einer normalen Methode mit privater Sichtbarkeit?
Ich hätte gedacht, dass ein Vorteil einer statischen Methode darin besteht, dass sie ohne eine Instanz einer Klasse aufgerufen werden kann, aber gibt es überhaupt einen Grund dafür, dass sie statisch ist, da sie privat ist?
Der einzige Grund, den ich mir vorstellen kann, ist, dass es das konzeptionelle Verständnis der Methode auf Klassenebene und nicht auf Objektebene erleichtert.
object-oriented
class
methods
static-methods
access-modifiers
Rehan Naqvi
quelle
quelle
Antworten:
Die Eigenschaft, statisch zu sein, ist unabhängig von der Sichtbarkeit.
Die Gründe, aus denen Sie eine statische Methode benötigen (einige Codes, die nicht von nicht statischen Elementen abhängen), sind weiterhin nützlich. Aber vielleicht willst du nicht, dass irgendjemand es benutzt, nur deine Klasse.
quelle
<
den folgenden ausführt<
. Wenn sie geschrieben wird ...&
in&
[konvertiert&
,&
wenn ich den Code schreibe, würde ich in konvertieren , auch wenn ich nicht damit gerechnet hätte, dass dies erforderlich ist, aber angenommen es tut nicht]. Es wird später notwendig, kaufmännisches Und zu behandeln, aber die Methode ist öffentlich und ändert sie in expand&
,&
um externen Code zu&
beschädigen, der seine eigene&
Ersetzung durchführt. Wenn die Methode privat ist, kann sie behoben werden,&
ohne Probleme mit externem Code zu verursachen.Ein ziemlich häufiger Grund (in Java) wäre, unveränderliche Feldvariablen in einem Konstruktor mit einer einfachen
private static
Methode zu initialisieren, um das Durcheinander der Konstruktoren zu verringern.private
: Externe Klassen sollten es nicht sehen.static
: es eine Operation durchführen kann, unabhängig 1 von dem Zustand der Host - Klasse.Es folgt ein etwas ausgeklügeltes Beispiel ...
z.B:
1 Vorausgesetzt, es hat keine Wechselwirkung mit anderen
static
Variablen.quelle
super(...)
Aufruf muss die erste Zeile des Konstruktors Ihrer Klasse sein, sodass Sie keine lokalen Variablen deklarieren können, um herauszufinden, was an den Super-Aufruf übergeben werden soll. Sie können jedoch (private) statische Methoden aufrufen, die so viele Zeilen wie nötig verwenden, um den an den Superkonstruktor zu übergebenden Wert zu ermitteln.Ein üblicher Anwendungsfall für eine
private static
Methode ist eine Utility-Methodequelle
Sie sehen, dass Sie einige Codezeilen haben, die in vielen Ihrer Methoden wiederholt werden, und beschließen, sie in eine einzige Methode zu extrahieren, da duplizierter Code nicht gut ist.
Sie machen die Methode privat, da sie nicht für die allgemeine Verwendung vorgesehen ist und Sie keinen unabhängigen Code benötigen, der sie aufruft. (Diskutieren Sie diesen Punkt in den Kommentaren….)
Da die Methode auf keine Instanzfelder zugreift, kann sie statisch gemacht werden. Indem Sie sie statisch machen, machen Sie sie verständlicher und möglicherweise sogar ein wenig schneller.
Dann .... (Vielleicht jetzt, vielleicht später, vielleicht nie)
Sobald die Methode statisch gemacht wurde, ist klar, dass sie aus der Klasse verschoben werden kann, beispielsweise zu einer Einheitsklasse.
Es ist auch einfach, es in eine Instanzmethode eines seiner Parameter umzuwandeln. Oft ist dies der Ort, an dem sich der Code befinden sollte.
quelle
Ich kann mir mindestens zwei Gründe vorstellen, warum Sie eine statische private Methode für eine Klasse benötigen würden.
1: Ihre Instanzen haben Grund, eine statische Methode aufzurufen, die Sie nicht direkt aufrufen möchten, möglicherweise, weil sie Daten zwischen allen Instanzen Ihrer Klasse gemeinsam nutzt.
2: Ihre öffentlichen statischen Methoden verfügen über Subroutinen, die Sie nicht direkt aufrufen möchten. Die Methode wird immer noch ohne Instanz aufgerufen, nur nicht direkt.
Natürlich ist "es hilft der Klasse, einen Sinn zu ergeben" ein guter Grund für sich.
quelle
Wenn ich feststelle, dass ich private statische Methoden schreibe, nehme ich dies im Allgemeinen als Hinweis darauf, dass es etwas gibt, das ich separat hätte modellieren sollen.
Da sie nicht an den Status einer bestimmten Objektinstanz gebunden sind, kann eine Sammlung öffentlicher und privater statischer Methoden eine völlig separate Klasse mit eigenen semantischen und nicht statischen Methoden bilden.
(Ein weiterer Hinweis: Wenn ich finde, dass ich viele statische Methoden (öffentlich und privat) habe, die alle einen gemeinsamen Parameter eines bestimmten Typs haben, sind sie möglicherweise besser als Mitglieder dieses Typs geeignet.)
Um Ihre Frage zu beantworten, werden private statische Methoden angezeigt, wenn eine Klasse eine Gruppe verwandter Methoden bereitstellt, die von einer Instanz dieser Klasse unabhängig sind. (... und da sie unabhängig sind, sind sie vielleicht in ihrer eigenen Klasse besser dran.)
quelle
Ein sehr einfaches Beispiel, das mir einfällt, ist, wenn Sie einige Eingaben (oder Manipulationen) verarbeiten möchten, die an die Hauptfunktion übergeben werden. In diesem Fall ist es also sinnvoll, eine private Funktion zu haben, wenn die Verarbeitung groß ist und dieselbe Funktionalität nirgendwo anders verwendet wird, da sie nirgendwo anders verwendet / aufgerufen wird. + Static, da main statisch ist.
quelle