Qu'est-ce qu'un client d'une classe?
J'ai toujours pensé qu'un client d'une classe utilise une référence à l'accès des champs d'instance/méthodes de la classe c'est à dire une autre classe (à partir de ses propres méthodes). Mais quand je pense au sujet de certains détails, il y a certaines choses que je ne pouvais pas comprendre.
En Java je connais quelques endroits où vous pouvez placer l'action des états.
- À l'intérieur d'une méthode (instance/statique)
- Inline initialisation (lorsque vous déclarez une variable d'instance, comme dans
private int x = 5;) - Statique bloc
Il existe peut-être plus que je ne sais pas ou se souvenir.
La première partie de la question est sont tous ces considérés comme des clients si ils sont dans une autre classe? Aussi peuvent-ils accès privé des choses quand ils sont dans la même classe?
La deuxième partie est: Lors de la JVM appelle une méthode (comme le principal et finaliser) sont-ils considérés comme des clients, trop? (les appels ne sont pas d'une classe?)
Edit: d'un client Peut accéder uniquement les méthodes publiques et les variables? Ne peut-on pas appeler cela un client si elle accède aux champs de package (si dans le même package).
source d'informationauteur Insignificant Person | 2015-05-28
Vous devez vous connecter pour publier un commentaire.
Avant de plonger dans Java permet d'essayer de cartographier la situation d'un monde physique scénario.
Vous allez à une maison de pâtisserie et de l'ordre d'une pâtisserie. Vous obtenez la pâte à partir de la banque de payer pour cela et le laisser. Vous naturellement appeler vous-même un client de la boutique. Qu'avons-nous donc comprendre?
Le terme client désigne toute entité qui demande un service à partir d'une autre entité. Le client n'a pas pris la peine sur la façon dont l'entité qui fournit le service fournit en fait le service, le client est heureux aussi longtemps que le service est disponible et s'acquitte de ses cas d'utilisation.
Par conséquent, lorsqu'une méthode M1 au sein d'une classe en appelle une autre méthode M2 puis M1 est un client de M2. De même, quand une classe C1 service de demandes de C2 alors C1 est un client de C2.
Pour en venir à votre question à propos de main()finalize() et l'interaction avec la JVM - Vous pouvez envisager de la classe loader de la JVM en tant que client de votre classe depuis qu'il se charge de la JVM classe chargeur charge votre classe, puis demande la principale méthode pour commencer l'exécution et de poursuivre le traitement.
À MODIFIER selon le commentaire de l'OP -
finalize()
méthode est accessible par le Garbage Collector à l'intérieur de la JVM à l'aide de certains internes de la JVM astuces. En règle générale, dans le fonctionnement normal de l'application ne sera pas effectuer une telle supercherie.Je ne crois pas qu'il existe une stricte définition de "client de la classe". J'ai l'habitude de dire "code client", c'est un morceau de code qui utilise un autre morceau de code à travers une sorte de contrat. De ce point de vue, même JVM, lors de l'appel de votre classe
finalize
méthode, peut être considéré comme client code pour le code de votre classe, qu'il fonctionne avec votre classe grâce à une interface spécifique défini dansObject
classe (sesfinalize
méthode).De toute façon, le point ici n'est pas comment vous appelez ça, mais ce que vous en faites. Est l'appel de la JVM client de votre classe signifie quelque chose pour vous, ou affecte la façon dont vous écrivez votre code? Je ne pense pas. Donc, je préfère parler de la notion de contrat (interface) entre deux morceaux de code.
Correct, mais pas limité à des cas
Oui les méthodes et les variables sont des clients d'une autre classe si elles font référence.
Noter que inline l'initialisation est en fait un raccourci pour l'initialisation dans le constructeur de la méthode et de blocs statiques pour l'initialiseur statique.
Seulement si l'autre classe de permis (comme le fait de retourner un objet privé à partir d'une méthode de lecture). Même pour les protégés de trucs, sauf si c'est dans le même paquet, la JVM elle-même n'est pas soumis à privé/protégé limites.
La JVM ou l'un de ses composants est considéré comme le client dans ce cas.
Les appels peuvent être à partir d'une classe dans la JVM en fonction de la JVM.
Un client d'une classe, généralement acceptée du terme, est d'une autre classe qui utilise la référence des méthodes d'accès (moins probable champs en raison du principe de l'encapsulation dans la programmation orientée objet). Ce que vous avez énumérées ne sont pas considérés comme des clients. Mais le terme est partie d'une même langage de programmation, il n'est pas comme il y a une grande théorie derrière elle. C'est exactement ce que la majorité des programmeurs à comprendre.
Je ne suis pas sûr, qu'il y a une définition stricte de "clients" en Java. En fait, je préfère suggérer ce terme concernant les interfaces, car ils imposent d'encapsulation et d'éviter les appels statiques. Puisqu'il y a différentes accessibilité des modes, qui sont appliquées à des méthodes et des champs, alors il est difficile de prédire et de définir l'exacte appel est "client" et qui ne l'est pas. Par ailleurs, une autre question s'élève: "Devrions-nous appeler l'enfant en classe un "client" puisqu'il peut utiliser du parent méthodes?'