Toutes les variables déclarées dans le corps d'une méthode (variables locales de la méthode) sont inaccessibles depuis l'extérieur de la méthode.
Une méthode n'a pas accès aux variables locales des autres méthodes.
Une classe peut déclarer des variables en-dehors de toute méthode : elles deviennent alors des variables globales de la classe, accessibles à toutes les méthodes de la classe.
Une méthode static ne peut toutefois accéder qu'aux variables globales déclarées static .
class ExempleDePortees{ static int effectif=12; static String groupe="ISN"; static void inscription(){ int ancienEffectif=effectif; effectif=effectif+1; System.out.println("L\'ancien effectif du groupe "+groupe+" était "+ancienEffectif); } public static void main(String[] args){ String message="L'effectif du groupe "+groupe+" est actuellement "+effectif; System.out.println(message); message="Procédons à une inscription"; System.out.println(message); inscription(); message="L'effectif du groupe "+groupe+" est maintenant "+effectif; System.out.println(message); } }Dans l'exemple ci-dessous les variables globales effectif et groupe sont accessibles depuis les deux méthodes main et inscription .
Même lorsqu'une variable (de type primitif) est passée en paramètre à une méthode, elle lui reste en fait inaccessible :
ce qui est transféré à la méthode n'est pas la variable par elle-même, mais une copie temporaire de même valeur,
stockée dans un emplacement mémoire différent, mais qui a le même nom, pour la méthode, que la variable initiale.
C'est ce qu'on appelle le passage par valeur des paramètres.
Ainsi même si la méthode modifie la valeur du paramètre qu'elle a reçu, la valeur de la variable initiale ne change pas.
class PasseParValeur{ static int triple(int valeur){ valeur=3*valeur; return valeur; } public static void main(String[] args){ int i=25; int r=triple(i); System.out.println(i); System.out.println(r); } }Dans cette exemple la méthode triple multiplie par 3 la valeur de son paramètre avant de retourner cette nouvelle valeur.
Le passage par valeurs ne concerne sous Java que les variables de type primitif et les String.
Les autres types, comme les tableaux, sont passés par adresse : c'est leur adresse mémoire qui est en fait passée à la méthode. Cela implique qu'aucune copie n'est réalisée et que la méthode peut modifier leur contenu.
Exemple :
public class PasseParAdresse { public static void vide(char[] tableau){ for (int i=0;i<tableau.length;i=i+1){ tableau[i]=' '; } } public static void main(String[] args) { char[] cobaye={'a','l','p','h','a','b','e','t'}; for (int i=0;i<cobaye.length;i=i+1){ System.out.print(cobaye[i]); } System.out.println("."); vide(cobaye); for (int i=0;i<cobaye.length;i=i+1){ System.out.print(cobaye[i]); } System.out.println("."); } }La méthode "vide" remplace chaque élément du tableau passé en paramètre par un espace. Quand on affiche le contenu du tableau cobaye avant et après exécution de la méthode qui l'a reçu en paramètre, on constate qu'il a bien été modifié.
class Masquage{ static String texte; static String allonge(String sujet){ String texte=" j\'ai ajouté quelque chose"; return(sujet+texte); } public static void main(String[] args){ texte="voilà le début "; String suite=allonge(texte); System.out.println(texte); System.out.println(suite); } }