Connaissances vs Compétences
Le collège nous a appris qu'il n'y a pas de grande différence entre la théorie et la pratique. Eh bien, vous comprenez sûrement que ce n'est pas la même chose. Mais vous ne voyez pas la différence fondamentale. Pourtant il y en a un. La plupart des gens placent le signe d'égalité entre "je sais" et "je peux". Est-ce que tu? Que diriez-vous de quelques exemples ?- Je sais que fumer est mauvais pour moi, mais je fume.
- Je sais que le fast-food est mauvais pour moi, mais j'en mange.
- Je connais le code de la route mais je ne sais pas conduire.
- Je sais que le jogging est bon pour moi mais je ne fais pas de jogging le matin.
Vous avez atteint un nouveau niveau
Niveau 9
1 Risha, trace de pile
- Hé! Aujourd'hui, je vais vous dire quelle est la trace de la pile. Mais laissez-moi d'abord vous expliquer ce qu'est la pile. - Imaginez une pile de papiers - des devoirs pour un certain greffier. Une nouvelle affectation peut être placée en haut de la pile, et il prendra une affectation du haut d'une pile. Ainsi, les devoirs ne se feront pas selon le principe du premier arrivé. Chaque fois que le greffier prend la tâche qui vient en dernier. Une telle structure de collection s'appelle une pile . - En Java, il existe une collection spéciale - Stack. Cette collection a des méthodes « ajouter un élément » et « prendre (obtenir/enlever) un élément ». Comme vous le savez déjà, le dernier élément ajouté sera pris en premier. - Hum. Ce n'est pas difficile, je suppose. - Bien. Alors laissez-moi vous expliquer ce qu'est une trace de pileest. - Imaginez qu'en Java la fonction À appelle la fonction B , et cette dernière appelle la fonction C , qui, à son tour, appelle la fonction D . Donc, pour quitter la fonction B , vous devez d'abord quitter la fonction C , et pour ce faire, vous devez quitter la fonction D . Ceci est très similaire à une pile. - Et quelle est la similitude? - Dans la pile, pour arriver à une certaine mission, vous devez également terminer toutes les missions mises en haut. - Eh bien, c'est un peu une analogie, mais je ne suis pas sûr d'avoir bien tout compris. - Regardez ici. En Java, une pile est un ensemble d'éléments. C'est comme des feuilles de papier dans une pile. Pour prendre la troisième à partir du haut, vous devez prendre la deuxième feuille, mais avant cela, vous devez prendre la première. Vous pouvez toujours mettre et prendre des feuilles, mais vous ne pouvez les mettre que sur le dessus et ne prendre que par le haut. Il en va de même pour l'appel de fonction. La fonction À appelle la fonction B , cette dernière appelle la fonction C . Pour quitter À , vous devez d'abord quitter B , et pour ce faire, vous devez quitter C . - Attendez une minute. Si j'ai bien compris, la pile entière s'avère en "seule la dernière feuille qui a été placée sur la pile peut être prise" et "d'abord, la dernière fonction appelée doit sortir". Est-ce vrai? - Oui. Ainsi, la séquence d'appels de fonction est la «pile d'appel de fonction», ou simplement «pile d'appel». La fonction appelée en dernier doit être terminée en premier. Prenons l'exemple : - OK. Tout est clair avec l'appel de fonction, je suppose. Mais qu'est-ce que ce StackTraceElement ? - La machine virtuelle Java enregistre tous les appels de fonction. A cet effet, il dispose d'une collection spéciale - pile. Lorsqu'une fonction en appelle une autre, JVM place un nouvel élément StackTraceElement dans cette pile. Lorsque la fonction se termine, l'élément est supprimé de la pile. Ainsi, cette pile stocke toujours des informations à jour sur l'état actuel de la «pile d'appel de fonction». - Chaque StackTraceElementcontient des informations sur la méthode appelée. Vous pouvez donc obtenir le nom de cette méthode en utilisant le getMethodName . - L'exemple ci-dessus le montre :- Récupérez la « pile d'appels » :
- Itérez le tableau en utilisant la boucle for-each . J'espère que vous ne l'avez pas oublié.
- Imprime les noms de méthode dans System.out .
2 Diego, Tâche sur l'affichage de la trace de la pile
- Salut Amigo ! Voici une petite tâche pour afficher à l'écran une trace de pile.Tâches | |
---|---|
1 | Chaque méthode doit renvoyer ses cinq méthodes StackTrace Write qui s'appellent. Chaque méthode doit renvoyer son StackTrace. |
2 | StackTrace à nouveau Écrivez cinq méthodes qui s'appellent. Chaque méthode doit retourner le nom de sa méthode appelante. Vous pouvez obtenir la méthode de l'appelant à l'aide de StackTrace. |
3 | La méthode doit renvoyer le numéro de ligne du code à partir duquel cette méthode a été appelée Ecrire cinq méthodes qui s'appellent. Chaque méthode doit renvoyer le numéro de ligne du code à partir duquel cette méthode a été appelée. Utilisez la fonction element.getLineNumber() . |
4 | Trace de pile de 10 appels Écrivez du code pour obtenir une trace de pile de 10 appels. |
5 | La méthode doit renvoyer un résultat - sa profondeur de trace de pile Écrivez une méthode qui affiche et renvoie sa profondeur de trace de pile. La profondeur de trace de la pile est le nombre de ses méthodes (le nombre d'éléments dans la liste). |
3 Elly, erreurs et exceptions
- Salut Amigo ! Aujourd'hui, nous avons une leçon très intéressante. Je vais vous parler des exceptions. L'exception est un mécanisme spécial pour contrôler les erreurs dans le programme. Voici quelques exemples d'erreurs pouvant survenir dans le programme :- Le programme essaie d'écrire un fichier sur le disque plein.
- Le programme essaie d'appeler une méthode d'une variable qui stocke la référence nulle.
- Le programme tente de diviser un nombre par 0.
- Lorsqu'une erreur se produit, la machine virtuelle Java crée un objet spécial - une exception - contenant toutes les informations sur l'erreur. Pour différentes erreurs, il existe différentes exceptions.
- Ensuite, cette exception force le programme à interrompre immédiatement la fonction en cours, et la fonction suivante, jusqu'à ce qu'il quitte la méthode principale. Après cela, le programme se termine. Les développeurs Java appellent ce processus « annuler la pile d'appels ».
- Si une exception se produit à l'intérieur du bloc try , le code de ce bloc n'est plus exécuté, mais l'exécution du bloc catch démarre.
- Si aucune exception ne se produit, le bloc try est exécuté jusqu'à la fin et catch n'est jamais exécuté .
4 Elly, RuntimeException, lance
- J'ai décidé d'aborder un autre sujet aujourd'hui. En Java, toutes les exceptions sont divisées en deux types : contrôlées/vérifiées et non contrôlées/non contrôlées . Les exceptions cochées doivent être interceptées, les exceptions non cochées peuvent être interceptées mais ce n'est pas obligatoire . - Est-il possible de lancer exprès des exceptions dans un code ? - Dans votre code, vous pouvez lancer vous-même des exceptions. Vous pouvez même écrire vos propres exceptions. Mais nous irons au fond de ce trou plus tard. Apprenons maintenant à travailler avec les exceptions levées par la machine virtuelle Java. - D'ACCORD. - Si exceptions ClassNotFoundException et FileNotFoundExceptionsont lancés (apparaissent) dans une méthode, le programmeur doit les spécifier dans la signature d'une méthode (en-tête de méthode). Ces exceptions sont vérifiées. C'est à quoi cela ressemble habituellement : - Donc, nous écrivons juste des lancers et listons les exceptions séparées par des virgules. Droite? Est-ce vrai? - Oui. Mais il y a une autre chose intéressante. Pour que l'exemple ci-dessous ait été compilé, la méthode qui appelle method1() doit soit intercepter ces exceptions , soit les renvoyer. Si vous souhaitez lancer une exception vérifiée, vous devez le spécifier dans l'en-tête de la méthode . - Encore une fois, si dans la méthode principale , vous souhaitez appeler une méthode qui a dans sa phrase d'en-tête throws FileNotFoundException, …alors vous devez faire l'une de ces deux choses:- pour attraper les exceptions FileNotFoundException, …
Vous devrez envelopper le code où vous appelez une méthode dangereuse avec un bloc try-catch - ne pas intercepter les exceptions FileNotFoundException, …
5 Risha, Rouler la pile d'appels, comment le faire dans les exceptions
- J'aimerais vous en dire un peu plus sur le fonctionnement des exceptions. L'exemple ci-dessous explique cela : - Je ne comprends pas. - D'accord. Je vais vous expliquer ce qui se passe. - Dans l'exemple de gauche, nous appelons plusieurs méthodes dans l'ordre de la chaîne. Dans method2() , nous créons et levons spécifiquement une exception (pour déclencher une erreur). - L'exemple de droite montre ce qui se passe. Regardez la method2() . C'est en quoi la création d'une exception se transforme : nous créons un objet de type RuntimeException , le stockons dans une variable spéciale exception et quittons immédiatement la méthode – return . - Dans method1 , après l'appel de method2 il y a une vérification,s'il y a une exception ou non; s'il y a une exception, method1 se termine immédiatement. Cette vérification est effectuée implicitement après l'appel de chaque (!) méthode Java. - Ouah! - Exactement. - Dans la colonne de droite de la méthode main j'ai écrit ce qui se passe lorsqu'une exception est interceptée par le bloc try-catch . S'il n'y a pas eu d'exception, le code continue de s'exécuter comme prévu. S'il y avait une exception du type spécifié dans catch , nous la traitons. - Et que signifient throw et instanceof ? - Regardez la dernière ligne à gauche et lancez de nouvelles RuntimeException(s). De cette façon, nous créons et levons une exception. C'est juste un exemple. Nous ne le ferons pas pour autant. - A l'aide de la commande « а instanceof B » dans le bloc de droite on vérifie si l'objet a est de type B . Autrement dit, si l'objet stocké dans la variable exception a le type RuntimeException . C'est une expression logique. - Eh bien, ça devient un peu plus clair.6 Diego, Tâche de capture d'exception
- Regardez ici! Oncle Diego a apporté quelques tâches à attraper pour vous. Je te souhaite bonne chance. Je pense que vous en aurez besoin. Il h. - Salut Amigo ! Voici quelques tâches de capture d'exception intéressantes.Attraper des tâches | |
---|---|
1 | 1. Exception lors de l'utilisation de nombres Attrapez l'exception qui se produit lors de l'exécution du code : int a = 42 / 0 ; Afficher l'exception à l'écran en précisant son type |
2 | 2. Exception lors de l'utilisation de chaînes Attrapez l'exception qui se produit lors de l'exécution du code : String s = null; Chaîne m = s.toLowerCase(); Affiche l'exception à l'écran en précisant son type. |
3 | 3. Exception lors de l'utilisation de tableaux Attrapez l'exception qui se produit lors de l'exécution du code : int[] m = new int[2] ; m[8] = 5 ; Affiche l'exception à l'écran en précisant son type. |
4 | 4. Exception lors de l'utilisation des collections List Attrapez l'exception qui se produit lors de l'exécution du code : ArrayList<String> list = new ArrayList<String>(); Chaîne s = liste.get(18); Affiche l'exception à l'écran en précisant son type. |
5 | 5. Exception lors de l'utilisation de collections Map Attrapez l'exception qui se produit lors de l'exécution du code : HashMap<String, String> map = new HashMap<String, String>(null); map.put(null, null); map.remove(null); Affiche l'exception à l'écran en précisant son type. |
7 Risha, Comment fonctionne la capture multiple
- Maintenant, quelques conférences plus intéressantes. J'aime tellement enseigner. - Je veux vous dire comment fonctionne une prise multiple . En fait c'est très simple : lorsqu'une exception survient dans le bloc try , l'exécution du programme est transférée au premier catch . - Si le type spécifié entre parenthèses du bloc catch est le même que le type de l'exception-object, alors l'exécution du code commence à l'intérieur du {}. Sinon on passe à la prise suivante . Le contrôle y est répété. - S'il n'y a plus de blocs catch , mais que l'exception n'a pas été interceptée, elle est renvoyée et la méthode en cours est interrompue. - Je vois. Ce catch sera exécuté, dont le type correspond au type d'exception. - Oui, c'est vrai. En fait, c'est un peu plus compliqué : le fait est que les classes peuvent être héritées les unes des autres. Si la classe « Vache » est héritée de la classe « Animal », l'objet de type « Vache » peut être stocké non seulement dans une variable de type « Vache », mais également dans une variable de type « Animal » . - Et alors? - Étant donné que toutes les exceptions sont héritées des classes Exception ou RuntimeException (qui est également héritée de Exception ), elles peuvent toutes être interceptées à l'aide des commandes catch (Exception e) ou catch (RuntimeException e) . - Et alors? - Cela signifie que,d'abord, vous pouvez intercepter n'importe quelle exception en utilisant la commande catch(Exception e) . Deuxièmement, l'ordre des blocs catch est important. Exemples : - ArithmeticException résultant d'une division par 0 est intercepté dans la deuxième capture. - Dans l'exemple ci-dessous, ArithmeticException est intercepté dans le premier catch , car les classes de toutes les exceptions sont héritées de Exception. Ainsi, Exception intercepte toute exception . - Dans l'exemple ci-dessous, l'exception ArithmeticException n'est pas interceptée, mais transmise à la méthode appelante. - Eh bien, ça devient plus clair maintenant. Ces exceptions ne sont pas si faciles. - Il semble seulement ainsi. En fait, c'est l'une des choses les plus simples en Java. - Je ne sais pas si je dois être content ou contrarié à ce sujet…8 Diego, Tâches de capture d'exceptions multiples
- Salut Amigo ! Hier, je me suis saoulé et j'ai trop compliqué vos tâches, mais j'espère qu'il n'y a pas de rancune de votre part et que vous les résoudrez tous ? C'est pour ton bien. Ici:Tâches | |
---|---|
1 | 1. Exceptions Il existe une méthode qui lève deux exceptions héritées de Exception et les deux autres héritées de RuntimeException : NullPointerException , ArithmeticException , FileNotFoundException et URISyntaxException . Vous devez intercepter NullPointerException et FileNotFoundException , mais pas ArithmeticException et URISyntaxException . Comment faire? |
2 | 2. Attraper les exceptions Il existe trois exceptions séquentiellement héritées de Exception : la classe Exception1 étend Exception la classe Exception2 étend Exception1 la classe Exception3 étend Exception2 Il existe une méthode, qui est décrite comme suit : public static void method1() throws Exception1, Exception2, Exception3 Ecrire un catch bloc pour attraper tous les trois Exception1 , Exception2 et Exception3 |
3 | 3. Attraper des exceptions sélectives 1. Découvrez quelles exceptions sont levées par la méthode BEAN.methodThrowExceptions . 2. La méthode processExceptions() doit appeler la méthode BEAN.methodThrowExceptions et gérer les exceptions : 2.1. si une exception FileSystemException se produit, enregistrez-la en appelant la méthode BEAN.log et lancez 2.2. si une exception CharConversionException ou toute autre IOException se produit, enregistrez-la simplement en appelant la méthode BEAN.log 3. Ajoutez la classe/le type de l'exception que vous transférez dans 2.1. aux processExceptions()signature de la méthode. 4. Gérez l'exception restante dans la méthode main() et enregistrez-la. Utilisez try..catch Astuce : Si vous avez intercepté l'exception MyException , que vous ne vouliez pas intercepter, vous pouvez la renvoyer à l'aide du code suivant : catch (MyException e) { throw e; } |
4 | 4. Attraper les exceptions cochées Gérez toutes les exceptions cochées dans la méthode processExceptions() . Vous devez afficher à l'écran chaque exception vérifiée qui s'est produite. Vous ne pouvez utiliser qu'un seul bloc try . |
5 | 5. Attraper les exceptions non contrôlées Gérez toutes les exceptions non contrôlées dans la méthode processExceptions() . Vous devez afficher à l'écran une trace de pile de chaque exception survenue à l'aide de la méthode printStack() . Vous ne pouvez utiliser qu'un seul bloc try . |
9 Professeur, Conférence sur les exceptions
- Aujourd'hui, nous avons un sujet super intéressant - les exceptions. A l'époque où les jeunes scientifiques et programmeurs étaient profondément enthousiasmés par ce sujet… - Désolé, je dois aller au labo. Voici des notes de cours. Je pense que tu le découvriras par toi-même. Ici : Exceptions Java (Documentation Oracle) Gestion des exceptions en Java (point Java T) Java - Gestion des exceptions (point des didacticiels) Gestion des exceptions Java de base10 juillet
- Amigo, que penses-tu de la leçon d'aujourd'hui ? Votre cerveau à positrons n'a pas encore fonctionné ? Les tâches de Diego suffisent à épuiser n'importe qui. Prenons un moment de bière et détendons-nous. Êtes-vous toujours debout ?11 Capitaine Écureuils
- Salut, soldat ! - Bonjour Monsieur! - J'ai une super nouvelle pour vous. Voici une vérification rapide pour renforcer vos compétences. Faites-le tous les jours et vous améliorerez vos compétences très rapidement. Les tâches sont spécialement conçues pour être effectuées dans Intellij IDEA.Tâches supplémentaires à effectuer dans Intellij Idea | |
---|---|
1 | 1. Division par zéro Créez une méthode public static void divisionByZero() , où vous devez diviser n'importe quel nombre par zéro et afficher à l'écran le résultat de la division. Enveloppez l' appel de la méthode divisionByZero() dans un try..catch . Affichez à l'écran la trace de la pile d'exceptions à l'aide de la méthode exception.printStackTrace() . |
2 | 2. Compte à rebours de 10 à 0 Écrivez une boucle pour un compte à rebours de 10 à 0. Utilisez Thread.sleep(100) pour faire un délai ; Enveloppez l' appel de veille dans un try..catch . |
3 | 3. Enveloppez une méthode dans un try..catch Lire les nombres sur le clavier. Écrivez un code pour lire les nombres du clavier dans une méthode séparée readData() . Enveloppez tout le corps de cette méthode (tout le code à l'intérieur de la méthode readData() , à l'exception de la déclaration de la liste où les nombres seront stockés) dans un try..catch . Si l'utilisateur entre du texte au lieu d'entrer un nombre, la méthode doit intercepter l'exception et afficher à l'écran tous les nombres entrés auparavant. Afficher les numéros à l'écran. Chaque numéro doit être sur une nouvelle ligne. L'ordre des nombres doit être identique à celui de l'entrée. |
4 | 4. Convertisseur de date Lire au clavier une date au format « 18/08/2013 » Afficher à l'écran cette date au format « 18 AOÛT 2013 ». Utilisez les objets Date et SimpleDateFormat . |
5 | 5. Voyelles et consonnes Écrivez un programme qui lit les lignes du clavier. Le programme doit afficher à l'écran deux chaînes : 1) la première chaîne doit contenir des voyelles 2) la deuxième chaîne doit contenir des consonnes et des signes de ponctuation du texte saisi. Séparez les caractères par des espaces. Exemple d'entrée : Stop look listen Exemple de sortie : oooie stplklstn |
6 | 6. Le conte du Petit Chaperon Rouge 1. Il y a cinq classes : Chaperon Rouge, grand-mère, pâté, bûcheron, loup. 2. Chaque classe possède deux champs de type ArrayList : kill et ate. 3. Les objets nécessaires sont déjà créés (capot, grand-mère, ...). 4. Créez la relation correcte (qui a mangé et tué qui) pour obtenir la logique du « Petit Chaperon Rouge ». |
7 | 7. Déplacer les modifications statiques Déplacer les modificateurs statiques pour que le code se compile. |
8 | 8. Liste de tableaux de nombres Créez une liste dont les éléments sont des tableaux de nombres. Ajoutez à la liste cinq tableaux d'objets de longueur 5, 2, 4, 7, 0, respectivement. Remplissez les tableaux avec n'importe quelles données et affichez-les à l'écran. |
9 | 9. Dix chats Créez une classe Cat avec un champ String name . Créez un dictionnaire Map<String, Cat> , ajoutez 10 chats sur le modèle «Name» - «Cat». Obtenez de la carte un ensemble de noms et affichez l'ensemble à l'écran. |
Tâches bonus | |
---|---|
1 | 1. Le programme ne se compile pas et ne s'exécute pas. Répare le. Tâche : Le programme doit lire à partir du clavier deux noms de fichiers et copier le premier fichier à l'emplacement spécifié par le deuxième nom. |
2 | 2. Ajoutez de nouvelles fonctionnalités au programme. Ancienne tâche : le programme doit lire à partir du clavier deux noms de fichiers et copier le premier fichier à l'emplacement spécifié par le deuxième nom. Nouvelle tâche : Le programme doit lire à partir du clavier deux noms de fichiers et copier le premier fichier à l'emplacement spécifié par le deuxième nom. Si le fichier (qui va être copié) avec le nom spécifié n'existe pas, le programme doit afficher à l'écran le message « Le fichier n'existe pas » et essayer de lire à nouveau le nom du fichier depuis la console avant de lire le nom du deuxième fichier (destination). |
3 | 3. Apprendre et pratiquer l'algorithme. Lire au clavier la liste des mots et des chiffres. Affiche à l'écran les mots en ordre croissant et les nombres en ordre décroissant. Exemple d'entrée : Cerise 1 Haricot 3 Pomme 2 0 Pastèque Exemple de sortie : Pomme 3 Haricot 2 Cerise 1 0 Pastèque |
GO TO FULL VERSION