2009-03-27 8 views

Répondre

11

En ce sens, un constructeur est comme n'importe quelle autre fonction - toute variable déclarée à l'intérieur a des limitations de portée habituelles et elles sortent toutes hors de portée et sont détruites une fois le constructeur terminé.

+0

Merci! Je ne savais pas si le constructeur était considéré comme une fonction normale. –

+1

Non entièrement précis. Les objets définis avec une durée de stockage statique sont hors de portée, mais * ne sont pas * détruits une fois le constructeur terminé. – AnT

+0

@ ANT en quoi cela diffère-t-il de la statique dans toute autre fonction? – Caleth

3

Les variables déclarées dans le constructeur de classe sont disponibles dans la portée du constructeur de classe et nulle part plus haut.

public MyClass() { 
    int i = 0; // i is only available inside this constructor. 
       // It can't be used in any other function of this class or any other. 
} 
6

Comme toute autre fonction, si c'est une variable locale, elle sera "détruite" à la fin de la fonction. Portée locale.

2

Les variables locales, quelle que soit la fonction, sont détruites lorsqu'elles sortent de la portée. Ils ne deviennent pas «globaux».

1

L'étendue peut être statique (lexicale) ou dynamique. La plupart des langues utilisent la portée lexicale, ce qui signifie que la portée est déterminée par le texte du programme (par exemple, "dans l'ensemble des accolades où il est défini"), et non par la signification de ce que vous avez écrit.

http://en.wikipedia.org/wiki/Scope_(programming)

5

Comme il arrive souvent, vous pourriez être à mélanger les notions de portée et durée de vie, donc je vais répondre à la fois.

La portée d'un nom déclaré dans un constructeur est la même que la portée d'un nom local (le fait qu 'il est un constructeur fait aucune différence): le champ du nom se prolonge à l'extrémité du bloc dans lequel le nom est déclaré (et il peut avoir des "trous" quand le nom est caché par une déclaration d'un même "plus local" éntifier avec le même nom).

La durée de vie de l'objet am défini à l'intérieur d'un constructeur est régie par les mêmes règles que la durée de vie d'un objet défini localement (le fait qu'il est un constructeur ne fait aucune différence que ce soit): un objet avec une durée de stockage automatique est détruit à la fin de sa portée, tandis qu'un objet avec une durée de stockage statique vit pour toujours.

Questions connexes