Maison  >  Questions et réponses  >  le corps du texte

Un objet statique non instancié peut-il également appeler des méthodes non statiques dans une classe ?

Il existe un code très courant : System.out.println. Il s'agit d'une instruction de sortie très courante, mais après l'avoir étudiée pendant un moment, j'ai soudainement pensé à regarder le code source :

public final static PrintStream out = null;

out est défini sous la classe System et n'a pas été instancié. Out est juste une variable nulle. Il ne peut même pas être appelé un objet statique, mais il peut appeler la méthode println() sous la classe PrintStream. Déjà? Puis-je demander pourquoi?

为情所困为情所困2712 Il y a quelques jours631

répondre à tous(5)je répondrai

  • 我想大声告诉你

    我想大声告诉你2017-05-17 10:09:52

    Explication détaillée : version chinoise http://www.cnblogs.com/skywan...
    La version anglaise est basée sur jdk7 https://luckytoilet.wordpress...

    répondre
    0
  • 滿天的星座

    滿天的星座2017-05-17 10:09:52

    Cher, tout d'abord, lorsque vous démarrez votre classe de test, c'est-à-dire lorsque vous instanciez votre classe de test, toutes les classes statiques que vous appelez seront instanciées en premier, donc en fait, lorsque vous exécutez l'instruction System.out.println , les méthodes et propriétés de la classe System ont été initialisées !

    répondre
    0
  • 仅有的幸福

    仅有的幸福2017-05-17 10:09:52

    statique {

        registerNatives();

    }
    L'annotation de la méthode statique ci-dessus indique que la méthode initializeSystemClass sera appelée pour l'initialisation. Le setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding"))); cette méthode devrait être disponible pour l'affectation,
    private static native void setOut0(PrintStream out) est une méthode locale

     ;

    répondre
    0
  • 天蓬老师

    天蓬老师2017-05-17 10:09:52

    Quand j'ai vu la statique finale, ma première réaction devrait être qu'il s'agit d'une constante. Les constantes doivent être initialisées, puis je l'ai cherché à nouveau,
    #. 🎜🎜 # Il appelle la méthode locale pour initialiser
    ;

    répondre
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-17 10:09:52

    Eh bien, le travail d'initialisation effectué dans la fonction initializeSystemClass() est appelé après l'initialisation du thread système. En d'autres termes, toutes les variables membres statiques (err out in) sont initialisées dans cette fonction
    Par exemple, dites ceci :
    . FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
    setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));
    La fonction setOut0() est dans la couche native, établissez une connexion entre le objet initialisé et ceci dans la couche native

    répondre
    0
  • Annulerrépondre