IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[JRE] La classe System fait une entorse aux spécifications JAVA ?


Sujet :

Java

  1. #1
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut [JRE] La classe System fait une entorse aux spécifications JAVA ?
    Je viens de voir une chose qui me laisse perplexe...

    Je vous laisse juger. Il doit y avoir quelque chose qui m'échappe.

    extrait de la classe System :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public final static PrintStream out = nullPrintStream();
     
    (...)
     
    private static PrintStream nullPrintStream() throws NullPointerException {
        if (currentTimeMillis() > 0)
            return null;
        throw new NullPointerException();
    }
    Jusque là on est d'accord pour dire que quand la classe est chargée, System.out est à null.

    La doc précise que out, in et err sont ensuite initialisés par une autre méthode (initializeSystemClass()), laquelle appelle des méthodes natives.

    Seulement, là ou je ne comprends pas c'est que "out" est final et initialisé à null. Donc impossible a priori de lui affecter autre chose.

    J'en conclu qu'il est possible par des méthodes natives de contourner le fait qu'on ne peut pas réaffecter une variable finale ?
    En parcourant les spécifications, je ne vois rien de tel.

    J'en viens à penser qu'une des bases de JAVA (la classe System) est faite de manière telle qu'elle ne respecte pas les spécifications.

    Je dois me tromper mais je ne vois pas ou...

  2. #2
    Membre chevronné
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Par défaut
    Hello.
    Il me semble que, en bidouillant un peu avec les classloader, on peut "publiciser" des membres "private"...

    Je n'ai pas la javadoc sous les yeux, mais peut-être peut-on également dé-finaliser les membres marqués "final"...

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    vbrabant en avait parlé sur son blog : SCJP 5.0 Défi 5.1: public static final
    Par contre il n'a pas encore donné la raison exacte...

    Par contre c'est indiqué dans les specs : http://java.sun.com/docs/books/jls/t...ry.html#17.5.4

    Mais j'avoue ne pas comprendre l'intérêt de tout cela...

    a++

  4. #4
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    Au temps pour moi... J'avais pas vu ce petit passage des spécifications, même si je ne l'ai pas très bien compris.

    J'ai cru comprendre que c'est pour des histoires de synchronisation. Mais je n'arrive pas à vraiment comprendre le problème. Peut-être un peu trop technique et un peu trop "anglais" pour moi

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/12/2013, 15h10
  2. Ajouter une action aux blocs avec la meme Classe
    Par thebarbarius dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/04/2010, 18h58
  3. Réponses: 0
    Dernier message: 30/03/2010, 13h58
  4. Réponses: 3
    Dernier message: 29/03/2010, 17h01
  5. [POO] Une classe qui fait tout ?
    Par Nasky dans le forum Langage
    Réponses: 23
    Dernier message: 26/05/2006, 20h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo