Source: http://www.lita.univ-lorraine.fr/~gely/enseignement/java/DSTP-JAVA-2006.pdf