Download - Christelle CAILLOUET ([email protected])
ChristelleCAILLOUET([email protected])
C.Caillouet M213-POO 2
Lesvariablesd’environnementu2les� PATH:contientunelistederépertoiresdanslesquelsvontêtrerecherchéslesfichiersexécutables
èAinsi,afindepouvoirutiliserjavac,java,…,ilpeutêtrenécessairedemodifierlePATHafind'yajouterlerépertoirebinduJRE/JDK
� CLASSPATH:permetdespécifieràlaJVMlesemplacementsdesfichierscompilésIndispensablepourlespackagesprédéfinis
èLorsquelaJVMabesoind’uneressourceoud’uneclasse,ellelarecherchedanslesdiversélémentsduCLASSPATHdansl'ordredeleurdéclaration
C.Caillouet M213-POO 3
C.Caillouet M213-POO 4
Naturedesvariablesenjava1. Typeprimitif
� Ladéclarationréservelaplacemémoirepourstockersavaleur(quidépenddesontype)
2. Typeobjet
� Ladéclarationnefaitqueréserverlaplaced’uneréférence(sorted’adressemémoire)quipermettrad’accéderàl’endroitenmémoireoùesteffectivementstockél’objet(vautnullsiréférenceinconnue)ètoutevariabledésignantunobjetestdoncunpointeur!
C.Caillouet M213-POO 5
Typesprimi2fsType Taille
(octets)Valeur Défaut
boolean 1 trueoufalse false
byte 1 Entiersigné 0
short 2 Entiersigné 0
int 4 Entiersigné 0
long 8 Entiersigné 0
float 4 Réelsigné 0.0
double 8 Réelsigné 0.0
char 2 CaractèreUnicode \u0000
C.Caillouet M213-POO 6
A:en2onauxnombresàvirguleflo:ante� Ilsnesontquedesapproximationsdesvaleurs!
� Leurégalitéausensdel’opérateur==n’aaucunsens
� Qu’est-cequecelasignifieenpratique?
C.Caillouet M213-POO 7
A:en2onauxnombresàvirguleflo:ante
èSiondécommente,affichenb = 10, d = 0.99999999999999
� Ilfauttesterleurproximitémodulounepsilondonné
C.Caillouet M213-POO 8
//boucleinfinie!!
Equivalencetypeprimi2f/classe� Chacundestypesprimitifspeutêtreenveloppédansunobjetprovenantd'uneclasseprévueàceteffetetappeléeWrapper(motanglaissignifiantenveloppeur).Lesenveloppeurssontdoncdesobjetsreprésentantuntypeprimitif.
� Avantages:� LesWrapperpeuventêtreutiliséscommen'importequelobjet,ils
ontdoncleurspropresméthodes.� Inconvénients:
� Plusd'espacemémoirequeletypeprimitifParexemple:int=4octetsenmémoiremaisInteger=32octetssuruneVMen64bits(20octetsen32bits).
� L'objetenveloppantestimmuable(nepeutpasêtremodifié)Toutemodificationdesavaleurnécessitedecréerunnouvelobjetetdedétruirel'ancien,cequiaugmenteletempsdecalcul.
C.Caillouet M213-POO 9
Typeprimi2f/classeType Classe
équivalente(Wrapper)
Min Max
boolean Boolean
byte Byte -128 (Byte.MIN_VALUE)
127 (Byte.MAX_VALUE)
short Short -32 768 (Short.MIN_VALUE)
32 767 (Short.MAX_VALUE)
int Integer -2 147 483 648 (Integer.MIN_VALUE)
2 417 483 647 (Integer.MAX_VALUE)
long Long -9 223 372 036 854 775 808 (Long.MIN_VALUE)
9 223 372 036 854 775 807 (Long.MAX_VALUE)
float Float 1.40239846E-45 (Float.MIN_VALUE)
3.40282347E38 (Float.MAX_VALUE)
double Double 4.9406564584124654E-324 (Double.MIN_VALUE)
1.797693134862316E308 (Double.MAX_VALUE)
char Character \u0000 \uFFFF
C.Caillouet M213-POO 10
Exemples� Créationd’unobjetàpartird’unprimitif
int a = 4; Integer i = new Integer(a);
� Créationd’unprimitifàpartird’unobjetint j = i.intValue();
� Créationd’unprimitifàpartird’unechaîne
C.Caillouet M213-POO 11
Conversiondetypededonnées(Transtypage)� Conversionimplicite:
� Modificationdutypededonnéeeffectuéeautomatiquementparlecompilateur(parexempleentrelestypesprimitifsetleurWrapper)int n = 5; Integer m = n;
� Conversionexplicite(cast):� Modificationdutypededonnéeforcée
double x = 8.234; int n = (int) x; // donne n = 8
C.Caillouet M213-POO 12
Passagedeparamètre
1. Typeprimitif� Passageparvaleur:
� Lavaleurdel’argumentestrecopiéedansleparamètredelaméthode
� Lesmodificationssurleparamètre(i.e.danslaméthode)sontsanseffetsurl’argument(aprèsl’appel)
C.Caillouet M213-POO 13
Passagedeparamètre1. Typeprimitif
C.Caillouet M213-POO 14
5i
5entier
6
è5
Passagedeparamètre2. Typeobjet
� Passageparréférence:� Laréférenceestrecopiéedansleparamètredelaméthode� Lesmodificationseffectuéesensuivantcetteréférence(des
champsdel’objet)sontrépercutéesdanslamémoireetdoncsurl’argument
� Enrevanche,lamodificationdelaréférenceelle-mêmeestsanseffetsurl’argumentècopielocaled’unobjetayantlamêmeréférence
C.Caillouet M213-POO 15
Passagedeparamètre2. Typeobjet
C.Caillouet M213-POO 16
#1box
@classBoxfield = 5
#1
#1b
field = 6
è6
Passagedeparamètre2. Typeobjet
C.Caillouet M213-POO 17
#1box
@classBoxfield = 5
#1
#1b
è5
#2tmp @classBox#2field = 6
#2
Alloca2onmémoire� Unobjetnonallouéapourvaleurnull(aucuneréférence)
� Pourqu’unevariableobjetprenneuneautrevaleurquenull,ilfautluiaffecteruneréférence(àl’aidedel’opérateurd’allocationnew)� Laplacedelaréférenceestalorsréservéeenmémoire� Lazoneallouéedépenddelatailledel’objet
new Box(); // besoin de stocker 1 int (field) new int[10]; // stocker 10 int + la taille du tableau new Point(1,3); // zone mémoire initialisée à l’aide d’un constructeur
C.Caillouet M213-POO 18
Désalloca(onmémoire� NongéréeparleprogrammeurmaisparleGarbageCollector
� Lesobjetsquinesontplusréférencés(paraucunevariable!)sontrécupérésparlegarbagecollectorpourrecyclerl’espacemémoire
� Lesvariablescessentderéférencerunobjet:� Quandonleuraffecteunautreobjet,ounull� Quandonquitteleblocoùellessontdéfinies
C.Caillouet M213-POO 19
C.Caillouet M213-POO 20
LestableauxenJava� EnJava,lestableauxsontdesobjets� Déclarationàl’aidedescrochets[]
int[] tab1 = {1,2,3,4,5,6,7,8,9}; int tab2[] = new int[10];
� Tableauxàplusieursdimensions(tableauxdetableaux):� Tableauxà2dimensions=matrice[][]� Tableauxà3dimensions[][][]� …
� Accèsàlatailleparl’attributpubliquelengthint n = tab2.length;
C.Caillouet M213-POO 21
Exemples
� Tableauxd’objets
C.Caillouet M213-POO 22
Packagejava.langhttp://docs.oracle.com/javase/8/docs/api/java/lang/package-summary.html� Ensembledeclassesprédéfiniesquiproposentdesservices� Principalesclasses(importationimplicite)
� LaclasseMath� laclasseString� LaclasseSystem� LaclasseObject� Lesclassesenveloppes(Wrappers)� LaclasseClass� LaclasseRunTime� …
C.Caillouet M213-POO 23
LaclasseStringhttp://docs.oracle.com/javase/8/docs/api/java/lang/String.html
� Représenteleschaînesdecaractères� EnJava,leschaînesdecaractèressontdesobjets/!\cenesontpasdestableaux!
� Créationd’unechaîneString s = new String("bonjour"); String t = "bonjour";
� Tailled’unechaîneint taille = s.length();
� Accèsàuncaractèrechar c = s.charAt(3);
C.Caillouet M213-POO 24
è j
Leschaînesdecaractères� Concaténationdechaînes
String s = t + " toi"; t += " toi";
� Transtypageimpliciteint i = 12; String s = "" + i;
� Comparaisondedeuxchaînes� Opérateur==comparelesréférencesdesobjets� Méthodeequals comparelescontenusdesréférences
if (s.equals("bonjour"))… � Recherched’unesous-chaîne
int position = s.indexOf("toi");
� Extractiond’unesous-chaîneString t = s.substring(position, position+3);
C.Caillouet M213-POO 25
LaclasseMathhttp://docs.oracle.com/javase/8/docs/api/java/lang/Math.html
C.Caillouet M213-POO 26
LaclasseSystemhttp://docs.oracle.com/javase/8/docs/api/java/lang/System.html
� Centralisel’accès:� Auxtroisfluxdebasein,out,err� Àl’horlogedusystèmed’exploitation� AuxfonctionsutilitairesdelaJVM
� Principalesméthodesdeclasse:� MéthodescurrentTimeMillis� Méthodeexit(System.exit(0);) � MéthodesgetProperty,setProperty� …
� Attributsdeclasseassociésauxfluxstandards System.out Classe PrintStream System.in Classe PrintStream System.err Classe PrintStream
C.Caillouet M213-POO 27
Hiérarchiedeclasses� Unpackagecontientunensembledeclasses� Touteslesclassesd’unpackagesontorganiséesenhiérarchie
� Danslepackagejava.lang,touteslesclassessontdérivéesdelaclasseObject,basedelahiérarchie
http://docs.oracle.com/javase/8/docs/api/java/lang/package-summary.html
C.Caillouet M213-POO 28
LaclasseObject� Cetteclassecontient(sousformedeméthodes),lesservitudesdebasepourlagestiondesobjets
� TransmetimplicitementtoutessesméthodesàtouteclasseJava� Relationd’héritage(cf.courssuivants)� InduitlanécessitéderedéfinircesméthodesdanstouteclasseJava
� Transtypageimplicitepossibledetouteréférencesurunobjetd’uneclassequelconque,dansunevariabledetypeObject(analogieavecletypevoid*dulangageC)
C.Caillouet M213-POO 29
LaclasseObject� Metàdispositionunconstructeurpardéfaut� Principalesméthodes(d’instance)
� toString:retourneundescriptifdel’objetcible� equals:prédicatd’égalitéde2objets� clone:créeetretourneunecopiedel’objetcible� getClass:retournelaclassedel’objetcible� …
� Danstouteclasse,onpeutredéfinirlesméthodesdelaclasseObject(cf.coursPolymorphismeplustard)
http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
C.Caillouet M213-POO 30
Découvrird’autrespackagesetclassesexistantes
� APISpecification
� Lespackageshttp://docs.oracle.com/javase/8/docs/api/overview-summary.html
� Lesclasseshttp://docs.oracle.com/javase/8/docs/api/allclasses-noframe.html
C.Caillouet M213-POO 31