J'ai entendu dire que l'enseignant que la plupart des anomalies dans les études futures étaient des exceptions de pointeur nul. Alors prenez le temps de jouer à des jeux pour vérifier ce qui est une exception de pointeur nul
1: Les principales raisons de la survenue d'exceptions de pointeur nul sont les suivantes:
(1) Lorsqu'un objet n'existe pas, il générera une exception obj.method () // L'objet OBJ n'existe pas
(2) Lorsque vous accédez ou modifiant un champ qui n'existe pas dans un objet, une exception sera générée obj.method () // la méthode n'existe pas
(3) La variable de chaîne n'est pas initialisée;
(4) Les objets de type d'interface ne sont pas initialisés avec des classes spécifiques, telles que:
Liste LT; rapportera une erreur
List lt = new ArrayList (); Il n'y aura pas d'erreur
Lorsque la valeur d'un objet est vide, vous ne jugez pas vide. Vous pouvez essayer d'ajouter une ligne de code avant le code suivant:
if (rb! = null && rb! = "")
Passer à:
if (rb == null); if (rb! == null && rb! = "") ou if (("").Solution au pointeur nul:
Concentrez-vous sur la ligne où l'erreur se produit et diagnostiquez des erreurs spécifiques à travers deux raisons principales causées par l'exception du pointeur nul. Dans le même temps, afin d'éviter la survenue de pointeurs nuls, il est préférable de placer des valeurs "nulles" ou nulles avant la valeur définie lors du traitement du jugement.
Une brève analyse des exceptions du pointeur null commun:
(1) Erreur du pointeur nul Java.lang.NullPointerException
Il existe 8 types de données de base en Java. Les valeurs des variables peuvent avoir leurs valeurs par défaut. S'ils sont ajoutés sans affectation normale, la machine virtuelle Java ne peut pas être compilée correctement. Par conséquent, l'utilisation des types de données Java de base ne provoquera généralement pas des exceptions de pointeur nul. Dans le développement réel, la plupart des exceptions du pointeur nul sont principalement liées aux opérations d'objets.
2. Mécanisme de manipulation des exceptions Java
Il existe deux façons de gérer le code qui peut avoir des exceptions:
Tout d'abord, utilisez l'instruction Try ... Catch dans la méthode pour capturer et gérer les exceptions. L'instruction CACHE peut en avoir plusieurs pour correspondre à plusieurs exceptions. Par exemple:
public void p (int x) {try {...} catch (exception e) {...} enfin {...}} Deuxièmement, pour des exceptions qui ne peuvent pas être traitées ou celles qui doivent être transformées, passez-la à la déclaration de la méthode.
L'instruction lance lance une exception. Par exemple:
public void test1 () lève MyException {... if (....) {Throw new myException ();}}Si chaque méthode lance simplement une exception, dans un appel imbriqué multicouche à la méthode de l'appel de la méthode, la machine virtuelle Java recherche dans le bloc de code de méthode où l'exception se produit jusqu'à ce que le bloc de code gère l'exception. Remettez ensuite l'exception à l'instruction Catch correspondante pour le traitement. Si la machine virtuelle Java remonte à la méthode Main () en bas de la pile d'appels de méthode, si le bloc de code qui gère l'exception n'est toujours pas trouvé, les étapes suivantes seront gérées:
Tout d'abord, appelez la méthode printstacktrace () de l'objet exceptionnel et imprimez les informations d'exception de la pile d'appels de méthode.
Deuxièmement, si le thread qui survient à l'exception est le thread principal, l'ensemble du programme se termine; S'il ne s'agit pas du thread principal, le thread est terminé et d'autres threads continuent de s'exécuter.
Grâce à l'analyse et à la réflexion, nous pouvons voir que plus le traitement anormal est inférieur, plus les ressources et le temps consommés sont plus petits, plus la portée de l'impact est faible. Par conséquent, ne lancez pas des exceptions que vous pouvez également gérer à l'appelant.
Un autre point ne peut pas être ignoré: les instructions finalement doivent exécuter du code en tout cas, ce qui peut garantir la fiabilité de certains code qui doivent être exécutés dans tous les cas. Par exemple, lorsque la requête de la base de données est anormale, la connexion JDBC doit être publiée, etc. L'instruction enfin est exécutée avant l'instruction RETOUR, quelle que soit sa commande ou son emplacement, ou s'il existe une exception dans le bloc d'essai. La seule situation où l'instruction finale n'est pas exécutée est que la méthode exécute la méthode System.exit (). System.exit () fonctionne pour terminer la machine virtuelle Java en cours d'exécution. La valeur de retour du retour ne peut pas être modifiée en attribuant une nouvelle valeur à la variable dans le bloc de l'instruction final. Il est également recommandé de ne pas utiliser l'instruction de retour dans le bloc final. Il n'a pas de sens et peut facilement entraîner des erreurs.
Enfin, vous devez également prêter attention aux règles de syntaxe pour la gestion des exceptions:
Tout d'abord, les déclarations d'essai ne peuvent pas exister seules, mais peuvent être composées de capture et enfin
Essayez ... Catch ... Enfin, essayez ... Catch, essayez ... Enfin, essayez ... Enfin, les instructions Catch peuvent en avoir une ou plusieurs, et enfin les déclarations peuvent être au maximum. Les trois mots clés essaient, attrapent et ne peuvent enfin pas être utilisés seuls.
Deuxièmement, la portée des variables dans les trois blocs de code est indépendante et n'est pas accessible les unes des autres. Si vous souhaitez être accessible dans les trois blocs, vous devez définir la variable en dehors de ces blocs.
Troisièmement, lorsque plusieurs blocs de capture sont utilisés, la machine virtuelle Java correspond à l'une des classes d'exception ou à sa sous-classe, et exécute le bloc de capture sans exécuter d'autres blocs de capture.
Quatrièmement, il n'y a pas d'autres déclarations qui suivent après la déclaration de lancer car elles n'ont pas la possibilité d'être exécutées.
Cinquièmement, si une méthode appelle une autre méthode qui déclare l'exception lancée, cette méthode gère l'exception ou déclare le lancement.
2.2 Différence entre le lancer et les mots clés:
Le lancer est utilisé pour lancer une exception, à l'intérieur du corps de la méthode. Le format de syntaxe est: lancer un objet d'exception.
Les lancers sont utilisés pour déclarer quelle exception peut être lancée par une méthode. Après le nom de la méthode, le format de syntaxe est:
Jette le type d'exception 1, Type d'exception 2 ... Type d'exception n.
Trois: Le suivant répertorie plusieurs situations et solutions correspondantes où des exceptions de pointeur nul peuvent se produire:
Extrait de code 1:
out.println (request.getParameter ("nom d'utilisateur"));Analyse: La fonction du segment de code 1 est très simple, qui consiste à produire la valeur de l'entrée de l'utilisateur "nom d'utilisateur".
Remarque: il semble que l'instruction ci-dessus ne puisse trouver aucune erreur de syntaxe, et dans la plupart des cas, il n'y a pas de problème. Cependant, si un utilisateur ne fournit pas la valeur du champ de formulaire "nom d'utilisateur" lors de la saisie des données ou contourne le formulaire directement entrée via une certaine manière, la valeur de cette demande. "Java.lang.nullpointerException" Exception. De plus, même si l'objet peut être vide, certaines méthodes de java.lang.object ou objet objet lui-même sont appelées, telles que toString (), égal (objet obj) et autres opérations.
Code Snippet 2:
String username = request.getParameter ("nom d'utilisateur"); If (username.equals ("root")) {...}Analyse: La fonction du segment de code 2 est de détecter le nom d'utilisateur fourni par l'utilisateur. S'il s'agit d'un utilisateur dont le nom d'utilisateur est "root", certaines opérations spéciales seront effectuées.
Remarque: Dans le segment de code 2, si un utilisateur ne fournit pas la valeur du champ de formulaire "nom d'utilisateur", le nom d'utilisateur d'objet String est une valeur nul et un objet NULL ne peut pas être directement comparé à un autre objet. De même, la page JSP où se trouve le segment de code 2 lancera une erreur de pointeur vide.
Une petite astuce: si vous souhaitez comparer la valeur de retour d'une certaine méthode avec une constante et mettre la constante devant elle, vous pouvez éviter d'appeler la méthode égale de l'objet NULL. Par exemple:
If ("root" .equals (nom d'utilisateur)) {...}Même si l'objet Nom d'utilisateur renvoie un objet nul, il n'y aura pas d'exceptions de pointeur nul ici et peut fonctionner comme d'habitude.
Extrait 3:
String username = session.getAttribute ("Session.Username"). ToString ();Analyse: La fonction du segment de code 3 consiste à éliminer la valeur de Session.Username dans la session et à attribuer la valeur au nom d'utilisateur de l'objet String.
Remarque: En général, si l'utilisateur a déjà eu une session, aucun problème ne se produira; Cependant, si le serveur d'applications redémarre à l'heure actuelle et que l'utilisateur ne s'est pas connecté à nouveau (il se peut également que l'utilisateur ferme le navigateur mais ouvre toujours la page d'origine.) Ensuite, la valeur de la session sera invalide à l'heure actuelle, ce qui entraîne la valeur de la session. L'exécution directe de l'opération TOSTRING () sur un objet avec NULL fera que le système lancera une exception de pointeur nul.
Extrait 4:
public static void main (String args []) {personne p = null; P.SetName ("Zhang San"); System.out.println (P.GetName ()); }Analyse: Déclarez un objet de personne et imprimez le nom du nom dans l'objet.
Remarque: Pour le moment, votre P aura une exception de pointeur nul, car vous venez de déclarer que cet objet de type personne n'a pas créé d'objet, il n'y a donc pas de référence d'adresse dans son tas. Ne créez pas nécessairement un objet lors de l'utilisation de l'objet et de l'utilisation de la méthode.
R: Commencez à l'utiliser directement, que l'objet soit vide ou non.
(JSP) Segment de code 1:
out.println (request.getParameter ("nom d'utilisateur"));Analyse: La fonction du segment de code 1 est très simple, qui consiste à produire la valeur de l'entrée de l'utilisateur "nom d'utilisateur".
Remarque: il semble que l'instruction ci-dessus ne puisse trouver aucune erreur de syntaxe, et dans la plupart des cas, il n'y a pas de problème. Cependant, si un utilisateur ne fournit pas la valeur du champ de formulaire "nom d'utilisateur" lors de la saisie des données ou contourne le formulaire directement entrée via une certaine manière, la valeur de cette demande. "Java.lang.nullpointerException" Exception. De plus, même si l'objet peut être vide, certaines méthodes de java.lang.object ou objet objet lui-même sont appelées, telles que toString (), égal (objet obj) et autres opérations.
(Jsp) Extrait 2:
String username = request.getParameter ("nom d'utilisateur"); If (username.equals ("root")) {...}Analyse: La fonction du segment de code 2 est de détecter le nom d'utilisateur fourni par l'utilisateur. S'il s'agit d'un utilisateur dont le nom d'utilisateur est "root", certaines opérations spéciales seront effectuées.
Remarque: Dans le segment de code 2, si un utilisateur ne fournit pas la valeur du champ de formulaire "nom d'utilisateur", le nom d'utilisateur d'objet String est une valeur nul et un objet NULL ne peut pas être directement comparé à un autre objet. De même, la page JSP où le segment de code 2 est situé lancera une erreur de pointeur nul (java.lang.nullpointerException).
(Jsp) Extrait 3:
String username = session.getAttribute ("Session.Username"). ToString ();Analyse: La fonction du segment de code 3 consiste à éliminer la valeur de Session.Username dans la session et à attribuer la valeur au nom d'utilisateur de l'objet String.
Remarque: En général, si l'utilisateur a déjà eu une session, aucun problème ne se produira; Cependant, si le serveur d'applications redémarre à l'heure actuelle et que l'utilisateur ne s'est pas connecté à nouveau (il se peut également que l'utilisateur ferme le navigateur mais ouvre toujours la page d'origine.) Ensuite, la valeur de la session sera invalide à l'heure actuelle, ce qui entraîne la valeur de la session. L'exécution directe de l'opération TOSTRING () sur un objet nulaumera le système à lancer une exception du pointeur NULL (java.lang.nullpointerException).
Ce qui précède est le contenu complet de la brève discussion sur la gestion des exceptions de Java des exceptions de pointeur nul que vous avez apportées par l'éditeur. J'espère que tout le monde soutiendra Wulin.com plus ~