Principes de base de la gestion des erreurs Java - L'histoire qui capture n'est prise qu'au premier plan

Je me demande vraiment où trouver l'erreur.

Si vous essayez de rattraper dans un sous-programme, vous risquez de ne pas atteindre l'endroit que vous souhaitez récupérer.

java était le même

Exemples qui n'atteignent pas

Si la même exception est appliquée dans plusieurs sous-programmes, elle ne peut être récupérée que dans le sous-programme interne.

public class MyException {
	final private static int[] M = {1,2,3}; 
	public static void main(String[] args) {
		try {
			subroutine(M);
		}
		catch ( ArrayIndexOutOfBoundsException e ) {
		   System.out.println("[SECOND] catch : " + e.getMessage());
		}
	}

	public static void subroutine(int[] M) throws ArrayIndexOutOfBoundsException {
		try {
			System.out.println(M[4]);
		}
		catch ( ArrayIndexOutOfBoundsException e ) {
		   System.out.println("[FIRST] catch : " + e.getMessage());
		}
	}
}

result

[FIRST] catch : Index 4 out of bounds for length 3

Exemple pour arriver

Si vous le relancez dans la prise intérieure, vous pouvez le ramasser à l'extérieur. Lors du lancer, passez l'argument e d'une manière agréable. S'il reste e, une erreur se produit. Je ne suis pas sûr.

public class MyException {
	final private static int[] M = {1,2,3}; 
	public static void main(String[] args) {
		try {
			subroutine(M);
		}
		catch ( ArrayIndexOutOfBoundsException e ) {
		   System.out.println("[SECOND] catch : " + e.getMessage());
		}
	}

	public static void subroutine(int[] M) throws ArrayIndexOutOfBoundsException {
		try {
			System.out.println(M[4]);
		}
		catch ( ArrayIndexOutOfBoundsException e ) {
		   System.out.println("[FIRST] catch : " + e.getMessage());
		   throw new ArrayIndexOutOfBoundsException(e.getMessage());
        <---Jeter
		}
	}
}

result

[FIRST] catch : Index 4 out of bounds for length 3
[SECOND] catch : Index 4 out of bounds for length 3

Donc ce que je veux dire c'est

reference http://math.hws.edu/javanotes/c8/s3.html

Le dernier code ici consiste également en if + throw. Je pense que j'écris quelque chose comme ça, mais j'ai trop sommeil pour comprendre, alors je vais me coucher.

Eh bien ce genre de mémo

Recommended Posts

Principes de base de la gestion des erreurs Java - L'histoire qui capture n'est prise qu'au premier plan
L'histoire que .java est également construite dans Unity 2018
[Docker] Une histoire sur une erreur dans la composition de docker
Journaux d'erreurs et gestion des exceptions qui sont souvent vus dans la zone Java
[Rails] À propos de l'erreur selon laquelle l'image n'est pas affichée dans l'environnement de production
L'histoire selon laquelle le servlet n'a pas pu être chargé dans l'application Web Java
L'histoire de l'écriture de Java dans Emacs
L'histoire d'une exception d'état illégale dans Jetty.
[Docker] Une histoire sur une erreur dans la composition de docker
[Java] Où est la classe d'implémentation de l'annotation qui existe dans BeanValidation?
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
Une histoire sur le JDK à l'ère de Java 11
Le type d'intersection introduit dans Java 10 est incroyable (?)
L'histoire de l'apprentissage de Java dans la première programmation
L'histoire que link_to est profonde (cause inconnue)
[Java] Quelque chose est affiché comme "-0.0" dans la sortie
L'histoire selon laquelle la méthode d'initialisation de variable appelée par le constructeur Java ne doit pas être remplacée
Quel est le meilleur, Kotlin ou futur Java?
Code qui affiche uniquement la caméra intégrée dans le traitement
[Erreur] L'application ne s'affiche pas dans l'environnement de production
L'histoire qui a conduit à résoudre l'erreur car postgres n'a pas commencé avec docker-compose up
gestion des erreurs wsimport (une classe / interface avec le même nom "xxx" est déjà utilisée)