J'ai récemment jeté un œil à think in java quand j'étais en arrêt de travail, et c'était très différent de la première fois que je l'ai relu
Parlons ensuite de la relation entre les objets et les références en Java, et du concept de classes internes.
1. Tout en Java est un objet
Qu'est-ce qui contrôle les objets en Java ? La réponse est une référence, qui ressemble à un pointeur en C ou C.
Si vous avez une référence, vous devez l'associer à un objet à ce moment, sinon la référence ne sera pas sous votre contrôle comme vous l'imaginez. Par exemple, si vous créez une référence String :
String s ;<.>Il n'est associé à aucun objet pour le moment. Si vous effectuez certaines opérations à ce moment, comme appeler certaines méthodes de String, des problèmes surviendront certainement (certains types de base sauf, car ils le seront). assigné des valeurs initiales lorsque vous les définissez), donc lorsque vous utilisez de l'argent, vous devez l'associer à l'objet :
String s = new String();ou
String s = “my name is ajun”;Juste comme ça.
2. Comment s'associer à un objet
En java, un objet est généralement créé via new pour s'associer à une référence, telle que :
String s = new String("my name is ajun")C'est non seulement Un objet est créé et associé à la référence s, et est également initialisé. En même temps, nous pouvons également créer notre propre type d'objet.
3. Emplacement de stockage
(1) Pile : stocke généralement les références et les variables de type de base. La pile alloue et libère principalement de la mémoire en déplaçant le pointeur de la pile de haut en bas.
Les variables de type basique ne conviennent pas à la création avec new car elles occupent une petite quantité de mémoire.
(2) Heap : utilisé pour stocker des objets Java. Lorsque le programme exécute un nouveau, le tas allouera un espace à cet objet. N'oubliez pas que l'allocation et la libération de mémoire par le tas coûtent plus cher que le stockage et la libération de. mémoire par la pile.Cela signifie que les variables de type de base doivent être stockées sur la pile, car les variables de type de base sont utilisées le plus fréquemment, et la mémoire est stockée et libérée fréquemment. Lorsque davantage est consommée, les performances peuvent être imaginées.
4. Classes internes
(1) Connaissance de base des classes internes :
Généralement, les classes définies à l'intérieur des classes Java deviennent des classes internes
Les classes internes peuvent être divisées en : classes définies en dehors du corps de la méthode, Classes définies à l'intérieur de la méthode, classes internes statiques (ne peuvent être définies qu'en dehors de la méthode), classes internes anonymes
Description :
Classes définies en dehors de la méthode :
Variables membres de la classe (statiques, non statiques) peut être Access, afin de garantir que les variables membres de la classe peuvent être correctement référencées, l'objet de la classe externe doit d'abord être instancié avant que l'objet de la classe interne puisse être instancié
Les autorisations d'accès peuvent être n'importe lesquelles, et il peut être considéré comme une variable membre de la classe. Cela le rend beaucoup plus facile à comprendre.
Classe définie dans le corps de la méthode;
Les variables membres (statiques et non statiques) de la classe sont accessibles. Afin de garantir que les variables membres de la classe peuvent être correctement référencées, l'objet de la classe. La classe externe doit être instanciée en premier. L'objet
qui instancie la classe interne ne peut pas avoir de droits d'accès. Il suffit de le traiter comme une variable locale de la méthode.
Classe interne statique :
Peut accéder uniquement aux variables membres statiques de la classe
Droits d'accès Tous
Classe interne anonyme :
Les variables membres (statiques, non statiques) de la classe sont accessibles , afin de garantir que référencez correctement les variables membres de la classe, de sorte que l'objet de la classe externe doit d'abord être instancié avant que l'objet de la classe interne puisse être instancié
Les autorisations d'accès ne peuvent pas être
(2), le rôle de la classe interne
Les classes internes peuvent très bien masquer les classes. Généralement, les classes ne sont pas autorisées à avoir des droits d'accès par défaut de protection privée.
Les classes internes peuvent obtenir un héritage multiple, ce qui compense le fait que Java ne peut pas avoir d'héritage multiple
(3), exemple
package com.ajun.test.innerclass.example; /** * 水果内容 * @author Administrator * */ public interface Contents { String value(); } package com.ajun.test.innerclass.example; /** * 水果目的地 * @author Administrator * */ public interface Destination { //目的地 String readLabel(); } package com.ajun.test.innerclass.example; public class Goods { private String des="is ruit!!"; //方法外部 private class Content implements Contents{ private String name = "apple "+des; @Override public String value() { return name; } } //方法外部 private class GDestination implements Destination{ private String label ; private GDestination(String label){ this.label= label; } @Override public String readLabel() { return label; } } //匿名内部类 public Destination getdestination(final String label){ return new Destination(){ @Override public String readLabel() { return label; } }; } public Destination dest(String s){ return new GDestination(s); } public Contents content(){ return new Content(); } public Destination dest2(String s){ class GDestination implements Destination{ private String label; private GDestination(String label){ this.label= label; } @Override public String readLabel() { return label; } } return new GDestination(s); } } package com.ajun.test.innerclass.example; public class Test { public static void main(String [] a){ Goods gs = new Goods(); Contents 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()); } }
<.>où Content et Gdestination sont bien cachés. Lorsqu'il est appelé de l'extérieur, on ne sait pas quelle classe spécifique est appelée, ce qui donne à cette classe la caractéristique d'un héritage multiple.
Pour plus d'articles sur la compréhension des objets, des références et des classes internes dans la programmation orientée objet Java, veuillez prêter attention au site Web PHP chinois !apple is ruit!! Beijing Shanghai Tianjin