Java – Bases, culture et pédagogie

Logo officiel de Java (auteur inconnu)

Quelques raccourcis :

Comme tout langage, Java a sa culture et ses particularités. En voici quelques-unes, sans prétention d'exhaustivité.

Généralités

Sujets d'ordre général à propos de Java.

Une guerre légale entre Oracle et Google pour Java sur Android a été gagnée par Oracle en 2014. Ce n'est pas une bonne nouvelle pour les informaticiennes et les informaticiens qui souhaitent innover :

Communauté

À propos des communautés gravitant autour de Java.

Idées et opinions

Idées et opinions :

Technique

Le type String

À propos des chaînes de caractères de Java :

Le fait que les chaînes de caractères Java soient immuables a des qualités, mais a aussi le vilain défaut de rendre certaines opérations sur celles-ci extrêmement lentes. Pour cette raison, lorsque les manipulations de chaînes de caractères ne sont pas banales, mieux vaut passer par une classe moins conviviale mais plus polyvalente, soit la classe StringBuilder.

À titre d'exemple, le programme suivant :


public class Z {
   private static String créerChaîneString(char [] cs, int npasses) {
      String s = "";
      for(int i = 0; i != npasses; ++i) {
         for(char c : cs) {
            s += c;
         }
      }
      return s;
   }
   private static String créerChaîneStringBuilder(char [] cs, int npasses) {
      StringBuilder sb = new StringBuilder(npasses * cs.length);
      for(int i = 0; i != npasses; ++i) {
         for(char c : cs) {
            sb.append(c);
         }
      }
      return new String(sb);
   }
   public static void main(String [] args) {
      char [] caractères = new char[26];
      for(int i = 0; i != caractères.length; ++i) {
         caractères[i] = (char)((int)'a' + i);
      }
      for(char c : caractères) {
         System.out.print(c);
      }
      System.out.println();
      final int NPASSES = 10000;
      final int NANO_TO_MILLI = 1000000;
      long avant0 = System.nanoTime();
      String s0 = créerChaîneString(caractères, NPASSES);
      long après0 = System.nanoTime();
      System.out.println(
         "String : Chaine de " + s0.length() + " caracteres creee en " + ((après0 - avant0) / NANO_TO_MILLI) + " ms"
      );
      long avant1 = System.nanoTime();
      String s1 = créerChaîneStringBuilder(caractères, NPASSES);
      long après1 = System.nanoTime();
      System.out.println(
         "StringBuilder : Chaine de " + s1.length() + " caracteres creee en " + ((après1 - avant1) / NANO_TO_MILLI) + " ms"
      );
   }
}

... lorsque je l'exécute sur mon ordinateur personnel avec la version 7 de Java, affiche :

abcdefghijklmnopqrstuvwxyz
String : Chaine de 260000 caracteres creee en 52044 ms
StringBuilder : Chaine de 260000 caracteres creee en 2 ms

... ce qui montre concrètement l'impact de la réallocation multiple encourue par String (car chaque instruction « s += c; » est en fait un raccourci pour « s = new String(s + c); ») alors que StringBuilder n'alloue la mémoire qu'une seule fois.

Critiques

Tout langage a ses critiques, surtout s'il est populaire, et Java ne fait pas exception.

Divers

Applications du langage :

La version « entreprise », J2EE :

Java 3D :

Java et les DSL :

Java et les exceptions : ../Sujets/Developpement/Exceptions.html#avec_java

Java et l'internationalisation :

Java et la multiprogrammation :

Java et la vitesse d'exécution :

Java et les polices de caractères :

Java et la popularité :

Java et le scripting :

Java et la sécurité :

Java et la sérialisation :

Java et les services Web : ../Sujets/Web/Developpement-Web.html#java_services_web

L'API Swing :

Java et les tests :

Java et XML : ../Sujets/Web/XML-etc.html#langage_Java


Valid XHTML 1.0 Transitional

CSS Valide !