java - Free

Transcription

java - Free
Présentation de Java
Olivier de Pertat
IT GROUP
Qu'est-ce que Java ?
Un langage de programmation orienté objets
Une architecture de Virtual Machine
Un ensemble d'API variées
Un ensemble d'outils :
le Java Runtime Enviromnent
le Java SDK Standard Edition
le Java SDK Entreprise Edition
Historique
1991 : Sun "Green Projet" (informatisation de l’électronique grand public)
1993 : projet Oak (langage embarqué indépendant CPU)
1994 : recentrage sur Internet, réalisation d’un browser en Oak
1995 :
Mai 95 : Java (23 mai). WebRunner -> HotJava
Mai 95 : Netscape prend la licence
Sept. 95 : JDK 1.0 b1 (200 Classes)
Déc. 95 : Microsoft se dit intéressé
Début des API spécialisées (multimédia, commerce) et JavaComputing
(JavaOS… )
Historique
1996 : Java 1.0 - 200 Classes
Janv. 96 : JDK 1.0.1
Eté 96 : Java Study Group ISO/IEC JTC 1/SC22
Fin 96 : RMI, JDBC, JavaBeans, ...
1997 : JDK 1.1 – nouveaux services quelques modifications du langage.
1998 : Plateforme Java 2 - JDK 1.2 - 1250 classes – consolidation vers
maturité
2000 : Plateforme Java 2 – version 1.3 : amélioration des performances,
incorporation d’extensions dans le noyau
2002 : Plateforme Java 2 – version 1.4.1
Principe de compilation C
Principe de compilation Java
Principe : Code Source
$ cat Hello.java
public class Hello
{
public static void main(String [] args)
{
System.out.println("Hello World !");
}
}
Principe : Byte Code
$ od -x Hello.class
0000000
0000020
0000040
0000060
0000100
0000120
0000140
0000160
0000200
0000220
0000240
feca
1000
1600
0156
6d75
016e
532f
6372
616a
0119
0007
beba
1100
0001
0400
6562
1600
7274
4665
6176
0c00
0c1a
0000
0008
3c06
6f43
5472
5b28
6e69
6c69
000c
6548
1b00
2e00
0a12
6e69
6564
6261
6a4c
3b67
0165
0007
6c6c
1c00
1d00
1300
7469
0001
656c
7661
5629
0a00
0708
5720
0001
000a
1400
013e
4c0f
0001
2f61
0001
6548
1700
726f
4805
0006 090f
0007 0715
0300 2928
6e69 4e65
6d04 6961
616c 676e
530a 756f
6c6c 2e6f
000c 0018
646c 2120
[………EOF…]
Les points faibles de Java
Les JVM sont beaucoup plus lentes que du code C compilé ;
Java est très gourmand en mémoire ;
Certaines constructions du langage sont décevantes ;
Certaines API sont décevantes ;
Java est extrêmement vaste ;
Java est tributaire de son évolution rapide.
Les caractéristiques du langage Java
Orienté objets
Interprété
Portable
Simple
Robuste
Sécurisé
Multi-threads
Distribué
Un langage orienté objets
Tout est classe (pas de fonctions) sauf les types primitifs (int, float,
double, ...) et les tableaux
Toutes les classes dérivent de java.lang.Object
Il respecte : l’encapsulation, communication par message,
polymorphisme et hérite
Les objets se manipulent via des références
Une API objet standard est fournie
La syntaxe est proche de celle de C
Java est portable
Le compilateur Java génère du byte code.
La Java Virtual Machine (JVM) est présente sur Unix, Win32, Mac,
OS/2, Netscape, IE, ...
Le langage a une sémantique très précise.
La taille des types primitifs est indépendante de la plate-forme.
Java supporte un code source écrit en Unicode.
Java est accompagné d'une librairie standard.
Java est robuste
A l’origine, c'est un langage pour les applications embarquées.
Gestion de la mémoire par un garbage collector.
Pas d’accès direct à la mémoire.
Mécanisme d'exception.
Accès à une référence null ® exception.
compilateur contraignant (erreur si exception non gérée, si utilisation d’une
variable non affectée, ...).
Tableaux = objets (taille connue, débordement ® exception).
Seules les conversions sûres sont automatiques.
Contrôle des cast à l'execution.
Java est sécurisé
Indispensable avec le code mobile.
Pris en charge dans l'interpréteur.
Trois couches de sécurité :
Verifier : vérifie le byte code.
Class Loader : responsable du chargement des classes.
Security Manager : accès aux ressources.
Code certifié par une clé.
Java est multi-thread
Intégrés au langage et aux API :
synchronized
garbage collector dans un thread de basse priorité
java.lang.Thread, java.lang.Runnable
Accès concurrents à objet gérés par un monitor.
Implémentation propre à chaque JVM.
Difficultés pour la mise au point et le portage.
Java est distribué
API réseau (java.net.Socket, java.net.URL, ...).
Chargement / génération de code dynamique.
Applet.
Servlet.
Protocole / Content handler.
Remote Method Invocation.
JavaIDL (CORBA).
Les performances
Actuellement le byte code est interprété.
Plusieurs types de génération de code machine :
Compilation en code machine à la volée (JIT, HotSpot) ;
Machine Virtuelle spécifiques aux Application Servers commerciaux ;
Conversion statique en C (j2c, Tabo, ...) ;
Conversion statique en code natif.
Les différences avec C++
Pas de structures ni d’unions
Pas de types énumérés
Pas de typedef
Pas de préprocesseur
Pas de variables ni de fonctions en
dehors des classes
Pas de fonctions à nombre variable
d’arguments
Pas d'héritage multiple de classes
Pas de types paramétriques
(template)
Pas de surcharge d’opérateurs
Pas de passage par copie pour les
objets
Pas de pointeurs, seulement des
références
Les fausses rumeurs sur Java
Java n'a rien de commun avec HTML
Java n'est pas un langage de script (type Perl ou TCL)
Le JavaScript n’est pas du Java ! Java est un langage généraliste
type C++
Java != C++ (c'est un langage purement objet, de plus haut niveau,
plus proche de SmallTalk)
Les outils
Environnements de développement :
Java 2 standard edition SDK 1.4.x
Editeur de texte : VIM, java-mode emacs, Ultra Edit, JEdit
Environnements de compilation : ANT, make
Outils de test : JUnit
IDE : Forte, JBuilder, Visual Age, WebGain, CodeWarrior
Atelier UML : Together, Rational Rose
Décompileur de byte-code : jad
Browsers :
Sun HotJava
Netscape Navigator 4 et 6
Internet Explorer 4 et 5 (plus pour la prochaine version)
Java-Plug-in (tous les browsers)
Java 2 Standard Edition SDK 1.4
javac : compilateur de sources java
java : interpréteur de byte code (JVM)
appletviewer : interpréteur d'applet
jar : fabrique les fichier distribuables (bin & lib)
jarsigner : signatures numérique des fichiers JAR
javadoc : générateur de documentation (HTML, MIF)
javah : générateur de header pour l'appel de méthodes natives
javap : désassembleur de byte code
jdb : debugger
keytool : gestion des clefs et des certificats
orbd :ORB Corba
rmic : compilateur de stubs RMI
rmiregistry : "Object Request Broker" RMI
servertool : Outil d’administration du bus CORBA
Les options de la JVM
C:\>java
Usage: java [-options] class [args...]
(to execute a class)
or java -jar [-options] jarfile [args...]
(to execute a jar file)
where options include:
-client
to select the "client" VM
-server
to select the "server" VM
-hotspot
is a synonym for the "client" VM
The default VM is client.
[deprecated]
-cp -classpath <directories and zip/jar files separated by ;>
set search path for application classes and resources
-D<name>=<value>
set a system property
-verbose[:class|gc|jni]
enable verbose output
-version
print product version and exit
-showversion print product version and continue
-? -help
print this help message
-X
print help on non-standard options
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
disable assertions
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
C:\>java -X
-Xmixed
mixed mode execution (default)
-Xint
interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
prepend in front of bootstrap class path
-Xnoclassgc
disable class garbage collection
-Xincgc
enable incremental garbage collection
-Xloggc:<file>
log GC status to a file with time stamps
-Xbatch
disable background compilation
-Xms<size>
set initial Java heap size
-Xmx<size>
set maximum Java heap size
-Xss<size>
set java thread stack size
-Xprof
output cpu profiling data
-Xrunhprof[:help]|[:<option>=<value>, ...]
perform JVMPI heap, cpu, or monitor profiling
-Xdebug
enable remote debugging
-Xfuture
enable strictest checks, anticipating future default
-Xrs
reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni
perform additional checks for JNI functions
Intégration Windows
Intégration Internet Explorer
Exécutables Java
Applications autonomes classiques (Stand Alone applications)
Applications sont directement exécutées depuis le système hôte.
Possèdent une méthode main
Signature : public static void main(String [] args)
Composants :
Programme hébergé par une autre application.
Respecte un protocole défini au préalable (Interfaces).
Applets :
application Java s’éxecutant au sein d’une page WEB dans un navigateur Internet
(Internet Explorer, Mozilla, Netscape… ) ;
Servlets :
application Java traitant des requêtes client dans un serveur d’application.
But généraliste, mais le plus traite des requêtes HTTP.
EJB (Entreprise Java Bean) :
Application Java Distribuée reflétant l’état d’une session utilisateur (Session Bean), d’une
donnée (Entity Bean) ou d’un message (Message Driven Bean).
Composant géré par uniquement par des Serveurs d’application Java.
Peuvent être transactionnels
Application Autonome
Programme Java :
Exemple :
class HelloWorld {
public static void main(String args) {
System.out.println("Hello World !");
}
}
Invocation classique :
$ java -classpath . HelloWorld
Hello World !
Exécutables Java (2/2)
Applet : exécution dans un Navigateur Internet
public class HelloWorldApplet extends Applet {
public void paint(Graphics g) {
g.drawString("Hello World !", 50, 20);
}
}
Servlet : exécution dans un serveur d’application (Web Container)
public class HelloWorldExample extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
out.println("<html>Hello world !</html>");
}
}
JAR
Invocation depuis une Archive JAR :
$ cat MANIFEST.MF
Manifest-Version: 1.0
Main-Class: HelloWorld
$ jar cfm MyHelloPack.jar MANIFEST.MF
HelloWorld.class
$ jar –i MyHelloPack.jar
$ java -jar MyHelloPack.jar
Hello World !
Rendre exécutable les JAR
FICHIER JARFile.reg :
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.JAR]
@="JARFile"
[HKEY_CLASSES_ROOT\JARFile]
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
@="Fichier Java ARchive (exécutables)"
[HKEY_CLASSES_ROOT\JARFile\DefaultIcon]
@="C:\\Program Files\\Java\\j2re1.4.1\\bin\\jinstall.exe,0"
[HKEY_CLASSES_ROOT\JARFile\shell]
@="open"
[HKEY_CLASSES_ROOT\JARFile\shell\open]
[HKEY_CLASSES_ROOT\JARFile\shell\open\command]
@="\"C:\\WINDOWS\\System32\\javaw.exe\" -jar \"%1\""