Un extrait de conférence avec un mentor dans le cadre du cours Codegym University. Inscrivez-vous au cours complet.


« Salutations, Amigo ! J'ai entendu dire que tu connaissais déjà bien les méthodes ?

"Salut, Rishi. Oui, j'ai déjà réussi à comprendre ce tour du professeur. Je dirais que ce n'était pas si mal, mais tu me diras : 'Non, non ! Tu n'as rien compris. '"

"Vous avez clairement passé trop de temps à discuter avec certains professeurs, probablement avec Diego. Quoi qu'il en soit... J'espère toujours que vous comprenez assez bien les méthodes. Après tout, aujourd'hui je vais vous apprendre quelques mots magiques qui aident à délimiter les méthodes « des sphères d'influence ».

"Cela semble intrigant."

"En fait, tout est simple. Avant chaque méthode, les programmeurs peuvent spécifier des modificateurs dits d'accès. Ceux-ci incluent les mots-clés suivants : public, protected, private.

"Ces modificateurs d'accès vous permettent de restreindre l'accès d'autres classes à une méthode.

"Par exemple, si vous écrivez le privatemot-clé avant une déclaration de méthode, la méthode ne peut être appelée qu'à partir de la même classe dans laquelle elle est déclarée. Le publicmot-clé permet d'accéder à la méthode marquée à partir de n'importe quelle méthode de n'importe quelle classe.

Il existe au total 3 modificateurs de ce type, mais il existe 4 types d'accès à une méthode. C'est parce que l'absence d'un modificateur d'accès signifie aussi quelque chose. Voici un tableau complet :

Accès depuis...
Modificateurs N'importe quelle classe Classe enfant Son forfait Sa classe
public Oui Oui Oui Oui
protected Non Oui Oui Oui
aucun modificateur Non Non Oui Oui
private Non Non Non Oui

"Et voici une explication complète des modificateurs d'accès :

1. publicmodificateur

Une méthode (ou une variable, ou une classe) marquée avec le publicmodificateur est accessible de n'importe où dans le programme . C'est le plus haut degré d'ouverture — il n'y a pas de restrictions.

2. privatemodificateur

Une méthode (ou variable ou classe) marquée avec le privatemodificateur n'est accessible qu'à partir de la même classe où elle est déclarée . Pour toutes les autres classes, la méthode (ou variable) marquée est invisible. C'est comme si ça n'existait pas. Il s'agit du niveau de restriction le plus élevé - uniquement sa propre classe.

3. Aucun modificateur (modificateur par défaut)

