Plus loin avec JAVA
Collections
Une collection est un ensemble d'éléments de taille variable. On peut créer une collection à partir d'une liste d'éléments.
List<Integer> a = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Une collection peut être modifiée.
a.add(11);
Pour intancier une collection, on peut utiliser la méthode new
:
List<Integer> a = new ArrayList<>();
Le type de la collection est déterminé par le type des éléments de la collection.
List<Integer> a = new ArrayList<>();
a.add(1);
a.add(2);
a.add(3);
On peut également définir le type de la collection à partir d'un type générique.
List<Integer> a = new ArrayList<Integer>();
Un itérateur permet de parcourir une collection.
Itérateur<Integer> it = a.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
Énumérations
l'énumération permet de définir un ensemble d'éléments.
enum Color {
RED, GREEN, BLUE
}
Pour utiliser une énumération, on peut utiliser la méthode valueOf
:
Color color = Color.valueOf("RED");
On peut déclarer un constructeur pour une énumération.
enum Color {
RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255);
private final int red;
private final int green;
private final int blue;
Color(int red, int green, int blue) {
this.red = red;
this.green = green;
this.blue = blue;
}
}
Logs et debugging
Pour afficher un message dans la console, on peut utiliser la méthode System.out.println
:
System.out.println("Hello, World!");
On peut debuger un programme en pas à pas à l'aide d'un debugger tel que GDB. Pour utiliser GDB, il faut d'abord installer GDB sur votre ordinateur. Puis, vous pouvez lancer GDB en utilisant la commande gdb
suivie du nom du fichier exécutable.
gdb helloworld
Une fois que GDB est lancé, vous pouvez exécuter votre programme en utilisant la commande run
.
run
Vous pouvez ensuite utiliser les commandes break
, continue
, next
, step
, print
pour déboguer votre programme.
break main
continue
next
step
print a
Packaging et visibilité
La visibilité d'un membre détermine si un membre peut être accédé par un autre objet.
public class A {
private int a;
private int getA() {
return a;
}
}
public static void main(String[] args) {
A a = new A();
a.getA(); // erreur
}
La visibilité d'un membre est définie par les mots-clés public
, protected
et private
.
public
: membre accessible depuis n'importe quel objetprotected
: membre accessible uniquement depuis l'objet qui hérite de la classeprivate
: membre accessible uniquement depuis l'objet qui l'a défini
Exception
Les exceptions permettent de gérer les erreurs dans un programme.
try {
// code qui peut générer une erreur
} catch (Exception e) {
// code qui gère l'erreur
}
Les exceptions sont définies par les classes Exception
et Throwable
.
Exception
: une exception qui peut être générée par un programmeThrowable
: une exception qui peut être générée par un programme ou une autre exception
Levée de l'exception
Les exceptions peuvent être définies par l'utilisateur.
public class A {
public void getA() throws Exception {
throw new Exception();
}
}
public static void main(String[] args) {
A a = new A();
a.getA(); // erreur
}
Propagation de l'exception
Les exceptions peuvent être propagées à l'extérieur du programme.
public class A {
public void getA() throws Exception {
throw new Exception();
}
}
public static void main(String[] args) {
A a = new A();
try {
a.getA();
} catch (Exception e) {
System.out.println("Erreur");
}
}
Création d'une exception personnalisée
On peut créer une exception personnalisée en définissant une classe qui hérite de Exception
.
public class A extends Exception {
public A() {
super();
}
}
On peut ensuite utiliser cette exception dans le code.
public class A {
public void getA() throws A {
throw new A();
}
}
Test et dépendances
Les dépendances en Java sont des bibliothèques ou des modules externes que votre projet utilise pour ajouter des fonctionnalités supplémentaires. La gestion des dépendances est essentielle pour le développement de logiciels modernes, car elle permet de réutiliser du code existant et de simplifier le processus de développement.
Gestion des Dépendances avec Gradle
Gradle est un outil de construction flexible qui peut gérer les dépendances de votre projet Java. Il utilise des fichiers de configuration (build.gradle
) pour définir les dépendances et les configurations du projet.
Créer un Nouveau Projet Gradle dans IntelliJ:
- Ouvrez IntelliJ IDEA.
- Sélectionnez
File
>New
>Project
. - Choisissez
Gradle
et cliquez surNext
. - Configurez le projet en ajoutant le
GroupId
,ArtifactId
, etVersion
. - Cliquez sur
Finish
.
Configurer le fichier
build.gradle
:Le fichier
build.gradle
est utilisé pour gérer les dépendances. Voici un exemple debuild.gradle
avec une dépendance à la bibliothèqueJUnit
pour les tests unitaires.plugins { id 'java' } group 'com.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation 'junit:junit:4.13.2' } test { useJUnitPlatform() }
Ajouter du Code au Projet:
Créez une classe Java et un test unitaire pour démontrer l'utilisation de la dépendance
JUnit
.// src/main/java/com/example/MonApplication.java package com.example; public class MonApplication { public int additionner(int a, int b) { return a + b; } public static void main(String[] args) { MonApplication app = new MonApplication(); System.out.println("Résultat: " + app.additionner(2, 3)); } }
// src/test/java/com/example/MonApplicationTest.java package com.example; import org.junit.Test; import static org.junit.Assert.assertEquals; public class MonApplicationTest { @Test public void testAdditionner() { MonApplication app = new MonApplication(); assertEquals(5, app.additionner(2, 3)); } }
Exécuter le Projet et les Tests:
- Pour exécuter l'application principale, faites un clic droit sur
MonApplication.java
et sélectionnezRun 'MonApplication.main()'
. - Pour exécuter les tests, faites un clic droit sur
MonApplicationTest.java
et sélectionnezRun 'MonApplicationTest'
.
- Pour exécuter l'application principale, faites un clic droit sur
En suivant ces étapes, vous avez configuré un projet IntelliJ standard avec Gradle pour gérer les dépendances, et vous avez ajouté une dépendance à JUnit
pour les tests unitaires.
Concurrence
L'asynchrone est la notion de définir des tâches qui ne sont pas bloquantes. Le multi-threading est la notion de définir des tâches qui peuvent être exécutées en parallèle.
Le Thread est un object java qui permet de définir des tâches qui ne sont pas bloquantes.
Un runnable est un objet qui contient une tâche.
public class A implements Runnable {
public void run() {
System.out.println("A");
}
}
Soit un thread A et un thread B. Si A exécute une tâche et B exécute une autre tâche, alors les deux tâches ne sont pas exécutées en parallèle.
//Creation d'une classe qui étend thread et implémente Runnable
public class A extends Thread implements Runnable {
public A() {
super("A");
}
public void run() {
System.out.println("A");
}
}
//Creation d'une classe qui étend thread et implémente Runnable
public class B extends Thread implements Runnable {
public B() {
super("B");
}
public void run() {
System.out.println("B");
}
}
//Creation d'un thread A et d'un thread B
public static void main(String[] args) {
A a = new A();
B b = new B();
a.start();
b.start();
}
Appel HTTP Rest
Pour appeler une API HTTP, on peut utiliser la bibliothèque HttpURLConnection
de manière asynchrone a l'aide d'un thread.
//Creation d'une classe qui étend thread et implémente Runnable pour réaliser une requête get HTTP
public class A extends Thread implements Runnable {
public A() {
super("A");
}
public void run() {
try {
URL url = new URL("https://jsonplaceholder.typicode.com/todos/1");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
InputStream inputStream = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
System.out.println(stringBuilder.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
//Creation d'un thread A
public static void main(String[] args) {
A a = new A();
a.start();
}
GUI avec JavaFX
GUI
signifie Graphical User Interface
. JavaFX est une bibliothèque Java qui permet de créer des interfaces graphiques.
import javafx.application.Application;
import javafx.stage.Stage;
public class HelloWorld extends Application {
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Pour ajouter des éléments à l'interface graphique, on peut utiliser la classe Scene
:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloWorld extends Application {
public void start(Stage primaryStage) {
Button button = new Button("Click me!");
button.setOnAction(e -> System.out.println("Button clicked!"));
StackPane root = new StackPane();
root.getChildren().add(button);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}