Problème pour compiler en ligne de commande [Résolu/Fermé]

Signaler
Messages postés
1175
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
20 novembre 2019
-
Messages postés
1175
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
20 novembre 2019
-
Bonjour, je viens de commencer les cours sur le langage java (cours de Cyril Herby sur le siteduzero via le lien : https://openclassrooms.com/fr/courses/26832-apprenez-a-programmer-en-java/20304-installez-les-outils-de-developpement jusqu'ici j'ai suivi toutes les procédures et tout marchait bien sauf quand il fallait créer le dossier .class en console. En effet, j'ai pu créer le fichier .class, mais le fichier test.java n'apparait pas, je ne sais pas pourquoi ? Est-ce que vous pouvez m'aidez merci

1 réponse

Messages postés
16142
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 avril 2020
2 571
Bonjour,

"j'ai pu créer le fichier .class, mais le fichier test.java n'apparait pas"
C'est l'inverse qu'il faut faire : tu créés un fichier .java avec du code dedans, puis tu le compiles et ça te créé un binaire .class
Messages postés
1175
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
20 novembre 2019
20
Super, merci beaucoup, ça fonctionne. Mais j'ai encore quelques question. Pourquoi ne pas avoir directement utilisé ?
javac Kbrice.java
java Kbrice
Messages postés
16142
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 avril 2020
2 571
Bonjour,

Tu aurais directement
javac Kbrice.java
et
java Kbrice
s'il n'y avait pas de package.
Mais dans ton code tu as mis
package projet;
il faut donc en tenir compte.
Messages postés
1175
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
20 novembre 2019
20
Pourquoi c est ainsi ? C quoi l influence du package ? Si je l enlevai ?
Messages postés
16142
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 avril 2020
2 571
Le package est une hiérarchie des codes sources. Tous les fichiers .java d'un même package doivent être dans le même dossier portant le nom du package. De même une fois compilés, tous les fichiers .class doivent être dans un dossier portant également le nom de ce package.

Au moment de l'appel, lors de l'exécution, c'est le nom complet de la classe que tu passes en paramètre de la commande java. Le nom complet étant le nom du package, des éventuels sous packages puis le nom de la classe. Donc la classe Kbrice n'existe pas, c'est la classe projet.Kbrice qui existe.

Si tu enlèves le package dans le code, il faut changer l'arborescence de tes codes sources de manière à ce que le fichier Kbrice.java soit dans le dossier src (ou peu importe le nom).

Quand tu n'as qu'une seule classe comme ça, ça ne change absolument rien d'avoir un package ou non, mais lorsque l'on a un code plus volumineux on sépare les codes sources par catégorie.
On a alors des propriétés particulières sur les packages.

Par exemple : au sein d'un même package toutes les classes doivent avoir un nom différent, mais il est tout à fait possible d'avoir deux classes qui portent le même nom dans deux packages différents. C'est pour cela qu'une classe n'est pas défini uniquement par son nom, mais également par la hiérarchie des ses packages.

Les deux classes java.util.Date et java.sql.Date sont dans des packages différents (java/util et java/sql) et pourtant elles portent le même nom : Date. Mais si on enlevait leur package on aurait deux classes Date et on ne saurait pas laquelle fait quoi.

C'est pour cela que l'on découpe les codes en packages, parce que ce serait trop compliqué de faire des noms de classes toujours différents, en particulier pour les bibliothèques extérieures, proposées sur internet. Généralement un nom de package est composé du nom de son auteur, cela permet de s'assurer qu'il ne va pas rentrer en conflit avec une autre bibliothèque d'un auteur différent.

Exemple : org.apache pour tous les projets de la fondation Apache, com.sun pour ceux de Sun, etc. Les packages java sont réservés aux classes de l'API standard de Java, et javax sont des bibliothèques qui étaient historiquement développés par d'autres et ont été intégrés dans l'API standard. Personne ne devrait utiliser java ou javax comme nom de package.
Messages postés
1175
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
20 novembre 2019
20
ok cool