Ich bin sehr verwirrt zwischen den beiden Begriffen. Ich habe den Stackoverflow überprüft und es gibt eine ähnliche Frage für C ++, aber nicht für Java.
Kann jemand den Unterschied zwischen den beiden Begriffen für Java erklären?
Ich bin sehr verwirrt zwischen den beiden Begriffen. Ich habe den Stackoverflow überprüft und es gibt eine ähnliche Frage für C ++, aber nicht für Java.
Kann jemand den Unterschied zwischen den beiden Begriffen für Java erklären?
Antworten:
Der konzeptionelle Unterschied ist einfach:
Deklaration : Sie deklarieren, dass etwas vorhanden ist, z. B. eine Klasse, eine Funktion oder eine Variable. Sie sagen nichts darüber, wie diese Klasse oder Funktion aussieht, Sie sagen nur, dass sie existiert.
Definition : Sie definieren, wie etwas implementiert wird, z. B. eine Klasse, Funktion oder Variable, dh Sie sagen, was es tatsächlich ist.
In Java gibt es kaum einen Unterschied zwischen den beiden, und formal gesehen enthält eine Deklaration nicht nur den Bezeichner, sondern auch deren Definition. So interpretiere ich die Begriffe persönlich im Detail:
Klassen : Java trennt Deklarationen und Definitionen nicht wirklich wie C / C ++ (in Header- und CPP-Dateien). Sie definieren sie an der Stelle, an der Sie sie deklarieren.
Funktionen : Wenn Sie eine Schnittstelle (oder eine abstrakte Klasse) schreiben, können Sie sagen, dass Sie eine Funktion deklarieren, ohne sie zu definieren. Gewöhnliche Funktionen werden jedoch immer genau dort definiert, wo sie deklariert sind. Sehen Sie sich den Hauptteil der Funktion als Definition an, wenn Sie möchten.
Variablen : Eine Variable Erklärung könnte wie folgt aussehen:
int x;
(Sie erklären, dass eine Variable xexistiert und einen Typ hat int), entweder wenn es sich um eine lokale Variable oder ein Mitgliedsfeld handelt. In Java gibt es keine Informationen über links xzu definieren , mit der Ausnahme möglich , welche Werte sie halten sollen, die von den Zuweisungen bestimmt wird.
Hier ist eine grobe Zusammenfassung, wie ich die Begriffe verwende:
abstract class SomeClass { // class decl.
// \
int x; // variable decl. |
// |
public abstract void someMethod(); // function decl. |
// |
public int someOtherMethod() { // function decl. |
// | class
if (Math.random() > .5) // \ | def.
return x; // | function definition |
else // | |
return -x; // / |
// |
} // |
} // /
javacscheinen Klassendeklarationen ein Synonym für die Klassendefinition zu sein. Betrachten Sie zum Beispiel public void visitClassDef(JCClassDecl tree).
Die Java-Sprachspezifikation spezifiziert und verwendet den Begriff "Deklaration" ausführlich, verwendet jedoch "Definition" nur als normales englisches Wort.
Mein Beweis ist, dass der Begriff "Deklaration" im JLS-Inhaltsverzeichnis und im Index mehrmals vorkommt, aber das Wort "Definition" auch nicht.
Wenn Sie also sehen, dass jemand das Wort "Definition" im Kontext von Java verwendet, verwendet er es entweder im nicht-technischen Sinne oder er ist mit seiner Terminologie schlampig.
Im letzteren Fall könnten sie dasselbe bedeuten wie der Fachbegriff "Erklärung", oder sie könnten etwas anderes bedeuten. Und wenn sie etwas anderes bedeuten, müssen Sie sie fragen, was sie bedeuten. Wenn sie es definiert haben ... fair genug, aber es ist keine Standardterminologie.
Die Antworten, die besagen, dass "Definition" sich auf den Punkt bezieht, an dem die Variable initialisiert wird, werden speziell nicht unterstützt ... im Kontext von Java. In Java erfolgt die Initialisierung einer Variablen entweder zum Zeitpunkt der Deklaration oder in einer späteren Zuweisung. Im letzteren Fall wird außer der Zuweisung und / oder Initialisierung kein spezieller Begriff verwendet ... oder benötigt .... Es gibt keinen festgelegten Punkt, an dem Speicher für die Variable zugewiesen wird. In der Tat besteht die Möglichkeit, dass der Speicherplatz für die Variable selbst zugewiesen wird, bevor die Deklaration erreicht wird.
Der Grund dafür, dass der Begriff "Definition" in Java in der JLS-Spezifikation nicht verwendet wird, ist, dass er nicht benötigt wird.
(Der einzige Ort in Java, an dem sie möglicherweise Deklaration versus Definition verwendet haben, sind abstrakte Methoden. Wenn sie dies getan hätten, hätten sie sich aus Gründen der Konsistenz auf eine reguläre Methodendeklaration als Definition beziehen müssen ... und das wäre verwirrend. Sie nennen den "abstrakten" Unterfall einfach eine Deklaration einer abstrakten Methode.)
C und C ++ , diese Dinge anders handhaben und daher keine eindeutige „Erklärung“ und „Definition“ Begriffe in ihren technischen Beschreibungen müssen. Ich gehe davon aus, dass die Definitionen des "Sun Glossary" C / C ++ -zentriert sind.
Aus den Definitionen des Sun-Glossars :
Deklaration:
Eine Anweisung, die einen Bezeichner erstellt und ihm Attribute zuordnet, ohne den Speicher (für Daten) zu reservieren oder die Implementierung (für Methoden) bereitzustellen.
Definition: Eine Deklaration, die Speicher (für Daten) reserviert oder Implementierung (für Methoden) bereitstellt.
So würde ich das Sun-Glossar lesen:
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference
1. Deklaration bedeutet das Erstellen eines primitive or Object reference variable, jedoch ohne Zuweisung von Wert bzw. Objekt.
z.B:
int x; // declaration of x of type int
Cat myCat; // declaration of myCat an Object of type Cat
2. Definition ist, wenn wir ihnen Werte oder Objekte zuweisen.
int x = 5;
Cat myCat = new Cat();
3. Im Falle der Methode ist es so ...
public abstract void go(); // Method Declaration (Abstract method)
public void go(){ // Method Defination
// Your code
}
Ich denke, ich kann diese Frage so etwas besser erklären:
Stellen Sie sich folgendes Szenario vor:
In Ihrer Firma gibt es eine neue freie Stelle als Software-Ingenieur. Dies bedeutet, dass die Person, die Sie für die Besetzung dieser Position ausgewählt haben, ein Softwareentwickler ist (Sie können keinen Marketing-Mitarbeiter für diesen Beitrag auswählen). Das Erstellen dieses Beitrags ähnelt also der Deklaration.
Wenn Sie nun definieren, was die Person mit diesem Beitrag tun kann / nicht kann, welche Befugnisse sie hat, welche Einschränkungen sie hat, wird dies als Definition bezeichnet.
Also sagen
SoftwareEngineer se;
bedeutet Erklärung;
und
class SoftwareEngineer {
// define role and responsibilities
}
bedeutet Definition. Hoffe es hilft dir.
Java Sprache definiert nur den Begriff Deklaration, nicht Definition verwenden.
Erklärung:
class A{}// class declaration
String str;// variable declaration
Deklaration : Eine Anweisung, die einen Bezeichner erstellt und ihm Attribute zuordnet, ohne unbedingt dessen Speicher (für Daten) zu reservieren oder die Implementierung (für Methoden) bereitzustellen.
or
1. Declaration means creating a primitive or Object reference variable,
but with no assignment of value or object respectively..
Definition : Eine Deklaration, die Speicher (für Daten) reserviert oder Implementierung (für Methoden) bereitstellt.
or
Defination is when we assign values or Object to them.
**Ex:**
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference
Deklaration : Angabe des Typs eines Objekts oder Grundelements
Definition : Angabe des Werts eines Objekts oder Grundelements
Deklaration : Angabe der Signatur einer Methode
Definition : Angabe der Implementierung einer Methode