quelle est la différence entre déclarant la variable principale méthode et, à l'intérieur de la méthode?
Quand j'ai lu le livre sur Java , j'ai vu un exemple écrit comme ça. Et je me demandais puis-je déclarer la variable en dehors de la principale méthode ? Quelle est la différence entre déclarant la variable à l'extérieur et à l'intérieur de la méthode main? ce qui est "statique" rôle ici ? S'il vous plaît quelques-on m'expliquer? Je suis nouveau dans java.
public class Printstuff {
static int an_integer = 0;
public static void main(String[] args) {
int an_integer = 2;
String[] some_strings = {"Shoes", "Suit", "Tie" };
an_integer = an_integer - 1;
some_strings[an_integer] = some_strings[an_integer] +"+++";
for (int i = 0; i < some_strings.length; i++)
System.out.println(some_strings[Printstuff.an_integer]);
}
}
Meilleures salutations.
OriginalL'auteur Brave Satisfaction | 2013-07-17
Vous devez vous connecter pour publier un commentaire.
1) à l'Intérieur vs Extérieur:
Si vous déclarez votre objet à l'intérieur de une méthode, il ne sera visible que dans cette méthode. En gros, si vous mettez des crochets autour d'elle, c'est seulement visible/accessible à partir de ces supports.
Si vous déclarez votre objet à l'extérieur la méthode (à l'intérieur de la classe), il dépend de la modificateur d'accès.
Par défaut, il est visible/accessible depuis l'intérieur de la classe et de l'ensemble du paquet.
2) Statique
Statique signifie, que cet Objet/Variable appartient à la classe elle-même, et pas à ses objets.
Exemple:
memberCount
existe qu'une seule fois, peu importe la façon dont beaucoup d'Objets de la classe existe. (avant même que tout objet est créé!)Chaque fois que vous créez un nouvel Objet de
Members
,memberCount
est augmenté. Maintenant, vous pouvez y accéder comme ceci:Members.memberCount
Oui, c'est généralement une bonne idée
OriginalL'auteur
La déclaration d'une variable dans la méthode main va rendre disponible uniquement dans la main. La déclaration d'une variable à l'extérieur va mettre à la disposition de toutes les méthodes de la classe, y compris la méthode main.
Exemple :
seulement dans ce cas. Il dépend de l'accès spécificateur.
Ce code ne compile pas, comme
varOne
est non statique, ne peut donc pas être accessible à partir de la statiquemain()
méthode.Mon mal, vous avez raison, j'aurais été dans une autre planète quand je l'ai posté. Merci pour la revue, j'ai édité ma réponse 🙂
OriginalL'auteur
Je suis intrigué personne n'a mentionné les questions de la mémoire. Il y a plusieurs années, l'instanciation dans main (), qui permettrait d'affecter la variable sur la pile, si l'instanciation il ot principal serait d'allouer la variable sur le segment. À l'époque, ces systèmes ont de très petites piles, afin de ne pas vérifier ce détail serait de provoquer un débordement de pile très facilement. Je ne suis pas un expert en architecture de la mémoire mais, je souhaite que quelqu'un pourrait contribuer à ce subtil détail applicable aux logiciel actuel de l'architecture de la mémoire.
OriginalL'auteur
Il existe un champ d'application de la différence.
Et vous devez le déclarer comme statique parce que votre principale fonction est statique qui vous permet d'utiliser uniquement les variables statiques.
Variable qui déclare, à l'intérieur de la méthode ne serait utilisé qu'à l'intérieur de la méthode main.
Maintenant, vous pourriez vous vous demandez pourquoi j'ai besoin d'avoir la principale méthode statique!!!
Comme toute application en java vous exécutez à partir de la méthode main de sorte qu'il peut être appelé par le nom de classe que sans la création de n'importe quel objet nous sommes donc en la définissant comme statique. Toutes les méthode statique peut appeler avec la classe de référence, pas d'objet nécessaire.
OriginalL'auteur
La différence maintenant est que votre
an_integer
a plus de portée.Exemple, si vous avez une autre méthode.
Que vous avez déclaré
<default package> int an_integer=0;
Toutes les clases dans le même paquet a accès à cette variable.
Vous êtes les bienvenus, envisager d'accepter toute réponse et upvoting ceux qui vous permettra de mieux comprendre 🙂
OriginalL'auteur
Ce que vous consultez est la portée d'une variable.
Variables à l'intérieur d'méthodes ne sont accessibles qu'à l'intérieur de cette méthode, c'est à dire
an_integer
à l'intérieur de lamain
-méthode ne peut pas être référencé à l'extérieur de lamain
méthode. Les Variables peuvent même avoir plus étroite étendues, pour exammple à l'intérieur des boucles. Le classique de l'itération variable d'unfor
boucle est disponible uniquement à l'intérieur de la boucle, par la suite son parti.Variables en dehors de méthodes sont appelées champs. Il dépend de son modificateur d'accès où il peut être vu.
Private
champs, par exemple, sont uniquement disponibles à l'intérieur de cette classe,public
champs peuvent être accessibles à partir de n'importe où (autres modificateurs d'accès sontprotected
et aucun, qui retombe sur un défaut). Fondamentalement, vous pouvez utiliser un champ à l'intérieur d'une classe d'accéder à sa valeur de chaque méthode à l'intérieur de cette classe, cependant, cela peut être dangereux si plusieurs threads accèdent à la même instance d'une classe, mais c'est une toute autre histoire.Un champ et une variable locale peut avoir le même nom, ce qui peut entraîner de la confusion. Je préfère généralement ne pas le faire, ou, peut-être mieux, de toujours faire référence à des champs avec un
this
accesseur. Je ne suis pas entièrement sûr de savoir si il y a une préférence locale variables en fonction des champs de même nom, mais je suppose que les variables locales sont de plus haute priorité lors de la détermination de celui qui a été signifié.Static
champs maintenant dire que cette variable n'appartient pas à une instance d'une classe, mais à la classe elle-même.Static
(champs et méthodes) peut être lu (ou appelé) sans avoir à initialiser la classe de première. Un exemple pourrait être une standardvalue d'une classe, ou peut-être un factorymethod (si sa méthode).Static
champs peuvent également venir dans maniable pour les constantes, en collaboration avec lefinal
modificateur. Unpublic final static
champ est quasiment une constante globale.OriginalL'auteur