Récemment, j'ai utilisé le Think in Java que j'ai regardé quand je suis parti. Je sentais que c'était très différent de la première fois que je l'ai regardé. Parlons de la relation entre les objets et les références en Java, ainsi que le concept de classes internes.
1. Tout en java est un objet
Quel est l'objet opérateur en Java? La réponse est une citation, qui est comme un pointeur en C ou C ++.
Si vous avez une référence, vous devez l'associer à un objet pour le moment, sinon la référence ne sera pas laissée à votre contrôle comme vous le pensez. Par exemple, vous créez une référence de chaîne:
String S;
Il n'est associé à aucun objet pour le moment. Si vous effectuez des opérations pour le moment, comme appeler certaines méthodes de chaîne, il y aura certainement des problèmes (sauf certains types de base, car lorsque vous les définissez, ils seront affectés à la valeur initiale), vous devez donc associer de l'argent à l'objet lorsque vous l'utilisez:
String s = new String ();
ou
String s = «Mon nom est ajun»;
Faites-le comme ça.
2. Comment s'associer aux objets
En Java, un objet est généralement créé via nouveau pour s'associer à des références, telles que:
String s = new String ("mon nom est ajun"); Cela crée non seulement un objet pour associer les références, mais l'initialise également pour les collègues, mais crée également notre propre type d'objet.
3. Emplacement de stockage
(1) Stack: Généralement, la pile stocke les références et les variables de type de base. La pile alloue et libère principalement la mémoire en déplaçant le pointeur de pile de haut en bas.
Les variables de type de base ne conviennent pas à la nouvelle création car elles occupent moins de mémoire.
(2) Heap: utilisé pour stocker des objets Java. Lorsque le programme s'exécute nouveau, le tas alloue un espace à cet objet. N'oubliez pas que le tas utilise plus de temps pour allouer et libérer la mémoire que la pile pour le stockage et la libération de la mémoire. C'est pourquoi les variables de type de base doivent être stockées sur la pile, car les variables de type de base sont utilisées les plus fréquemment, stockent et libérez fréquemment la mémoire, et lorsqu'elles sont consommées plus, les performances peuvent être imaginées.
4. Classe interne
(1) Connaissance de base des catégories internes:
Généralement, les classes définies à l'intérieur des classes Java deviennent des classes internes peuvent être divisées en: classes définies en dehors du corps de la méthode, des classes définies à l'intérieur de la méthode et des classes internes statiques (définies uniquement en dehors de la méthode), des classes internes anonymes Description:
Définissez la classe en dehors de la méthode:
Les variables membre de la classe (statique, non statique) sont accessibles. Afin de vous assurer que les variables membre de la classe peuvent être référencées correctement, vous devez d'abord instancier l'objet de la classe externe avant d'instantifier les autorisations d'accès à l'objet de la classe intérieure. Vous pouvez le traiter comme une variable de membre de la classe, vous le comprendrez donc beaucoup plus.
Classes définies dans le corps de la méthode;
Les variables membre de la classe (statique, non statique) sont accessibles. Afin de vous assurer que les variables membre de la classe peuvent être référencées correctement, vous devez d'abord instancier l'objet de la classe externe avant d'instanciation de l'objet de la classe intérieure ne peut pas avoir de droits d'accès et de le traiter simplement comme une variable locale de la méthode.
Classe intérieure statique:
Accès à toute classe intérieure anonyme uniquement en accédant aux variables de membres statiques de la classe:
Les variables membre de la classe (statique, non statique) sont accessibles. Afin de s'assurer que les variables membres de la classe peuvent être référencées correctement, il est nécessaire d'instancier l'objet de la classe externe avant l'instanciation de l'objet de la classe intérieure ne peut pas avoir (2). Le rôle de la classe intérieure peut très bien cacher la classe. Généralement, la classe n'autorise pas l'accès par défaut de protection privé.
Les classes internes peuvent mettre en œuvre un héritage multiple, compensant les caractéristiques que Java ne peut pas hériter de plus (3), des exemples
package com.ajun.test.innerclass.example; / ** * Contenu des fruits * @Author Administrator * * / Public Interface Content {String Value (); } package com.ajun.test.innerclass.example; / ** * Fruit Destination * @Author Administrator * * / Public Interface Destination {// Destination String ReadLabel (); } package com.ajun.test.innerclass.example; Goods de classe publique {chaîne privée des = "est ruit !!"; // Méthode Contenu de classe privée externe implémente le contenu {private String name = "Apple" + Des; @Override public String Value () {Nom de retour; }} // classe privée externe GDESTINATION implémente la destination {étiquette de chaîne privée; GDESTINATION PRIVATE (Label String) {this.Label = label; } @Override public String readLabel () {return label; }} // Classe interne anonyme Public Destination GetDestination (Final String Label) {return new Destination () {@Override public String readLabel () {return étiquette; }}; } Public Destination dest (String S) {return new GDESTINATION (S); } contenu public contenu () {return new contenu (); } Public Destination Dest2 (String S) {class GDestination implémente la destination {private String Label; GDESTINATION PRIVATE (Label String) {this.Label = label; } @Override public String readLabel () {return label; }} Renvoie une nouvelle gdestation (s); }} package com.ajun.test.innerclass.example; Test de classe publique {public static void main (String [] a) {biens gs = news goches (); Contenu C = gs.Content (); Destination d = gs.dest ("beijing"); System.out.println (C.Value ()); System.out.println (D.ReadLabel ()); Destination d1 = gs.getDestination ("shanghai"); System.out.println (d1.readLabel ()); System.out.println (gs.dest2 ("tianjin"). ReadLabel ()); }}Le contenu et la gdestation sont bien cachés. Lorsque vous appelez à l'extérieur, vous ne savez pas quelle classe est appelée, afin que cette classe ait plusieurs fonctionnalités d'héritage.
Sortir;
Apple est ruit !! Pékin Shanghai Tianjin