Notes de lecture "Java Core Technology" (3) - Gestion des exceptions

Exception JavaCoreNote

Si certaines opérations ne sont pas terminées en raison d'une erreur, le programme doit:
• revenir à un état sûr et permettre à l'utilisateur d'exécuter d'autres commandes, ou
• permettre à l'utilisateur d'enregistrer les résultats de toutes les opérations et de terminer le programme de manière appropriée

Anormal

pour: transférer le contrôle de l'endroit où l'erreur s'est produite vers un processeur d'erreur capable de gérer cette situation

Classification des erreurs de programme:

  1. Entrée utilisateur
  2. Restrictions physiques
  3. Équipement

  4. Méthode de traitement du code : renvoyer un code d'erreur spécial; ne renvoyer aucune valeur, mais lancer un objet qui encapsule les informations d'exception et rechercher le gestionnaire d'erreurs correspondant.

La grammaire

Classification
  • Exceptions non vérifiées (non vérifiées)
    Erreur, la
    hiérarchie de classe des erreurs RuntimeException décrit les erreurs internes et les erreurs d'épuisement des ressources du système d'exécution Java;
    RuntimeException: exceptions causées par des erreurs de programme, y compris la situation:

    • Conversion de type incorrecte
    • Accès aux baies hors limites
    • Accès au pointeur nul
      Si une RuntimeException se produit, ce doit être le problème du programmeur
  • L'exception vérifiée (vérifiée)
    non-RuntimeException signifie que le programme lui-même ne pose aucun problème, mais en raison d'exceptions telles que des erreurs d'E / S

Quand déclarer
  1. Appelez une méthode qui lève l'exception vérifiée
  2. Une erreur a été trouvée lors de l'exécution du programme et une exception vérifiée a été levée à l'aide de l'instruction throw
  3. Le programme a une erreur et lève une exception non vérifiée
  4. Erreurs internes dans les machines virtuelles et les bibliothèques d'exécution

Remarque: les erreurs héritées d'Error et les exceptions héritées de RuntimeException ne doivent pas être déclarées

Une méthode doit déclarer toutes les exceptions vérifiées qui peuvent être levées, et les exceptions non vérifiées sont soit incontrôlables (erreur) ou doivent être évitées (RuntimeException)

Lancer l'exception
  1. Trouver la classe d'exception appropriée
  2. Créer un objet de classe d'exception
  3. Lancer un objet

Définissez la classe d'exception: une classe dérivée d'Exception ou de ses sous-classes, fournissant deux constructeurs
Remarque: Le spécificateur throws de la sous-classe n'est pas autorisé à dépasser la portée de la classe d'exception répertoriée par la méthode de superclasse

Exception de capture
  • bloc try / catch
  • Quand attraper et quand lancer? -Quelles exceptions vous savez gérer
  • Lors de la capture de plusieurs exceptions, la variable d'anomalie est implicitement une variable finale
  • L'exception peut être renvoyée dans l'instruction catch. Pour convertir le type d'exception, la cause de l'exception peut être définie initCause, getCause peut être acquise de nouveau
clause finale

pour: problème de recyclage des ressources, s'il n'y a pas de clause finally, le même code apparaîtra à deux endroits.
La clause de retour dans la clause finally remplacera le retour dans l'essai

Découplage des blocs d'instructions try / catch et try / finally, la couche interne est responsable de la fermeture des ressources et la couche externe est chargée de s'assurer que les exceptions sont signalées

InputStrean in = . . .;
try
{
    try
    {
        code that might throwexceptions
    }
    finally
    {
        in.cose(); 
    } 
}
catch (IOException e) {
    show error message
}

La clause finally peut générer une exception, écrasant les informations d'exception d'origine.

Essayez l'instruction avec des ressources
  • La ressource appartient à la classe qui implémente l'interface AutoClosable et appellera automatiquement la méthode close.
  • Les instructions try avec ressources peuvent également avoir leurs propres clauses catch, finally, ces clauses seront exécutées après l'appel à la fermeture de la ressource. En pratique, évitez d'ajouter trop de contenu, ce qui est rarement utilisé de cette manière.
    Pour le problème que la clause finally génère une exception qui couvre l'exception d'origine, la méthode addSuppressd est automatiquement appelée pour l'ajouter à l'exception supprimée de l'exception d'origine et l'exception d'origine est levée. Le processeur peut appeler getSuppressed pour obtenir la liste des exceptions.
Trace de pile
  • Throwable.printStackTrace 、 getStackTrace
  • Thread.getAllStackTrace

Conseils d'utilisation

  1. La gestion des exceptions ne peut pas remplacer de simples tests
  2. Ne raffinez pas trop les exceptions et ne faites pas gonfler le code
  3. Tirer parti de la hiérarchie des exceptions
  4. Ne supprimez pas anormal
  5. Lors de la détection d'erreurs, la dureté est meilleure que le laissez-faire (lancer tôt)
  6. N'hésitez pas à passer des exceptions (prise tardive)

Affirmation

pour: activer sélectivement la détection

Le mécanisme d'assertion permet à certaines instructions de vérification d'être insérées dans le code pendant le test. Lorsque le code est publié, ces instructions de détection insérées seront automatiquement supprimées

Pour utiliser

  1. assert condition;
    assert condition: expression;
    exception AssertionError est levée lorsque la condition n'est pas établie, l'expression dans le second formulaire génère une chaîne de description.

  2. L'activation et la désactivation
    ne nécessitent pas de recompilation, est la fonction du chargeur de classe.
    Activer: -enableassertions ou -ea
    peut être activé dans une classe ou un package:
    java -ea: MyClass -ea: com.mycompany.mylib ... MyApp est
    désactivé: -disableassertions ou -da

