Une classe imbriquée fait référence à une classe définie à l'intérieur d'une autre classe. La classe imbriquée n'existe que pour ses classes environnantes. Il existe quatre types de classes imbriquées : les classes membres statiques, les classes membres non statiques, les classes anonymes et les classes partielles.
La classe membre statique est le type de classe imbriquée le plus simple. Il est préférable de le considérer comme une classe normale qui se trouve être définie dans une autre classe. Les classes membres statiques peuvent accéder à tous les membres de la classe englobante, y compris ces variables privées . Les classes membres statiques sont également conformes aux règles d'accessibilité. Si elles sont positionnées comme privées, cela signifie qu'elles ne sont accessibles qu'à l'intérieur de la classe englobante.
public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> { static class ImageVH extends RecyclerView.ViewHolder { //代码省略 } }
Dans Android, le ViewHolder le plus familier de listview que nous utilisons habituellement est la classe membre statique, généralement en tant que classe auxiliaire publique. Mettez en cache la mise en page dans la vue en tant que variable de cache de Listview.
Classe membre statique privée, utilisée pour représenter les composants de l' objet représenté par la classe environnante.
Le code est le suivant
La différence syntaxique entre les classes membres non statiques et les classes membres statiques est de savoir s'il existe le modificateur static. Bien que leur syntaxe soit similaire, les deux sont très différents. Chaque instance d'une classe membre non statique est implicitement associée à une instance englobante de la classe englobante. Dans une méthode d'instance d'une classe membre non statique, les méthodes sur l'instance englobante peuvent être appelées. indépendamment dans la classe englobante, une instance d’une classe membre non statique ne peut pas être créée sans une instance environnante.
Lorsqu'une instance d'une classe membre non statique est créée, l'association entre elle et l'instance environnante est également établie, et cette association ne peut pas être modifiée ultérieurement. Cette association se produit généralement lorsqu'une méthode d'instance de la classe englobante appelle le constructeur d'une classe membre non statique. Cette association consomme l'espace des instances de classe membre non statiques et augmente le temps nécessaire à la construction. Si la classe membre n'a pas besoin d'accéder à l'instance de classe périphérique, veuillez ajouter le modificateur statique .
public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> { class ImageVH extends RecyclerView.ViewHolder { // 真是对外部类的实例持有,在Android开发中很大部分activity中的context的内存泄露因为这个原因。 } }
La classe anonyme est différente des autres unités syntaxiques de JAVA. La classe anonyme n'a pas de nom. Elle n'est pas membre de la classe externe. Elle n'est pas déclarée avec les autres membres. . Déclaré instancié au moment de l'utilisation. Les classes anonymes peuvent apparaître n'importe où dans le code où une expression existe. Ce n'est que si une classe anonyme apparaît dans un environnement non statique qu'elle aura une instance périphérique. Même si elle est déclarée dans un environnement statique, elle ne peut avoir aucun membre statique.
imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 代码省略 } });
Les classes locales sont déclarées partout où "les variables locales peuvent être déclarées". Respectez également les règles de portée : 1. Les classes locales ont des noms qui peuvent être réutilisés. 2. Contrairement aux classes anonymes, ce n'est que lorsque la classe locale est définie dans un environnement non statique qu'elle peut avoir des instances périphériques et ne peut pas contenir de membres statiques.
public class mainActivity extends Activity{ private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // 此处同样可能引起context持有导致的内存泄露 } }; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!