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

请问关于 Java static 变量的问题?

public class StaticTest {

    private static String a;
    private static String b = "this is " + a;

    public static void main(String[] args) {
        a = "test";
        // I think the result is this is test
        // but the result is this is null, why?

        System.out.println(b);
    }


    //
    //  我本以为输出结果是 this is test
    // 没想到输出结果为 this is null, 这是什么原因

}
ringa_leeringa_lee2742 Il y a quelques jours461

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

  • 巴扎黑

    巴扎黑2017-04-18 10:58:42

    Tout d'abord, la première : lorsque vous définissez la variable A, vous n'attribuez pas de valeur initiale, donc A est NULL, et ensuite vous obtenez B, qui est naturellement nul
    Puis la deuxième : public static void main, le compilateur est Lors de la compilation de ce code, a et b sont d'abord référencés par la fonction principale. Si vous modifiez a, a sera modifié, mais b sera toujours le même b, et ce sera toujours nul. . Vous devez comprendre la signification du processus d'exécution d'une fonction statique. Votre B n'est pas défini dynamiquement, donc bien sûr, ce que vous obtenez est le b statique, et il ne sera pas compilé dynamiquement.

    répondre
    0
  • 黄舟

    黄舟2017-04-18 10:58:42

    Il s'agit du mécanisme d'initialisation de classe de la JVM. Les trois processus de conversion du bytecode en objets en cours d'exécution sont le chargement, la connexion et l'initialisation. . . Le processus de préparation de la connexion donnera la valeur par défaut null, car StaticTest a une méthode principale, qui est définie sur la classe de démarrage au démarrage de la JVM. Elle effectuera des appels actifs pour initialiser la classe et exécuter ces deux lignes de code private static String. a; chaîne statique privée b = "c'est " + a donc b=c'est nul

    répondre
    0
  • Annulerrépondre