Java vérifie si une variable a été initialisée

Donc je suis assez nouveau à Java. En prenant un cours à mon collège, ce premier semestre se concentre sur la syntaxe et certaines des idées de base tout en utilisant une bibliothèque java appelée ObjectDraw. Le semestre prochain, nous allons commencer à nous éloigner D'ObjectDraw et de Core Java. De toute façon, j'ai rencontré quelques problèmes où j'ai besoin d'utiliser quelque chose de similaire à php isset fonction. Je sais que php et java sont extrêmement différents donc je ne devrais pas essayer de les comparer mais php l'est ma seule base de connaissances antérieures sur quelque chose de similaire à la programmation. Je me demandais juste s'il y avait une sorte de méthode qui retournerait une valeur booléenne pour savoir si une variable d'instance avait été initialisée ou non. Exemple...

if(box.isset()) {
  box.removeFromCanvas();
}

Jusqu'à présent, j'ai eu ce problème où je reçois une erreur d'exécution lorsque mon programme essaie de masquer ou de supprimer un objet qui n'a pas encore été construit.

30
demandé sur Sam 2011-09-22 08:49:00

3 réponses

Pas vraiment-il n'y a absolument aucune différence entre un champ (variable d'instance ou variable de classe) qui n'a pas encore été explicitement assigné , et celui qui a été assigné avec sa valeur par défaut - 0, false, null etc.

Maintenant si vous savez qu'une fois attribué, la valeur ne sera jamais réattribué une valeur null, vous pouvez utiliser:

if (box != null) {
    box.removeFromCanvas();
}

(et cela évite également un possible NullPointerException) mais vous devez être conscient que "un champ avec une valeur de null" n'est pas le même comme "un champ qui n'a pas été explicitement affecté de valeur". Null est une valeur de variable parfaitement valide (pour les variables non primitives, bien sûr). En effet, vous pouvez même changer le code ci-dessus en:

if (box != null) {
    box.removeFromCanvas();
    // Forget about the box - we don't want to try to remove it again
    box = null;
}

La différence est également visible pour les variables locales, qui ne peuvent pas être lues avant d'avoir été "définitivement assignées" - mais l'une des valeurs qui peuvent être définitivement assignées est null (pour les variables de type de référence):

// Won't compile
String x;
System.out.println(x);

// Will compile, prints null
String y = null;
System.out.println(y);
58
répondu Jon Skeet 2016-05-07 10:07:17

Les variables ou les champs D'Instance, ainsi que les variables statiques, reçoivent des valeurs par défaut basées sur le type de variable:

Int: 0
char: '\u0000' ou 0
double: 0.0
booléen: false
référence: null

Je veux juste clarifier que les variables locales (ie. déclarée dans le bloc, par exemple. la méthode, pour la boucle, en boucle, try-catch, etc.) ne sont pas initialisés aux valeurs par défaut et doivent être explicitement initialisés.

7
répondu Protongun 2013-07-15 12:36:28

Je pense que ce que vous voulez faire est de vérifier si une variable est définie sur null:

if (box != null) {
  box.removeFromCanvas();
}

En Java, les variables non initialisées sont évaluées à null (sauf celles des types de données primitifs, tels que int et boolean, qui ont des valeurs par défaut).

L'appel de la méthode d'un objet null provoquera un NullPointerException pour être jeté-je suppose que c'est l'exception que vous avez vu.

4
répondu Paul Bellora 2015-11-02 01:27:39