Pour les classes système (pas de chargeur de classe), utilisez: le programme enableystemassertions / -esa
peut également être contrôlé, voir API

  1. Quand utiliser
  • L'échec d'assertion est une erreur irrécupérable et irrécupérable;
  • La vérification des assertions n'est utilisée que dans la phase de développement et de test

Journal

Avantages de l'API de journalisation:

  1. Il est facile d'ouvrir, d'annuler tout ou un certain niveau d'enregistrements de journal;
  2. Peut être dirigé vers différents processeurs;
  3. L'enregistreur et le processeur peuvent filtrer les enregistrements;
  4. Formaté de différentes manières;
  5. Plusieurs enregistreurs peuvent être utilisés;
  6. Il est contrôlé par défaut par un fichier de configuration, et la configuration peut également être remplacée par un programme.

Journal de base

  1. Appelez l'enregistreur global
  2. Annuler: Logger.getGlobal (). SetLevel (Off)

Journal avancé

  1. L'enregistreur a une structure hiérarchique et l'enfant hérite des attributs du parent
  2. 7 niveaux: SÉVÈRE, AVERTISSEMENT, INFO, CONFIG, FIN, PLUS FIN, PLUS FIN, les trois premiers par défaut

Par défaut, les informations sur le nom de la classe et le nom de la méthode sont enregistrées, mais la machine virtuelle peut ne pas être optimisée pour obtenir des informations d'appel précises. Vous pouvez utiliser la méthode logp pour obtenir les informations exactes de la classe et de la méthode appelantes

Rôle:

  1. La méthode utilisée pour suivre le flux d'exécution: entrée, sortie
  2. Consigner les exceptions inattendues: lancement, journal

Modifier la configuration du gestionnaire de journaux

Valeur par défaut: jre / lib / 1ogging.properties
Modification: java -Djava.util.logging.config.file = configFile MainClass

Modifiez le nom du niveau de journalisation. Level = FINE
gestionnaire de journaux par défaut: java.util.logging.LogManager
peut être modifié via les propriétés système: java.util.logging.manager

Processeur

  • Utiliser ConsoleHandler par défaut
  • Niveau INFO par défaut java.uti1.1ogging.ConsoleHandler.level
  • Envoyer au processeur et au processeur parent par défaut

Autres processeurs: FileHandler, SocketHandler
peut modifier le comportement par défaut du processeur de fichiers

Filtrer

Implémenter le filtre, la méthode setFilter dans l'enregistreur ou le processeur

Format

Implémentez Formatter, utilisez la méthode setFormatter dans le processeur

Opérations courantes

  1. L'enregistreur est nommé comme nom de package principal
  2. Installez la configuration par défaut dans le programme
  3. Seuls les journaux utiles aux utilisateurs sont définis sur les 3 premiers niveaux, qui sont affichés sur la console.

Compétences de débogage

  1. Imprimer les variables;
  2. Placer la méthode principale dans la classe et tester individuellement chaque classe;
  3. Utilisez JUnit pour organiser les cas de test
  4. Utilisez un proxy de journalisation pour intercepter les appels de méthode et enregistrer les journaux
  5. Imprimer la trace de pile Thread.dumpStack ()
  6. Capturer la trace de pile dans une chaîne
  7. Capturez les informations d'erreur dans le fichier java MyProgram 2> errors.txt
    java MyProgram 1> errors.txt 2> & 1
  8. La trace de pile des exceptions non interceptées est enregistrée dans un fichier et la méthode statique Thread.setDefaultUncaughtExceptionHandler peut être appelée pour modifier le gestionnaire d'exceptions non interceptées
  9. Pour observer le processus de chargement de classe, vous pouvez utiliser l'indicateur -verbose pour démarrer la machine virtuelle Java
  10. L'option -Xlint indique au compilateur de vérifier certains problèmes de code courants
    [Le transfert d'image de lien externe a échoué, le site source peut avoir un mécanisme de chaîne antivol, il est recommandé d'enregistrer l'image et de la télécharger directement (img-Vg4mJ7vS-1582984683851) // 1520493E-927F-420A-8EE1-BA6F74088A9D / appyinxiangcom / 11767354 / ENResource / p3065)]
  11. Prise en charge de
    Jconsole processID pour la surveillance et la gestion des applications Java à l'aide de JVM
  12. utilitaire jmap pour obtenir un vidage de tas
    jmap -dump: format = b, file = dumpFileName processID
    jhat dumpFileName
    dans localhost: 7000
  13. L'exécution de la machine virtuelle Java avec l'indicateur -Xprof exécutera un profileur de base pour suivre
    les méthodes fréquemment appelées dans le code

Résumé

Cet article trie la classification des erreurs de programme. En plus de renvoyer des valeurs de retour spéciales, le langage Java peut gérer les problèmes du programme en lançant des objets d'exception et en interceptant des exceptions. Enregistrez les informations sur l'entreprise et le programme dans l'exécution du programme à travers différents niveaux de journal et réalisez la détection du programme dans les étapes de développement et de test du programme à travers des assertions.

Publié 159 articles originaux · loué 225 · 210 000 vues

Je suppose que tu aimes

Origine blog.csdn.net/lyg673770712/article/details/104583090
conseillé
Classement