java introduction
java introduction
– Une plateforme, environnement logiciel dans lequel les programmes java s'exécutent.
• Machine Virtuelle Java (JVM)
• Environnement d'exécution (Java Run Time Environment)
Compilation : Exécution :
javac HelloWorld.java java HelloWorld Hello World !
Hello World !
javac java Hello World !
Hello World !
HelloWorld.java HelloWorld.class Hello World !
java JavaScript
int number; let number;
number = 10; autres exemples : number = 10; autres exemples :
number = "hello"; C, C++, C#, FORTRAN… number = "hello"; Python, Ruby, PHP, Lisp…
number = false; number = false;
• nécessite en général déclaration explicite des types • ne nécessite pas de déclaration explicite des types
• vérification des types peut être faite avant l'exécution • vérification des types faite à l'exécution risque
(compilation) diminue risques d'erreurs d'exécution d'erreurs à l'exécution
• permet de produire du code plus optimisé (au moment de • tendance à une exécution plus lente car les informations
l'exécution car la vérification de type a déjà été effectuée) de type pour chaque variable doivent être récupérées au
moment de l'exécution.
Janvier 2023 © Ph. Genoud – Université Grenoble Alpes 5
Le langage Java
Un langage compilé / interprété
• Contrairement à d'autre langages compilé (C, FORTRAN, Pascal…) le code java compilé n'est pas
directement exécutable, il est exécuté au travers d'un autre programme : java
Compilation :
gcc HelloWorld.c code machine directement exécutable Hello World !
Hello World !
gcc ./a.out Hello World !
Hello World !
HelloWorld.c a.out Hello World !
https://www.youtube.com/watch?v=I1f45REi3k4
Compiler and Interpreter: Compiled Language vs
Interpreted Programming Languages
durée 6 min
compilation
public class Test { 011000010101010010101010
javac Test.java 110001010101010111100000 Test.class
public static void main(String[] args) { javac 111010101101101101111010
for (int i = 0; i < 10; i++) (compilateur 010011010101110111101... byte-code
System.out.println("Hello " + i); Java) ...
}
} javap –c Test
Désassemble Test.class
Test.java
code source 0 iconst_0
1 istore_1
2 goto 30
5 getstatic #10 <Field java.io.PrintStream out>
• Le byte-code (ou code intermédiaire) est : 8 new #5 <Class java.lang.StringBuffer>
11 dup
– proche d'un langage machine 12 ldc #1 <String "Hello ">
….
– indépendant de la plateforme d'exécution (matériel + OS) 27 iinc 1 1
30 iload_1
31 bipush 10
33 if_icmplt 5
36 return
MacOS X
https://www.fineconstant.com/posts/comparing-jvm-performance/
• Plateforme
– Environnement matériel et/ou logiciel dans lequel un programme s'exécute.
• La plupart des plateformes sont la combinaison d'un OS et du matériel sous-jacent (MS Windows + Intel, Linux + Intel,
Solaris + Sparc, Mac Os X + intel)
• La plateforme Java est entièrement logicielle et s'exécute au dessus des plateformes matérielles
MonProgramme.class
API (Application Programming Interface) Java :
Plateforme Bibliothèques Java standards sur lesquelles le
Java (JRE Java API Java
programmeur peut s'appuyer pour écrire son
Runtime
code.
Environment) JVM (Machine virtuelle)
Plateforme matérielle
(OS + hardware)
• API Java
– (très) vaste collection de composants logiciels (classes et interfaces)
– organisée en bibliothèques (packages)
– offre de nombreux services de manière standard
(indépendamment de la plateforme matérielle) User Interface Toolkits
Integration librairies
Plateforme
Java (JRE Java API Java Lang and util base
libraries
Runtime
Environment) JVM (Machine virtuelle)
Standard Edition Fourni les compilateurs, outils, runtimes, et APIs standards pour écrire, déployer, et
JSE exécuter des applications dans la langage de programmation Java
Environnement d’exécution basé sur un ensemble réduit d’API et optimisé pour les dispositifs «
Micro Edition légers » :
JME • Carte à puce (smart cards)
• Téléphones mobiles
• Objets connectés
3500 3279
3000 2757
Java 2 (J2SE) - 1998
Ajout de nombreuses fonctionnalités
2500
• Swings, Collections, JNDA …. classes
2000 packages
1520
1500
1000
504
500 217
212 135 166 203 209
8 23 59
0
java 1.0 java 1.1 java 1.2 java 1.4 java 1.5 java 1.6 java 1.7 java 8
3500 3279
3000 2757
Java 2 (J2SE) - 1998
Ajout de nombreuses fonctionnalités
2500
• Swings, Collections, JNDA …. classes
2000 packages
1520
1500
1000
504
500 217
212 135 166 203 209
8 23 59
0
java 1.0 java 1.1 java 1.2 java 1.4 java 1.5 java des
JCP regroupe 1.6 : java 1.7 java 8
• Entreprises (Oracle, Google, Apple ….)
Java 1.1 – 1997 • Acteurs du logiciel libre (Apache Software Foundation, Eclipse Foundaion …)
•Modification du langage : classes internes • Membres à à titre individuel (adhésion gratuite)
• Modification du modèle événementiel pour awt
Java Beans
• Amélioration des performances de la VM
315 packages
(78 modules)
Java Java Java Java Java Java Java Java Java Java Java Java
1.0 1.1 1.2 1.3 1.4 5 6 7 8 9 10 11
1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
2019 2020
2019 2021
12 13 14 15 16 17
java 17
JSE
API
JRE JSE
API
JDK
JRE JSE
API
JDK (Java Developper's Kit) outils de base pour le développement d'applications Java
Janvier 2023 © Ph. Genoud – Université Grenoble Alpes 21
Distributions du JDK
• Oracle JDK • Open JDK
https://www.oracle.com/technetwork/java/javase/overview/index.html https://openjdk.java.net/
Java Java Java Java Java Java Java Java Java Java Java Java
1.0 1.1 1.2 1.3 1.4 5 6 7 8 9 10 11
1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
J2EE 1.2 J2EE 1.3 J2EE 1.4 JEE 5 JEE 6 JEE 7 JEE 8
Fin 2017 Oracle cède JEE à la fondation Eclipse. Java étant une
marque déposée, Java EE a été renommé EE4J (Eclipse Enterprise for
Java) pour finalement devenir Jakarta EE
JEE Spécifications
• https://jakarta.ee/specifications/platform/
Différentes versions
Pour une version
APIs (Javadoc)
Implémentations (open source ou commerciales)
Conteneur WEB
Client riche
présentation (application Java)
Pages JSP
Pages JSP Servlets
Tier web
Serveur JEE
Serveur Conteneur EJB Tier métier
métier d'applications EJB EJB EJBEJB
EJB
JEE
Serveur
Tier Système
données de bases
d'Information de
l'Entreprise de données
• Logique de l'application :
– Composants web (Servlet, JSP,JFS)
– Composants métiers (EJB) : Client , Compte en Banques
• Services standards (cycle de vie des composants, multithreading, transactions, persistance…) pris en charge par les
conteneurs Web et EJB du serveur d'application JEE
Janvier 2023 © Ph. Genoud – Université Grenoble Alpes 28
Exemples de programmes Java
• Les Applications indépendantes
– Programmes autonomes (stand-alone) lancé depuis une JVM
• Les Applets
– Programmes exécutées dans l’environnement d’un navigateur Web et
chargés au travers de pages HTML
http://lig-membres.imag.fr/genoud/ENSJAVA/cours/TicTacToe/example1.html
• Servlets
– Programmes exécutés par un serveur d’application
(exemple Apache Tomcat conteneur Web JEE)
HTTP
DemoServlet
javac AppliVisage.java
• Lorsqu’un navigateur compatible Java (avec sa propre machine virtuelle java (JVM) : Java
Plugin) reçoit cette page HTML, il télécharge le code de la classe et l’exécute sur le poste client
– l’applet doit posséder un certain nombre de méthodes pour permettre cette exécution
• init(), start(), stop(), paint(), destroy()
<HTML>
<HEAD>
<TITLE>A Clock (1.1)</TITLE> http://java.sun.com/jdk1.6/demo/applets/Clock/example1.html
</HEAD>
<BODY> 1. Demande de chargement d ’une
<h1>A Clock (1.1)</h1>
<hr> page web contenant une applet
<applet code="Clock2.class"
width=170 height=150> HTML
<param bgcolor="C0C0C0">
2. Chargement de la page html HTML HTML
</applet>
....
HTML
</BODY>
example1.html
HTML
HTML
Client Serveur HTML
http http
Navigateur
3. Demande de chargement .class
intégrant une
.class
machine de l’applet référencée dans la page .class
virtuelle Java
.class
• Objectif : expérimenter les constructions de base du langage Java (types simples, instructions de
contrôle, itérations) qui sont très proches syntaxiquement de celles utilisées par le langage C
http://lig-membres.imag.fr/genoud/PL2AI/cours/