/* * Un exemple de définition d'un type représentant les complexes. * Un complexe est un couple de réél (ici ils sont approximés par le * type double), avec une algèbre associée (on l'oublie ici). */ class Complexe { public double reelle; public double imaginaire; } /* * Un exemple de type dont les éléments "encapsulent" un entier (int) * Du point de vue Java, valeur est un attribut d'un élément du type. * On dit qu'un élément du type est une instance de la classe. * En Math on dit ensemble/élement * En POO/Java on dit classe/instance */ class Exemple { public int valeur; } public class Ex2 { /* Déclaration d'une variable statique, c'est-à-dire qui existe pour * toute la durée du programme. Elle apparaît avant l'appel au main (au * tout début de l'exécution), et elle * disparaît à la sortie du main (qu'à la toute fin de l'exécution). * On ne peut créer durant l'exécution de telles variables. * Leur nombre est déterminé à l'examen statique du code, lors de la * compilation. Elles sont stockées dans un espace particulier, l'espace des * variables statiques. * Suggestion wikipédia : entrées « Segment de données » et « Segment BSS ». * En pratique c'est un peu différent en Java, mais l'idée est là. */ public static int N = 1234; /* Déclaration d'une fonction prenant en argument une valeur de type int. * À l'entrée de la fonction, on créé la variable i et on l'initialise * à la valeur passée au moment de l'appel. C'est l'appel par valeur ou * transmission par copie. On a donc ici une nouvelle variable i dont * la durée de vie est celle de l'appel. Lorsque l'appel termine la * variable disparaît. */ public static void f(int i) { System.out.println(N); System.out.println(i); i = 10; System.out.println(i); } /* Déclaration d'une fonction prenant en argument une valeur du type int[]. * À l'entrée d'une telle fonction, on crée toutes les variables nécessaires * à sa bonne exécution. Donc, les paramètres (ici t) et les variables * locales (ici localI). Les variables paramètres sont initialisées avec les * valeurs transmises au moment de l'appel. C'est l'appel par valeur, * ou transmission par copie. * Même si ici t est une référence, il ne faut pas se laisser berner, * t est bien une nouvelle variable, le fait qu'elle désigne un objet * par ailleurs est une autre question. * Lorsque l'appel termine, on srot de la fonction en prenant soin de * supprimer les variables créées en entrée. * Si on réfléchit à la création/disparition des variables locales * on s'aperçoit qu'une structure apparaît, les variables sont créées * au fur et à mesure que l'on effectue des appels, et disparaissent * lorsque l'appel se termine. Comme ces appels sont imbriquées les uns * dans les autres, la structure est celle d'une pile. On créé des * variables toujours à un bout et on supprime celles qui sont au bout. * Pensez à une pile d'assiettes... * Entrée wikipédia : pile (informatique). */ public static void f(int []t) { System.out.println(N); int localI; System.out.println(t); System.out.println(t[2]); t[2] = 666; System.out.println(t[2]); } /* main est une fonction qui n'a d'autre particularité que d'être la * première fonction appelée au démarrage de l'exécution. Elle fonctionne * comme toute autre fonction : elle reçoit des valeurs qui servent à * initialiser ses arguments qui sont des variables locales comme les * autres. */ public static void main(String []args) { System.out.println(N); int a=3; int b=3; if (a==b) { System.out.println("egales"); } else { System.out.println("non egales"); } Exemple va=null; /* Attention, les variables créées par new sont particulières. * Leur durée de vie s'étend de leur création par new jusqu'à la * disparition de la dernière référence la désignant. Ces variables * sont des objets, et les objets ne sont, en Java, manipulables que * par l'intermédiaire de référénces. * La disparition d'une référence est elle liée à la terminaison de la * fonction ou elle est déclarée. La disparition d'une référence fait * que l'objet vers lequel elle pointe possède alors une référence de * moins. Lorsqu'un objet n'a plus de référence le désignant, il est * alors recyclable (il est placé dans la poubelle jaune). * Les objets ont une durée de vie de nature encore différente, ils * sont dans un espace particulier qui est le tas (heap). * Pointeur wikipédia : tas (allocation dynamique) */ va = new Exemple(); va.valeur = 3; /* Ici aussi il y a création d'un objet */ Exemple vb = new Exemple(); vb.valeur = 3; if (va==vb) { System.out.println("egales"); } else { System.out.println("non egales"); } vb = va; if (va==vb) { System.out.println("egales"); } else { System.out.println("non egales"); } System.out.println(a); f(a); System.out.println(a); int []t = new int[10]; System.out.println(t[2]); System.out.println(t); t[2] = 999; System.out.println(t[2]); f(t); System.out.println(t[2]); int []t2 = new int[5]; f(t2); } }