public static void main () de l'accès non statique de la variable
Sa dit que non-variables statiques ne peut pas être utilisé dans une méthode statique.Mais le public static void main.Comment est-ce?
Les méthodes statiques ne peuvent pas accéder à des non-champs statiques, mais bien sûr, vous pouvez définir des variables locales de la méthode elle-même (et, à travers celles de l'accès non-champs statiques). Veuillez donner un exemple pour clarifier.
OriginalL'auteur user1526671 | 2012-07-17
Vous devez vous connecter pour publier un commentaire.
Non, il ne le fait pas.
mais
ou si vous instanciez
A
Aussi
de travail, depuis
a
est une variable locale, ici, et pas une variable d'instance. Une méthode de variable locale est toujours accessible pendant l'exécution de la méthode, peu importe si la méthode eststatic
ou pas.OriginalL'auteur Keppil
Oui, la principale méthode d'accès non-variables statiques, mais seulement indirectement à travers des cas réels.
Exemple:
Ce que les gens veulent dire quand ils disent "non-statique des variables ne peut pas être utilisé dans une méthode statique" est que non-membres statiques de la même classe ne peut pas être directement accessibles (comme indiqué dans Keppils répondre par exemple).
Liés à la question:
Mise à jour:
Lorsque l'on parle de non-statique des variables d'un implicitement signifie variables de membre. (Puisque les variables locales ne peux pas possible d'avoir une statique modificateur de toute façon.)
Dans le code
vous êtes à la déclaration d'une local variable (qui généralement n'est pas mentionné comme non-statique, même si elle ne possède pas de modificateur static).
Ah, remarque intéressante. Réponse de mise à jour.
OriginalL'auteur aioobe
La principale méthode n'a pas accès aux membres non statique.
C'est parce que par défaut, lorsque vous appelez une méthode ou une variable, il est vraiment accéder à la
this.method()
ou cette.variable. Mais dans la méthode main() ou toute autre méthode statique(), pas de "ce" objets n'a pas encore été créé.En ce sens, la méthode statique n'est pas une partie de l'objet instance de la classe qui le contient. C'est l'idée derrière les classes utilitaires.
D'appeler n'importe quel non-statique méthode ou une variable dans un contexte statique, vous devez d'abord construire l'objet avec un constructeur ou d'une usine comme la votre serait n'importe où en dehors de la classe.
Plus en profondeur:
Fondamentalement, c'est une faille dans la conception de Java de l'OMI qui permet aux membres statiques (les méthodes et les champs) pour la référence comme si ils étaient les membres de l'instance. Cela peut être très déroutant dans le code comme ceci:
Que semble comme c'est d'envoyer le nouveau thread pour dormir, mais il fait compile vers le bas dans le code comme ceci:
parce que
sleep
est une méthode statique qui n'a jamais fait l' actuel fil du sommeil.En effet, la variable n'est même pas vérifié pour les non-nullité (plus; il utilisé pour être, je crois):
Quelques IDEs peut être configuré pour émettre un avertissement ou d'erreur de code comme celui - ci, vous ne devriez pas le faire, que ça fait mal la lisibilité. (C'est un des défauts qui ont été corrigés en C#...)
quand les variables sont initialisées en Java.
donc le seul moyen principal peut accéder à la instanceMethod et instanceVariable est que si elle fait l'objet de la Démonstration de la classe?
si
instanceMethod
etinstanceVariable
étaient méthode d'instance et de la variable d'instance, respectivement, alors qu'ils ne pouvaient être accessible à partir d'un méthode statique par référence à eux par l'objet de leur classe respective.OriginalL'auteur Lion
**Ici, vous pouvez voir tableau clair de l'accès des statiques et non statiques des données membres statiques et non statiques et méthodes. **
OriginalL'auteur Sufyan Ahmad
Vous pouvez créer des non-statique des références à des méthodes statiques comme :
Même chose que nous faisons dans le cas de
public static void main(String[] args)
méthodeOriginalL'auteur Nandkumar Tekale
OriginalL'auteur Abhishek Paithane