Si une méthode (ou une variable) n'est marquée d'aucun modificateur, elle est considérée comme ayant le « modificateur par défaut ». Les variables ou les méthodes avec ce modificateur (c'est-à-dire sans aucun) sont visibles pour toutes les classes du package dans lequel elles sont déclarées . Et seulement à eux. Ce modificateur est aussi parfois appelé package-private, indiquant que l'accès aux variables et aux méthodes est ouvert à l'ensemble du package dans lequel se trouve leur classe.

4. protectedmodificateur

Si une méthode est marquée avec le protectedmodificateur, elle est accessible à partir de la même classe, du même package et des descendants (classes qui héritent de la classe dans laquelle la méthode est déclarée). Nous analyserons ce sujet plus en détail dans la quête Java Core."

"Intéressant, mais je ne suis pas sûr de pouvoir mettre immédiatement ces modificateurs aux bons endroits.

"Vous y arriverez progressivement. Pas besoin de vous inquiéter à l'avance. Jusqu'à la fin de la quête Java Syntax, vous pouvez utiliser le publicmodificateur sur toutes vos méthodes (ainsi que les classes et les variables d'instance). Vous aurez besoin du d'autres modificateurs lorsque nous commençons à apprendre activement la POO."

"Pouvez-vous expliquer plus en détail pourquoi les modificateurs d'accès sont nécessaires ?"

"Ils deviennent nécessaires pour les grands projets écrits par des dizaines et des centaines de programmeurs en même temps.

"Parfois, il y a des situations où un programmeur veut diviser une méthode excessivement grande en parties et déplacer une partie du code dans des méthodes d'assistance. Mais en même temps, il ou elle ne veut pas que d'autres programmeurs appellent ces méthodes d'assistance, car le le code correspondant peut ne pas fonctionner correctement."

"Ils ont donc proposé ces modificateurs d'accès. Si vous marquez une méthode d'assistance avec le mot private , aucun code autre que votre classe ne peut voir votre méthode d'assistance."

"Je pense que je comprends."

staticmot-clé

"Il existe un autre mot-clé intéressant. C'est static. Sans surprise, cela rend les méthodes statiques."

"Qu'est-ce que cela signifie?"

"Je vous en dirai plus plus tard. Ne vous inquiétez pas. Pour l'instant, essayez simplement de vous souvenir de quelques faits sur les méthodes statiques.

Fait 1. Une méthode statique n'est attachée à aucun objet, mais appartient à la place à la classe dans laquelle elle est déclarée. Pour appeler une méthode statique, vous devez écrire :

ClassName.MethodName()

Exemples de méthodes statiques :

Nom du cours Nom de la méthode statique
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

Le nom de classe avant le nom d'une méthode statique peut être omis si vous appelez la méthode statique depuis sa classe. C'est pourquoi vous n'avez pas besoin d'écrire Solutionavant le nom de chacune des méthodes statiques appelées.

Fait 2. Une méthode statique ne peut pas accéder aux méthodes non statiques de sa propre classe. Une méthode statique ne peut accéder qu'aux méthodes statiques. En conséquence, nous déclarons toutes les méthodes que nous voulons appeler à partir de la mainméthode static."

"Pourquoi donc?"

"Vous répondrez vous-même à cette question lorsque vous commencerez à apprendre la POO et comprendrez le fonctionnement des méthodes statiques. Jusque-là, faites-moi confiance.

throwsmot-clé

"Il y a un autre mot-clé que vous avez probablement vu dans une déclaration de méthode — le throwsmot-clé. Contrairement aux modificateurs d'accès et au staticmot-clé, ce mot-clé est placé après les paramètres de la méthode :

public static Type name(parameters) throws Exception
{
  method body
}

"Et qu'est-ce que cela veut dire?"

"Une fois de plus, je dois vous dire que vous apprendrez son véritable objectif plus tard, lorsque nous étudierons les exceptions (au niveau 15).

Mais pour y toucher superficiellement, on peut dire qu'une méthode marquée avec le throwsmot-clé peut lancer des erreurs (exceptions), c'est-à-dire des instances de la Exceptionclasse (et des classes qui en héritent). Si plusieurs types d'erreurs différents peuvent se produire dans une classe, vous devez lister chacun d'entre eux en les séparant par des virgules."

"Ça a l'air mystérieux et incompréhensible ! Je vais devoir attendre le niveau 14."

méthode principale

"Regardons maintenant de plus près la méthode principale. Vous comprenez déjà que la ligne où une méthode est déclarée, qui contient tous les modificateurs, affectera la façon dont cette méthode est appelée à partir d'autres classes et méthodes. De plus, cela affecte le type de result la méthode renverra et indiquera quelles erreurs sont possibles lors de son exécution.

"Une telle ligne s'appelle une déclaration de méthode et a le format général suivant :

access modifier static Type name(parameters) throws exceptions
Format général d'une déclaration de méthode

access modifiersest remplacé par public, protected, private, ou rien du tout ;

si la méthode est statique, alors le staticmot clé apparaît (il est absent pour les méthodes non statiques)

Typeest le type de la valeur de retour ( voids'il n'y a pas de résultat)

"Maintenant, vous avez une bien meilleure compréhension de ce que signifient tous ces mots dans la déclaration de la mainméthode :

public static void main(String[] args) throws Exception
Déclarer la mainméthode

"Eh bien, maintenant je me rends compte que l'accès à la main()méthode est possible à partir de n'importe quelle classe, comme indiqué par le publicmot-clé. La méthode est statique, elle peut donc être appelée explicitement en tant que Solution.main()."

"Quel résultat la main()méthode renvoie-t-elle ?"

"Aucun du tout ! Le type de résultat est void. C'est un peu comme un type vide, un espace réservé."

« Qu'est-ce qu'il main()y a entre parenthèses ? »

"Hmm... Il s'avère que la mainméthode prend des arguments (!). Ils sont passés sous la forme d'un tableau de chaînes."

"C'est vrai. Et le nom du paramètre argssuggère des "arguments" à notre esprit. Lorsque le programme démarre, vous pouvez lui passer des arguments - un tableau de chaînes. Ils seront contenus dans le argstableau de la main()méthode."

"Whoa ! Je me suis posé la question la première fois que je l'ai vu, mais je m'y suis habitué et j'ai commencé à écrire la liste des paramètres sans réfléchir."

"Nous sommes tous passés par là. Enfin, des erreurs non gérées comme Exception(ou ses descendants) peuvent se produire dans la main()méthode. Nous le savons grâce à la throws Exceptionpartie de la déclaration."

"Merci, Rishi. Je n'ai pas tout compris, mais c'était intéressant."

« De rien. Petit à petit, vous arriverez à comprendre tous ces points subtils, j'en suis sûr. »