L'appel de méthodes en Java
Je suis un débutant et je vais essayer d'obtenir une prise sur les méthodes en Java. En général, je comprends les différences entre statiques et non statiques les méthodes, mais parfois, la lecture d'autres de code, je suis confus quant à la façon d'un appel particulier est écrit.
Que j'ai compris la méthode statique peut être appelée avec ou sans objet. Non méthode statique besoin d'un objet pour être appelé, cependant, quand les non-statique méthode est appelée dans un autre non méthode statique, dans écrit, il peut être appelé par un nom(comme méthode()), sans référence à l'objet (comme objet.méthode() ou .méthode()).
Est-il une autre situation, lorsqu'un non-statique appel de la méthode peut être écrit de cette manière?
Est-il une autre façon d'appeler une méthode, au-delà de ceux-là?
Je serais reconnaissant pour tous les commentaires.
foo()
dans un non statique de la méthode de classe est équivalente à this.foo()
; la this
est implicite. Il n'y a rien de vraiment spécial à ce sujet autre que cela.Il dit explicitement écrit, je suppose qu'il a dit que, pour exclure de la réflexion comme réponse possible.
OriginalL'auteur m.cekiera | 2015-03-05
Vous devez vous connecter pour publier un commentaire.
Peut-être que vous êtes en train de penser à un appel à une méthode de la même classe, par exemple:
OriginalL'auteur spudone
Nous allons vous inquiétez pas statique/non-statique pour un deuxième, c'est une autre boîte de pandore. Nous allons penser à ce genre de programmes que vous avez pour la plupart construits jusqu'à présent; peut-être que vous avez conçu un programme comme le calcul de la distance entre les deux (x,y) les coordonnées.
Maintenant, ce qui se passe si vous souhaitez utiliser ce code dans un programme plus complexe, comme un jeu vidéo pour déterminer si votre personnage est en collision dans un mur? Maintenant, vous avez 3 coordonnées(A et B sont de la Paroi et C est le Personnage) et vous aurez besoin de connaître la distance entre les trois coordonnées (AB, AC et BC). Pourquoi? Parce que si AB == AC + BC, alors notre personnage a couru dans un mur! Voici une vidéo expliquant pourquoi cela fonctionne par votre serviteur: La Détection de Collision 2D des Points
Je ne veux pas avoir à plusieurs reprises tapez la formule même? Ou de perdre du temps à copier et coller? Non, je suis paresseux. C'est pourquoi je programme l'ordinateur pour faire des choses pour moi.
Ce que je PEUT faire, cependant, le design est minuscule, peu de programmes qui peuvent être exécutés à l'intérieur de mon gros, le programme principal. Ceux-ci sont appelés méthodes.
Maintenant, remarquez que j'ai fait deux choses différemment.
J'ai nommé ma variable dist au lieu de la distance; c'est juste bien pratique pour ne pas la nommer vos variables de la même méthode.
Deux, je l'ai jeté dans un instruction de retour. Maintenant, pensez à le premier programme que j'ai montré, ce qu'il fait quand il est fait? Rien. Il imprime à l'écran et c'est tout. Il s'arrête et efface de la mémoire. Mais que faire si j'ai besoin de la distance plus tard? Eh bien, c'est là que retour. Il fait en sorte qu'après avoir fait les calculs, avant de l'effacer de la mémoire, il veut donner de nouveau à vous.
Si vous avez appris à propos de
Math.random()
, notez que vous avez besoin de stocker ou de les utiliser, sinon c'est parti pour de bon. C'est parce queMath.random()
a un type de retour d'un double. Quelque chose commeSystem.out.println()
a un type de retour de vide car il n'a pas de "retour" rien, juste à l'affiche le texte à l'écran.Le principe de base derrière une méthode est:
<access modifier> <return type> <name> (<parameters>) { }
Le modificateur d'accès, pour l'instant, devrait rester à la
public static
. Vous en apprendrez plus sur les classes plus tard. Lereturn type
est la chose la plus importante, car ce comme comme lorsque vous faites une variable; vous avez eu à dire à Java ce type de données qu'elle a été - même pour une méthode. Vous avez à dire à Java ce type de données ce petit programme va produire.name
n'est pas différent que lorsque vous avez nommé variables mais maintenant, vous devez ajouter dansparameters
, qui sont des espaces réservés dans la méthode, car nous ne savons pas ce que les valeurs et les variables qui seront utilisées par la suite sont des va être!Maintenant que j'ai
distance
comme méthode, je peux l'utiliser trois fois où je veux:public static
méthode, j'ai accès à partir de partout (relative)! Si je sauvegarde mon fichier en tant queCollision.java
et puis faire un autre fichierPacman.java
, puis à l'intérieur de monmain method
dans Pacman, je peux avoir:Collision.distance(x1, y1, x2, y2);
C'est là que des méthodes statiques qui entrent en jeu, je me réfère à la classe à laquelle il a été construit, plutôt que d'avoir à fairenew Collision()
ou quelque chose comme ça.Pour ajouter encore une fois, l'idée des méthodes de la classe dit maintenant que si, au lieu de
doubles
, je voulais utiliser un type de données personnalisé, comme unPoint
classe qui dispose de sa propredistance(Point other) {}
méthode. Cette version dedistance
maintenant toujours être directement associé à son point d'origine; considérant que le ci-dessus est de deux points distincts, chaque fois qu'elle est appelée. UnPoint p1 = new Point(0,0);
etPoint p2 = new Point(1,1);
d'interagir les uns avec les autres avec l'un des points d'agir comme le point de référence (désolé, mauvais jeu de mots), commep1.distance(p2);
OriginalL'auteur tsumnia
Fondamentalement, vous pouvez appeler les non-statique méthode:
method();
outhis.method();
Lorsque vous utilisez la deuxième syntaxe avec
this
, vous pourrez dire au compilateur que vous appeler à partir de l'instance (explicite).Les deux fonctionnent de la même manière.
Mais, il y a un autre exemple que l'on peut définir ce clair pour vous. La réflexion sur les variables. Vérifier ce code:
L'objet de la variable est définie à l'aide d'une variable locale. Si vous n'utilisez pas
this
pour cet appel, le compilateur pourrait comprendre que la variable que vous faites affaire avec était juste au niveau local.Espère que cela aide.
OriginalL'auteur Laerte
Lorsque vous écrivez
this
dans une classe en Java (ou lorsqu'elle est implicite), on se réfère à l'objet instanciating que la classethis
est une référence à un objet n'est pas une classe.C'est difficile à obtenir au début, mais il y a une différence entre la notion d'objet et de classe dans la programmation orientée objet, et donc en Java.
Notez également que lorsque vous appelez une méthode statique, vous utilisez le nom de la classe contenant la méthode statique parce que la méthode statique est un concept défini pour la classe pas les objets particuliers instanciating cette classe.
OriginalL'auteur a_mid