Wenn ich mich auf interne private Variablen von Java-POJOs beziehe, die Getter / Setter haben, habe ich die folgenden Begriffe verwendet:
- Feld
- Variable
- Attribut
- Eigentum
Gibt es einen Unterschied zwischen den oben genannten? Wenn ja, wie lautet der richtige Begriff? Gibt es einen anderen Begriff, wenn diese Entität beibehalten wird?
Ja da ist.
Die Variable kann lokal, feldbezogen oder konstant sein (obwohl dies technisch falsch ist). Es ist vage wie Attribut. Außerdem sollten Sie wissen, dass einige Leute gerne endgültige nicht statische (lokale oder Instanz-) Variablen aufrufen
" Werte ". Dies kommt wahrscheinlich von neuen JVM-FP-Sprachen wie Scala.
Feld ist im Allgemeinen eine private Variable in einer Instanzklasse. Es bedeutet nicht, dass es einen Getter und einen Setter gibt.
Attribut ist ein vager Begriff. Es kann leicht mit XML oder Java Naming API verwechselt werden. Versuchen Sie, diesen Begriff nicht zu verwenden.
Eigenschaft ist die Kombination aus Getter und Setter.
Einige Beispiele unten
Es gibt viel mehr Kombinationen, aber meine Finger werden müde :)
quelle
Wenn Ihre Frage mithilfe von JAXB gestellt wurde und Sie die richtige auswählen wollten
XMLAccessType
, hatte ich dieselbe Frage. Das JAXB Javadoc sagt, dass ein "Feld" eine nicht statische, nicht vorübergehende Instanzvariable ist. Eine "Eigenschaft" hat ein Getter / Setter-Paar (es sollte also eine private Variable sein). Ein "öffentliches Mitglied" ist öffentlich und daher wahrscheinlich eine Konstante. Auch in JAXB bezieht sich ein "Attribut" auf einen Teil eines XML-Elements, wie in<myElement myAttribute="first">hello world</myElement>
.Es scheint, dass eine Java-Eigenschaft im Allgemeinen als ein Feld mit mindestens einem Getter oder einer anderen öffentlichen Methode definiert werden kann, mit der Sie ihren Wert ermitteln können. Einige Leute sagen auch, dass eine Immobilie einen Setter haben muss. Für solche Definitionen ist der Kontext alles.
quelle
Dietel und Dietel haben eine gute Möglichkeit, Felder und Variablen zu erklären.
"Zusammen werden die statischen Variablen und Instanzvariablen einer Klasse als ihre Felder bezeichnet." (Abschnitt 6.3)
"Variablen sollten nur dann als Felder deklariert werden, wenn sie für die Verwendung in mehr als einer Methode der Klasse erforderlich sind oder wenn das Programm ihre Werte zwischen Aufrufen der Methoden der Klasse speichern soll." (Abschnitt 6.4)
Die Felder einer Klasse sind also ihre statischen oder Instanzvariablen - dh sie werden mit dem Klassenbereich deklariert.
Referenz - Dietel P., Dietel, H. - Java ™ Programmieren (frühe Objekte), Zehnte Ausgabe (2014)
quelle
Wenn Sie einen Hinweis aus dem Ruhezustand entnehmen:
Der Ruhezustand liest / schreibt den Status des Objekts mit seinem Feld. Hibernate ordnet die Eigenschaften des Java Bean-Stils auch dem DB-Schema zu. Ruhezustand Greifen Sie auf die Felder zum Laden / Speichern des Objekts zu. Wenn die Zuordnung nach Eigenschaften erfolgt, verwendet der Ruhezustand den Getter und den Setter.
Es ist die Kapselung, die unterscheidet, was bedeutet, dass Sie Getter / Setter für ein Feld haben, und sie heißt Eigenschaft. Wenn wir die zugrunde liegende Datenstruktur dieser Eigenschaft in setMethod verbergen, können wir unerwünschte Änderungen in Setzern verhindern. Alles, wofür Kapselung steht ...
Felder müssen deklariert und initialisiert werden, bevor sie verwendet werden. Meistens für den klasseninternen Gebrauch.
Eigenschaften können vom Setter geändert werden und werden von Gettern verfügbar gemacht. Hier hat der Feldpreis Getter / Setter, also ist es Eigentum.
In ähnlicher Weise wird bei Verwendung von Feldern [im Ruhezustand die empfohlene Methode zum MAP mithilfe von Feldern verwendet, wobei private int id; ist mit @Id kommentiert, aber mit Property haben Sie mehr Kontrolle]
Das Java-Dokument sagt: Field ist ein Datenelement einer Klasse. Ein Feld ist eine nicht statische, nicht vorübergehende Instanzvariable. Feld ist im Allgemeinen eine private Variable in einer Instanzklasse.
quelle
Variablen bestehen aus Feldern und Nichtfeldern.
Felder können entweder sein:
Nichtfelder können entweder sein:
Zusammenfassend ist der Hauptunterschied zwischen Variablen, ob es sich um Felder oder Nichtfelder handelt, dh ob sie sich innerhalb einer Methode oder außerhalb aller Methoden befinden.
Grundlegendes Beispiel (entschuldigen Sie meine Syntax, ich bin nur ein Anfänger)
quelle
Eigentlich werden diese beiden Begriffe oft verwendet, um dasselbe darzustellen, aber es gibt einige Ausnahmesituationen. Ein Feld kann den Status eines Objekts speichern. Auch alle Felder sind Variablen. Es ist also klar, dass es Variablen geben kann, die keine Felder sind. Wenn wir uns also die 4 Variablentypen (Klassenvariable, Instanzvariable, lokale Variable und Parametervariable) ansehen, können wir sehen, dass Klassenvariablen und Instanzvariablen den Status eines Objekts beeinflussen können. Mit anderen Worten, wenn sich eine Klassen- oder Instanzvariable ändert, ändert sich der Status des Objekts. Wir können also sagen, dass Klassenvariablen und Instanzvariablen Felder sind, lokale Variablen und Parametervariablen jedoch nicht.
Wenn Sie tiefer verstehen möchten, können Sie zur folgenden Quelle gehen: -
http://sajupauledayan.com/java/fields-vs-variables-in-java
quelle
Die Frage ist alt, aber ein weiterer wichtiger Unterschied zwischen einer Variablen und einem Feld besteht darin, dass ein Feld beim Deklarieren einen Standardwert erhält. Andererseits muss eine Variable initialisiert werden.
quelle
Mein Verständnis ist wie folgt und ich sage nicht, dass dies 100% richtig ist, ich könnte mich genauso gut irren.
Eine Variable ist etwas, das Sie deklarieren, das sich standardmäßig ändern und unterschiedliche Werte haben kann, das aber auch explizit als endgültig bezeichnet werden kann. In Java wäre das:
Eine Variable ist also im Grunde alles, was deklariert ist und Werte enthalten kann. Die obige Methode foo gibt beispielsweise eine Variable zurück. Sie gibt eine Variable vom Typ Integer zurück, die die Speicheradresse der neuen Integer () enthält. Alles andere, was Sie oben sehen, sind ebenfalls Variablen, listVariable, aFinalVariableExample und werden hier erklärt:
Ein Feld ist eine Variable, bei der der Umfang klarer (oder konkreter) ist. Die Variable, die aus dem Bereich der Methode foo zurückkehrt, ist im obigen Beispiel nicht klar, daher würde ich sie nicht als Feld bezeichnen. Andererseits ist iAmAlsoVariable ein "lokales" Feld, das durch den Bereich der Methode foo begrenzt ist, und listVariable ist ein "Instanz" -Feld, in dem der Bereich des Feldes (der Variablen) durch den Objektbereich begrenzt ist.
Eine Eigenschaft ist ein Feld, auf das zugegriffen / das mutiert werden kann. Jedes Feld, das einen Getter / Setter verfügbar macht, ist eine Eigenschaft.
Ich weiß nichts über Attribute und möchte auch wiederholen, dass dies mein Verständnis der Variablen, Felder und Eigenschaften ist.
quelle
variable
- benannte Speicheradresse. Jede Variable hat einen Typ, der eine Speichergröße, Attribute und Verhaltensweisen definiert. Es gibt für Arten von Java - Variablen:class variable
,instance variable
,local variable
,method parameter
field
- Mitgliedsvariable oder Datenelement. Es ist einvariable
Inneres einesclass
(class variable
oderinstance variable
)attribute
- In einigen Artikeln finden Sie, dassattribute
es sich um eineobject
Darstellung von handeltclass variable
.Object
arbeitet, durchattributes
die eine Reihe von Merkmalen definiert werden.property
-field
+ begrenztgetter/setter
. Es hat eine Feldsyntax, verwendet jedoch Methoden unter der Haube.Java
unterstützt es nicht in reiner Form. Werfen Sie einen Blick aufObjective-C
,Swift
,Kotlin
Zum Beispiel
Kotlin
Beispiel:[Schnelle Variable, Eigenschaft]
quelle