Méthodes Java
Dans les chapitres précédents, nous avons souvent utiliséSystem.out.println(), alors qu'est-ce que c'est ?
- println() est une méthode.
- System est une classe système.
- out est l'objet de sortie standard.
Cette instruction est utilisée pour appeler la méthode println() dans l'objet de sortie standard out de la classe système System.
Alors, qu'est-ce qu'une méthode ?
Une méthode Java est une collection d'instructions qui, ensemble, accomplissent une fonction.
- Une méthode est une combinaison ordonnée d'étapes pour résoudre une classe de problèmes.
- Une méthode est contenue dans une classe ou un objet.
- Une méthode est créée dans le programme et référencée ailleurs.
Avantages des méthodes
- 1. Cela rend le programme plus court et plus clair.
- 2. C'est bénéfique pour la maintenance du programme.
- 3. Cela peut améliorer l'efficacité du développement de programmes.
- 4. Cela améliore la réutilisabilité du code.
Règles de nommage des méthodes
- 1. Le premier mot d'un nom de méthode doit commencer par une lettre minuscule, et les mots suivants doivent commencer par une lettre majuscule, sans utiliser de séparateurs. Par exemple :addPerson。
- 2. Les traits de soulignement peuvent apparaître dans les noms de méthodes de test JUnit pour séparer les composants logiques du nom. Un modèle typique est :test<MethodUnderTest>_<state>, par exempletestPop_emptyStack。
Définition de méthode
En général, la définition d’une méthode comprend la syntaxe suivante :
Une méthode est composée d’un en-tête de méthode et d’un corps de méthode. Voici toutes les parties d’une méthode :
- Modificateurs :Les modificateurs sont facultatifs et indiquent au compilateur comment appeler la méthode. Ils définissent le type d’accès de la méthode.
- Type de valeur de retour :Une méthode peut renvoyer une valeur. returnValueType est le type de données de la valeur renvoyée par la méthode. Certaines méthodes effectuent l’opération requise mais ne renvoient pas de valeur. Dans ce cas, returnValueType est le mot-clévoid。
- Nom de la méthode :C’est le nom réel de la méthode. Le nom de la méthode et la table des paramètres constituent ensemble la signature de la méthode.
- Type de paramètre :Les paramètres agissent comme des espaces réservés. Lorsqu’une méthode est appelée, une valeur est transmise au paramètre. Cette valeur est appelée argument réel ou variable. La liste de paramètres désigne les types de paramètres, leur ordre et leur nombre. Les paramètres sont facultatifs ; une méthode peut ne contenir aucun paramètre.
- Corps de méthode :Le corps de méthode contient des instructions concrètes qui définissent la fonctionnalité de la méthode.
Par exemple :
Il peut y avoir plusieurs paramètres :
Remarque :Dans certains autres langages, les méthodes sont appelées procédures et fonctions. Une méthode qui renvoie une valeur non-void est appelée une fonction ; une méthode qui renvoie une valeur void est appelée une procédure.
Exemple
La méthode suivante contient 2 paramètres, num1 et num2, et elle renvoie le maximum de ces deux paramètres.
Une façon plus concise de l'écrire (opérateur ternaire) :
Invocation de méthode
Java prend en charge deux façons d'appeler une méthode, selon que la méthode renvoie une valeur ou non.
Lorsqu'un programme appelle une méthode, le contrôle du programme est transféré à la méthode appelée. Le contrôle est renvoyé au programme lorsque la méthode appelée exécute une instruction return ou atteint l'accolade fermante du corps de la méthode.
Lorsqu'une méthode renvoie une valeur, l'appel de méthode est généralement traité comme une valeur. Par exemple :
Si une méthode renvoie void, l'appel de méthode doit être une instruction. Par exemple, la méthode println renvoie void. L'appel suivant est une instruction :
Exemple
L'exemple suivant montre comment définir une méthode et comment l'appeler :
Code du fichier TestMax.java :
L'exemple ci-dessus se compile et s'exécute avec le résultat suivant :
5 和 2 比较,最大值是:5
Ce programme contient une méthode main et une méthode max. La méthode main est appelée par la JVM. À part cela, la méthode main ne diffère pas des autres méthodes.
L'en-tête de la méthode main est fixe, comme indiqué dans l'exemple. Il a les modificateurs public et static, renvoie une valeur void, le nom de la méthode est main, et il prend un paramètre de type String[]. String[] indique que le paramètre est un tableau de chaînes de caractères.
Le mot-clé void
Cette section explique comment déclarer et appeler une méthode void.
L'exemple suivant déclare une méthode nommée printGrade et l'appelle pour afficher le score donné.
Exemple
Code du fichier TestVoidMethod.java :
L'exemple ci-dessus se compile et s'exécute avec le résultat suivant :
C
Ici, la méthode printGrade est une méthode de type void ; elle ne renvoie pas de valeur.
Un appel à une méthode void doit être une instruction. Par conséquent, elle est appelée en tant qu'instruction à la troisième ligne de la méthode main, comme toute instruction se terminant par un point-virgule.
Passage de paramètres par valeur
Lors de l'appel d'une méthode, vous devez fournir des arguments. Vous devez les fournir dans l'ordre spécifié par la liste de paramètres.
Par exemple, la méthode suivante affiche un message n fois de suite :
Code du fichier TestVoidMethod.java :
Exemple
L'exemple suivant montre l'effet du passage par valeur.
Le programme crée une méthode qui échange deux variables.
Code du fichier TestPassByValue.java :
L'exemple ci-dessus se compile et s'exécute avec le résultat suivant :
交换前 num1 的值为:1 ,num2 的值为:2 进入 swap 方法 交换前 n1 的值为:1,n2 的值:2 交换后 n1 的值为 2,n2 的值:1 交换后 num1 的值为:1 ,num2 的值为:2
Passez deux arguments pour appeler la méthode swap. Il est intéressant de noter qu’après l’appel de la méthode, les valeurs des arguments réels ne changent pas.
Surcharge de méthode
La méthode max utilisée ci-dessus ne fonctionne qu’avec des données de type int. Mais que faire si vous voulez obtenir le maximum de deux données de type à virgule flottante ?
La solution consiste à créer une autre méthode portant le même nom mais avec des paramètres différents, comme indiqué dans le code suivant :
Si vous passez des paramètres de type int lors de l’appel de la méthode max, la méthode max avec des paramètres de type int sera appelée ;
Si des paramètres de type double sont passés, le corps de la méthode max avec le type double sera appelé. C’est ce qu’on appelle la surcharge de méthode ;
C'est-à-dire que deux méthodes d'une classe ont le même nom mais des listes de paramètres différentes.
Le compilateur Java détermine quelle méthode doit être appelée en fonction de la signature de la méthode.
La surcharge de méthodes peut rendre les programmes plus clairs et plus lisibles. Les méthodes qui effectuent des tâches étroitement liées doivent utiliser le même nom.
Les méthodes surchargées doivent avoir des listes de paramètres différentes. Vous ne pouvez pas surcharger des méthodes en vous fondant uniquement sur des différences de modificateurs ou de types de retour.
Portée des variables
La portée d'une variable est la partie du programme où la variable peut être référencée.
Les variables définies à l'intérieur d'une méthode sont appelées variables locales.
La portée d'une variable locale commence à partir de sa déclaration et se poursuit jusqu'à la fin du bloc qui la contient.
Les variables locales doivent être déclarées avant de pouvoir être utilisées.
La portée des paramètres d'une méthode couvre toute la méthode. Les paramètres sont en fait des variables locales.
Les variables déclarées dans la partie d'initialisation d'une boucle for ont une portée qui s'étend sur toute la boucle.
Toutefois, les variables déclarées dans le corps de la boucle ont une portée allant de leur déclaration à la fin du corps de la boucle. Il contient des déclarations de variables comme indiqué ci-dessous :
Vous pouvez déclarer une variable locale portant le même nom plusieurs fois dans différents blocs non imbriqués d'une méthode, mais vous ne pouvez pas déclarer une variable locale deux fois dans des blocs imbriqués.
Utilisation des arguments de ligne de commande
Parfois, vous souhaitez transmettre des messages à un programme lorsque vous l'exécutez. Cela est réalisé en passant des arguments de ligne de commande à la fonction main().
Les arguments de ligne de commande sont les informations qui suivent le nom du programme lorsque celui-ci est exécuté.
Exemple
Le programme suivant affiche tous les arguments de ligne de commande :
Code du fichier CommandLine.java :
Exécutez ce programme comme suit :
$ javac CommandLine.java $ java CommandLine this is a command line 200 -100 args[0]: this args[1]: is args[2]: a args[3]: command args[4]: line args[5]: 200 args[6]: -100
Méthodes de constructeur
Un constructeur est une méthode spéciale utilisée pour créer des objets d'une classe. Lorsqu'un objet est créé à l'aide du mot-clé new, le constructeur est automatiquement appelé pour initialiser les propriétés de l'objet.
Caractéristiques des constructeurs :
- Le nom de la méthode est identique au nom de la classe: Le nom du constructeur doit correspondre au nom de la classe.
- Aucun type de retour: Les constructeurs n'ont pas de type de retour ; même
voidvoid ne peut pas être écrit. - Appelé automatiquement lors de la création d'un objet: Chaque fois que vous utilisez
newnew pour créer un objet, le constructeur est automatiquement appelé. - Peut être surchargé: Vous pouvez définir plusieurs constructeurs pour la même classe, mais les listes de paramètres de ces constructeurs doivent être différentes (c'est-à-dire qu'elles constituent une surcharge).
Que vous définissiez ou non un constructeur personnalisé, toutes les classes ont des constructeurs, car Java fournit automatiquement un constructeur par défaut. Le modificateur d'accès du constructeur par défaut est le même que celui de la classe (si la classe est public, le constructeur est également public ; si la classe est changée en protected, le constructeur est également changé en protected).
Une fois que vous définissez votre propre constructeur, le constructeur par défaut devient invalide.
Exemple
Voici un exemple d'utilisation d'un constructeur :
Vous pouvez appeler le constructeur pour initialiser un objet comme ceci :
Code du fichier ConsDemo.java :
Le résultat d'exécution est le suivant :
10 20
Pour plus de contenu, reportez-vous au chapitre suivant :Constructeurs Java。
Arguments variables
À partir du JDK 1.5, Java prend en charge le passage d'arguments variables de même type à une méthode.
La déclaration des arguments variables d'une méthode est la suivante :
Dans la déclaration de la méthode, ajoutez des points de suspension (...) après le type de paramètre spécifié.
Une méthode ne peut spécifier qu'un seul argument variable, et il doit être le dernier paramètre de la méthode. Tout paramètre ordinaire doit être déclaré avant celui-ci.
Exemple
Code du fichier VarargsDemo.java :
L'exemple ci-dessus se compile et s'exécute avec le résultat suivant :
The max value is 56.5 The max value is 3.0
La méthode finalize()
La méthode finalize a été dépréciée dans Java 9 et sera supprimée dans les futures versions de Java. Il est recommandé d'utiliser try-with-resourcestry-with-resourcesoujava.lang.ref.Cleanerpour gérer les ressources.
Java permet de définir une telle méthode, qui est appelée avant qu'un objet ne soit détruit (collecté) par le ramasse-miettes. Cette méthode est appelée finalize(), et elle est utilisée pour nettoyer l'objet en cours de collecte.
Par exemple, vous pouvez utiliser finalize() pour vous assurer qu'un fichier ouvert par un objet est fermé.
Dans la méthode finalize(), vous devez spécifier les opérations à effectuer lorsque l'objet est détruit.
Le format général de finalize() est :
Le mot-clé protected est un qualificateur qui garantit que la méthode finalize() ne sera pas appelée par du code extérieur à la classe.
Bien sûr, la récupération de mémoire de Java peut être effectuée automatiquement par la JVM. Si vous souhaitez l'utiliser manuellement, vous pouvez utiliser la méthode ci-dessus.
Exemple
Code du fichier FinalizationDemo.java :
En exécutant le code ci-dessus, le résultat de sortie est le suivant :
$ javac FinalizationDemo.java $ java FinalizationDemo Cake Object 1is created Cake Object 2is created Cake Object 3is created Cake Object 3is disposed Cake Object 2is disposed
Alternative :Il est recommandé d'utiliser l'interface AutoCloseable, combinée à une instruction try-with-resources, pour fermer automatiquement les ressources. Par exemple :
try (Resource res = new Resource()) {
// 使用资源
} catch (Exception e) {
e.printStackTrace();
} Autres extensions