Mes premiers pas en java¶
les outils de base¶
Avec le sdk de nombreux outils sont installés ... mais il en existe des plus importants que d’autres:
- java: permet de lancer un programme java compilé
- javac: permet de compiler un programme java
- jar: permet de créer et de lancer une archive java
Note
Eclipse n’est pas indispensable pour faire du java ... vim reste imbattable à mon goût
Il est intérressant d’avoir dans son environnemnt la vatiable JAVA_HOME
Hello World¶
Allez on se lance avec un fichier hello.java
public class test {
public static void main(String[] args) {
System.out.println("hello world");
}
}
d’accord j’ai un programme java mais maintenant je fais quoi?
- je compile
javac hello.java
- j’execute
java hello
> hello world
Il ne me reste plus qu’a envoyer mon fichier hello.class a mes utilisateurs.
Note
avec java et javac on peut utiliser des librairies externes en utilisant la notion de classpath (-cp ou directement via la variable système classpath)
Hello World avec des classes¶
Et si on réalisait le même exercice avec des classes (ne juger pas l’intérêt de cette exercice).
Nous réalisons deux classes:
- Test
- MyHello
Test.java
public class Test {
public static void main(String[] args) {
MyHello m;
m = new MyHello();
System.out.println(m.getText("fred"));
}
}
MyHello.java
public class MyHello {
private String x = "hello ";
public String getText(String name) {
String s = x + name;
return s;
}
}
- je compile
javac MyHello.java Test.java
- j’execute
java test
> hello fred
Super Il ne me reste plus qu’a envoyer mon fichier MyHello.class , Test.class a mes utilisateurs ... vous commencez à comprendre le problème.
Il existe une solution pour déployer un programme java: utiliser un fichier jar. Un fichier jar n’est qu’un fichier compréssé contenant:
- nos fichiers class
- les librairies exterieures nécessaire
- un fichier MANIFEST.MF: contenant notamement le nom de la class à lancer
Dans notre cas nous allons créer un fichier infos.txt contenant des lignes à ajouter dans le MANIFEST.MF
Main-Class: Test
Nous allons maintenant compiler nos class et créer notre jar
javac *.java
jar cfm test.jar infos.txt *.class
Testons notre jar
java -jar test.jar
> hello fred
Introduction au package¶
Nous avons maintenant 2 classes qui sont au même niveau et dans aucun package. Un package permet:
- de classer nos classes (utile pour les regrouper avec un sens)
- de gérer ce qui peut être utilisé dans un autre package
Imaginons que nous souhaitons obtenir un package level décrit ainsi:
infos.txt
level
|__ Test.java
[__ sublevel
|__ MyHello.java
Il faut modifier
infos.txt
Main-Class: level.Test
Test.java
package level;
import level.sublevel.*;
public class Test {
public static void main(String[] args) {
MyHello m;
m = new MyHello();
System.out.println(m.getText("fred"));
}
}
MyHello.java
package level.sublevel;
public class MyHello {
private String x = "hello ";
public String getText(String name) {
String s = x + name;
return s;
}
}
on va maintenant pouvoir compiler notre package et générer notre fichier jar
javac **/*.java
jar cfm test.jar infos.txt level
Testons notre jar
java -jar test.jar
> hello fred
Note
il est possible de supprimer l’ensemble des fichiers class d’un package en utilisant la ligne de code suivante (sous linux)
find ./ -name *.class -exec rm {} \;