/** Attention : ce code source contient des caractères UTF-8 (le caractère
 * grec alpha). Pour compiler ce code, il est donc nécessaire de préciser
 * le codage employé via la ligne de commande (pour les utilisateurs d'eclipse
 * consulter le web) :
 * javac -encoding utf-8 Cours1.java
 * @author Jean-Baptiste Yunès
 * @date Février 2013
 */
public class Cours1 {
    // Une variable statique est une variable donc la
    // durée de vie est exactement celle de l'exécution du programme.
    // Elle existe au démarrage et disparaît à la fin de l'exécution.
    static public int uneVariable;
    // n est un paramètre (de type entier) dont la durée de vie est
    // celle de l'exécution de la fonction. Elle est créée à chaque fois qu'on
    // appelle la fonction et elle disparaît lorsque l'appel termine.
    public static int somme(int n) {
        // la variable somme est une variable locale, dont la durée de vie
        // est celle de l'exécution de la fonction. Elle est créée à chaque
        // appel et disparaît lorsqu'il termine.
        int somme = 0;
        // la variable i est de même nature que n et somme
        for (int i=0; i<n; i++) {
            somme += i;
        }
        return somme;
    }
    public static void main(String []args) {
        uneVariable = 100;
        // la variable i est une variable locale à la fonction main, sa durée
        // de vie est celle de l'appel à main.
        for (int i=0; i<10; i++) {
            System.out.println("coucou");
        }
        System.out.println("Resultat = " + somme(10));
        System.out.println("Resultat = " + somme(100));
        // La variable tableau (qui n'est pas un tableau!!!!) est une variable
        // locale à la fonction main dont la durée de vie est celle de l'appel
        // à la fonction main. Elle est créée à chaque appel à main et détruite
        // lorsque l'appel est terminé (i.e. lorsqu'on sort de cet appel à
        // main). Cette variable est très particulière, car son contenu est
        // nécessairement une adresse mémoire (mais ces valeurs particulières
        // ne peuvent être manipulées directement).
        int []tableau;
        // l'instruction new int[50] réserve/créé (entre autres) en mémoire
        // une zone contiguë permettant de stocker 50 int (donc de longueur
        // 50*|int|. Cette instruction a pour valeur (renvoie) l'adresse
        // en mémoire du premier octet du premier des 50 entiers réservés.
        // Si cette adresse est α, la variable tableau contiendra la valeur α.
        tableau = new int[50];
        // Lorsqu'on affiche tableau (attention on n'affiche pas le tableau
        // d'entiers) la machine Java affiche [I@α (où α est remplacé par
        // le codage hexadécimal de l'adresse). [ signifiant que la valeur α
        // désigne l'adresse d'un tableau et I que les valeurs du tableau
        // sont des ints (des entiers Java).
        System.out.println(tableau);
    }
}