problème de création d'objet à l'intérieur de la classe en java
Voici le code.
public class Test {
class InnerClass{
}
public static void main(String[] args){
InnerClass ic = new InnerClass();
}
}
Il dit que le message d'erreur
non-static variable this cannot be referenced from a static context
after creation of object ic.
Quelqu'un peut-il me donner la raison?
Grâce
Lire ici. stackoverflow.com/questions/290884/... et stackoverflow.com/questions/926822/...
principales est une méthode statique, il peut accéder uniquement à d'autres membres statiques de l'extérieur de la classe.
principales est une méthode statique, il peut accéder uniquement à d'autres membres statiques de l'extérieur de la classe.
OriginalL'auteur bunkdeath | 2011-03-11
Vous devez vous connecter pour publier un commentaire.
InnerClass
doit êtrestatic
lui-même, c'est à direSi
InnerClass
est passtatic
, il ne peut être instancié dans le contexte d'un parent instance deTest
. Plutôt baroque syntaxe est la suivante:OriginalL'auteur skaffman
À votre intérieur de la classe dépend d'une instance de la
Test
classe. principales est une méthode statique, vous ne pouvez donc pas créer une instance deInnerClass
.Je pense que vous voulez déclarer votre intérieur de la classe comme
static
:Plus d'informations sur les classes imbriquées : http://download.oracle.com/javase/tutorial/java/javaOO/nested.html
Courte explication
Il y a principalement deux types de classes imbriquées : "statique de la classe imbriquée" et "intérieure"
Statique de la classe imbriquée sont utilisés pour regrouper logiquement les deux classes et peut être utilisé pour augmenter l'encapsulation. Ils peuvent être utilisés comme toutes les autres classes et, à l'exception de la visibilité, ils n'ont pas d'accès particulier à l'extérieur des champs de classe. Ils peuvent logiquement être instancié dans un contexte statique.
Intérieur de la classe (c'est à dire pas statique) sont lié à une instance particulière de l'extérieur de la classe. Cela signifie que vous doit avoir une instance de l'extérieur de la classe à instancier l'intérieur de la classe. Jetez un oeil à Skaffman deuxième morceau de code pour un exemple d'instanciation. Depuis les classes internes sont liés à une instance de l'extérieur de la classe, ils ont accès à tous les domaines par rapport à ce cas particulier.
J'espère que tout cela est maintenant plus claire.
et bunkdeath : Regarder la skaffman de réponse. Précis.
le lien devrait suffire à comprendre la raison, mais je vais mettre à jour ma réponse un peu. @herbalessence skaffman il n'explique pas tout, il donne code de travail.
OriginalL'auteur krtek
Tout d'abord, une "niche" de la classe est statique, et un "intérieur" de la classe ne l'est pas.
Une classe statique est partagée entre toutes les instances de la classe englobante (donc les champs statiques sont partagés entre toutes les instances), tandis que chaque instance possède son propre version d'un non-statique à l'intérieur de la classe.
Non statique les classes internes sont stockées avec l'affichage de l'objet (plutôt que de classe) et ne peut être accessible via une instance.
OriginalL'auteur sgokhales