90 votes

Quelle est la différence entre declaration et definition en Java?

Je suis très confus entre les deux termes. J'ai vérifié sur stackoverflow et il y a une question similaire pour C ++ mais pas pour Java.

Quelqu'un peut-il expliquer la différence entre les deux termes pour Java?

110voto

aioobe Points 158466

La différence conceptuelle est simple:

  • Déclaration: Vous êtes déclarant que quelque chose existe, comme une classe, une fonction ou une variable. Vous ne dites rien à propos de ce que la classe ou d'une fonction ressemble, il suffit de dire qu'il existe.

  • Définition: Vous définissez la façon dont quelque chose est mis en œuvre, comme une classe, une fonction ou une variable, c'est à dire vous dire ce que c'est réellement.

En Java, il y a peu de différence entre les deux, et formellement parlant, une déclaration inclut non seulement l'identifiant, mais aussi la définition. Voici comment j'interprète personnellement les conditions dans le détail:

  • Catégories: Java n'est pas vraiment séparer les déclarations et les définitions que C/C++ (dans l'en-tête et les fichiers cpp). Vous définissez sur le point où vous déclarer.

  • Fonctions: Lorsque vous écrivez une interface ou une classe abstraite), vous pourriez dire que vous êtes à la déclaration d'une fonction, sans la définir. Fonctions ordinaires, cependant, sont toujours définies à droite où elles sont déclarées. Voir le corps de la fonction en tant que sa définition si vous le souhaitez.

  • Variables: Une variable déclaration pourrait ressembler à ceci:

    int x;
    

    (vous êtes déclarer qu'une variable x existe et a le type int), soit si c'est une variable locale ou un membre de champ. En Java, il n'y a aucune informations à propos de x à définir, à l'exception possible des valeurs qu'elle tient, qui est déterminé par les affectations pour elle.

Voici un sommaire de la façon dont j'utilise les termes:

abstract class SomeClass {                // class decl.
                                          //                           \
    int x;                                // variable decl. and def.   |
                                          //                           |
    public abstract void someMethod();    // function decl.            |
                                          //                           |
    public int someOtherMethod() {        // function decl.            |
                                          //                           | class
        if (Math.random() > .5)           // \                         | def.
            return x;                     //  |  function definition   |
        else                              //  |                        |
            return -x;                    // /                         |
                                          //                           |
    }                                     //                           |
}                                         //                          /

32voto

Stephen C Points 255558

Java Langage de Spécification précise et utilise le terme "déclaration" en profondeur, mais il n'utilise pas de "définition" sauf un mot anglais normal.

Ma preuve en est que le terme "déclaration" apparaît à plusieurs reprises dans le JLS table des matières et de l'index, mais le mot "définition" n'apparaît pas dans les deux.

Alors, quand vous voyez quelqu'un d'utiliser le mot "définition" dans le contexte de Java, ils sont soit à l'aide dans le sens non technique, ou qu'ils sont en train d'être bâclée avec leur terminologie.

Dans ce dernier cas, ils pourraient dire la même chose que le terme technique de "la déclaration", ou ils peuvent dire autre chose. Et si elles veulent dire quelque chose d'autre, vous devez leur demander ce qu'ils signifient. Si ils ont défini ... assez juste, mais il n'est pas sur la terminologie normalisée.


Les réponses que l'état "définition" est le point sur lequel la variable est initialisée sont précisément pas supportable ... dans le contexte de Java. En Java, l'initialisation d'une variable, soit qui se passe au moment de la déclaration, ou plus tard dans un autre affectation. Dans ce dernier cas, il n'existe pas de terme est utilisé ... ou ... en dehors de l'affectation et / ou de l'initialisation. Il n'est pas spécifié point de stockage est alloué pour la variable. En effet, les chances sont que de l'espace pour la variable elle-même est alloué avant la déclaration est atteint.


La raison que la "déclaration" terme n'est pas utilisé en Java dans le JLS spec, c'est qu'il n'est pas nécessaire.

  • Depuis Java qui permet aux membres d'être déclaré dans n'importe quel ordre, il n'y a pas besoin de "déclaration".
  • En Java, la pile de l'espace requis pour une variable est un moment de la compilation constante, de sorte que la pile de compenser les calculs se produire au moment de la compilation. (Rappelez-vous qu'en Java, un tableau est une référence à un objet tas ... et seule la référence est tenue dans le cadre de la pile.)
  • La façon dont Java gère "définition sans initialisation" d'un champ ou une variable n'a pas besoin d'une "déclaration". Si une phase d'initialisation d'une variable est nécessaire, il peut arriver à de multiples points dans le code source.

(Le seul endroit en Java, où ils auraient utilisé de la déclaration de rapport définition de méthodes abstraites. Sauf que s'ils l'avaient fait, aurait dû se référer à une méthode régulière de la déclaration comme une définition ... pour des raisons de cohérence ... et qui serait source de confusion. Donc, ils suffit d'appeler le "résumé" litige subordonné à une déclaration d'une méthode abstraite.)

Le C et le C++ gérer ces choses différemment, et par conséquent ne doivent distinctes "déclaration" et "définition" des termes dans leurs descriptions techniques.

7voto

Jaguar Points 8451

Du Soleil glossaire de définitions:

déclaration: Une déclaration qui établit un identifiant et associés des attributs avec elle, sans nécessairement réserver son espace de stockage (pour les données) ou d'en assurer la mise en œuvre (pour les méthodes).

définition: Une déclaration que les réserves de stockage (pour les données) ou permettant la mise en œuvre (pour les méthodes).

La façon dont je lis le Soleil glossaire serait comme ceci:

List i;              // declaration - variable on the stack  
i = new ArrayList(); // definition - gives variable a reference

4voto

Kumar Vivek Mitra Points 19369

1. Déclaration signifie créer un primitive or Object reference variable , mais sans attribution de valeur ou d'objet, respectivement.

par exemple:

           int x;   // declaration of x of type int

          Cat myCat;  //  declaration of myCat an Object of type Cat
 

2. La définition est lorsque nous leur attribuons des valeurs ou un objet.

          int x = 5;

         Cat myCat = new Cat();
 

3. En cas de méthode, c'est comme ça ...

 public abstract void go();       // Method Declaration (Abstract method)

   public void go(){               // Method Defination

            // Your code      

    }
 

1voto

me_digvijay Points 1930

Je pense que je peux peut mieux expliquer cette question quelque chose comme ceci:

Pensez à le scénario suivant:

Il y a un nouveau poste d'ingénieur Logiciel dans votre entreprise. Cela signifie que la personne que vous aurez choisi pour remplir ce poste sera d'un ingénieur en logiciel, (on ne peut pas choisir de marketing gars pour ce poste). La création de ce poste est similaire à la déclaration.

Maintenant, lorsque vous définissez ce que la personne à ce poste peuvent/ne peuvent pas faire, ce que les autorités de il a, quelles sont ses limites, alors cela s'appelle de la définition.

Donc, en disant:

SoftwareEngineer se;

les moyens de la Déclaration;

et

class SoftwareEngineer {

// define role and responsibilities
}

des moyens de définition. Espérons qu'il vous aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X