Conocimiento vs Habilidades
La universidad nos enseñó que no hay gran diferencia entre la teoría y la práctica. Pues seguro que entiendes que no es lo mismo. Pero no ves la diferencia central. Sin embargo, hay uno. La mayoría de la gente pone el signo de igualdad entre “Yo sé” y “Yo puedo”. ¿Tú? ¿Qué tal algunos ejemplos?- Sé que fumar es malo para mí, pero fumo.
- Sé que la comida rápida es mala para mí, pero la como.
- Conozco las normas de tráfico, pero no sé conducir.
- Sé que trotar es bueno para mí, pero no lo hago por la mañana.
Has alcanzado un nuevo nivel
Nivel 9
1 Risha, rastro de pila
- ¡Ey! Hoy les contaré qué es el stack trace. Pero primero déjame explicarte qué es la pila. - Imagine una pila de papeles - asignaciones para cierto empleado. Se puede poner una nueva tarea en la parte superior de la pila, y él tomará una tarea de la parte superior de la pila. Por lo tanto, las asignaciones no se realizarán por orden de llegada. Cada vez que el empleado toma la última asignación. Tal estructura de colección se llama pila . - En Java, hay una colección especial - Stack. Esta colección tiene métodos «agregar un elemento» y «tomar (obtener/quitar) un elemento». Como ya sabes, el último elemento agregado se tomará primero. - Hum. No es difícil, supongo. - Bien. Entonces déjame explicarte qué es un seguimiento de pilaes. - Imagine que en Java la función А llama a la función B , y esta última llama a la función C , que a su vez llama a la función D. Entonces, para salir de la función B , primero debe salir de la función C , y para hacerlo, debe salir de la función D. Esto es muy similar a una pila. - ¿Y cuál es la similitud? - En la pila, para llegar a una determinada tarea, también debe completar todas las tareas puestas en la parte superior. - Bueno, es un poco una analogía, pero no estoy seguro de haber entendido todo bien. - Mira aquí. En Java una pila es un conjunto de elementos. Es como hojas de papel en una pila. Para tomar la tercera desde arriba, debes tomar la segunda hoja, pero antes debes tomar la primera. Siempre puede poner y tomar hojas, pero puede ponerlas solo en la parte superior y tomar solo desde la parte superior. Lo mismo se aplica a la llamada de función. La función А llama a la función B , la última llama a la función C. Para salir de А , primero debe salir de B , y para ello debe salir de C. - Espera un minuto. Si lo hice bien, toda la pila resulta en "solo se puede tomar la última hoja que se puso en la pila" y "primero, debe salir la última función llamada". ¿Es eso así? - Sí. Entonces, la secuencia de llamadas a funciones es la «pila de llamadas a funciones», o simplemente «pila de llamadas». La última función llamada debe ser terminada primero. Veamos el ejemplo: - OK. Supongo que todo está claro con la llamada a la función. Pero, ¿qué es este StackTraceElement ? - La máquina virtual Java registra todas las llamadas a funciones. Para esto tiene una colección especial - pila. Cuando una función llama a otra, JVM coloca un nuevo elemento StackTraceElement en esta pila. Cuando finaliza la función, el elemento se elimina de la pila. Por lo tanto, esta pila siempre almacena información actualizada sobre el estado actual de la «pila de llamadas a funciones». - Cada StackTraceElementcontiene información sobre el método llamado. Entonces puede obtener el nombre de este método usando getMethodName . - El ejemplo anterior lo muestra:- Obtener la «pila de llamadas»:
- Iterar la matriz usando el bucle for-each . Espero que no lo hayas olvidado.
- Imprime los nombres de los métodos en System.out .
2 Diego, Tarea en la pantalla de seguimiento de la pila
- ¡Hola, amigo! Aquí hay una pequeña tarea para mostrar en la pantalla un seguimiento de la pila.Tareas | |
---|---|
1 | Cada método debe devolver su StackTrace Escriba cinco métodos que se llamen entre sí. Cada método debe devolver su StackTrace. |
2 | StackTrace de nuevo Escriba cinco métodos que se llamen entre sí. Cada método debe devolver el nombre de su método de llamada. Puede obtener el método de llamada usando StackTrace. |
3 | El método debe devolver el número de línea del código desde el que se llamó a este método Escriba cinco métodos que se llamen entre sí. Cada método debe devolver el número de línea del código desde el que se llamó a este método. Usa la función element.getLineNumber() . |
4 | Seguimiento de pila de 10 llamadas Escriba código para obtener un seguimiento de pila de 10 llamadas. |
5 | El método debe devolver un resultado: su profundidad de seguimiento de pila Escriba un método que muestre y devuelva su profundidad de seguimiento de pila. La profundidad de seguimiento de la pila es el número de sus métodos (el número de elementos en la lista). |
3 Elly, errores y excepciones
- ¡Hola, amigo! Hoy tenemos una lección muy interesante. Te hablaré de las excepciones. La excepción es un mecanismo especial para controlar errores en el programa. Estos son algunos ejemplos de errores que pueden ocurrir en el programa:- El programa intenta escribir un archivo en el disco lleno.
- El programa intenta llamar a un método de una variable que almacena la referencia nula.
- El programa trata de dividir un número por 0.
- Cuando ocurre un error, la máquina virtual Java crea un objeto especial, una excepción, que contiene toda la información sobre el error. Para diferentes errores hay diferentes excepciones.
- Entonces, esta excepción obliga al programa a interrumpir la función actual inmediatamente y la función siguiente, hasta que salga del método principal. Después de eso, el programa termina. Los desarrolladores de Java llaman a este proceso "revierte la pila de llamadas".
- Si ocurre una excepción dentro del bloque try , el código de este bloque ya no se ejecuta, pero comienza la ejecución del bloque catch .
- Si no se produce ninguna excepción, el bloque try se ejecuta hasta el final y nunca se ejecuta catch .
4 Elly, RuntimeException, lanza
- Decidí sacar otro tema hoy. En Java, todas las excepciones se dividen en dos tipos: controladas/verificadas y no controladas/no verificadas . Las excepciones marcadas deben ser capturadas, las no marcadas pueden ser capturadas pero eso no es obligatorio . - ¿Es posible lanzar excepciones en un código a propósito? - En su código, puede lanzar excepciones usted mismo. Incluso puede escribir sus propias excepciones. Pero profundizaremos en este agujero más tarde. Ahora aprendamos cómo trabajar con las excepciones lanzadas por la máquina virtual Java. - DE ACUERDO. - Si las excepciones ClassNotFoundException y FileNotFoundExceptionse lanzan (aparecen) en un método, el programador tiene que especificarlos en la firma de un método (cabecera de método). Tales excepciones están marcadas. Así es como suele verse: - Entonces, solo escribimos lanzamientos y enumeramos las excepciones separadas por comas. ¿Bien? ¿Es eso así? - Sí. Pero hay otra cosa interesante. Para compilar el siguiente ejemplo, el método que llama a method1() tiene que capturar estas excepciones o lanzarlas. Si desea lanzar una excepción marcada hacia adelante, debe especificarlo en el encabezado del método . - Una vez más, si en el método principal , desea llamar a un método que tiene en su frase de encabezado, arroja FileNotFoundException, …entonces tienes que hacer una de estas dos cosas:- para capturar excepciones FileNotFoundException, ...
Tendrá que envolver el código donde llama a un método peligroso con un bloque try-catch - no capturar excepciones FileNotFoundException, …
5 Risha, Rolling the call stack, cómo hacerlo en excepciones
- Me gustaría contarles un poco más sobre cómo funcionan las excepciones. El siguiente ejemplo explica que: - No lo entiendo. - De acuerdo. Voy a explicar lo que está pasando. - En el ejemplo de la izquierda, llamamos a varios métodos en orden de cadena. En method2() creamos y lanzamos específicamente una excepción (para iniciar un error). - El ejemplo de la derecha muestra lo que sucede. Mira el método2() . En eso se transforma la creación de una excepción: creamos un objeto de tipo RuntimeException , lo almacenamos en una excepción de variable especial e inmediatamente salimos del método – return . - En el método1 , después de la llamada del método2 hay un control,si hay una excepción o no; si hay una excepción, el método 1 finaliza inmediatamente. Esta verificación se realiza implícitamente después de llamar a cada (!) método Java. - ¡Guau! - Exactamente. - En la columna de la derecha en el método principal , escribí lo que sucede cuando el bloque try-catch detecta una excepción . Si no hubo excepción, el código continúa ejecutándose tal como se planeó. Si hubo una excepción del tipo especificado en catch , la manejamos. - ¿Y qué significan throw e instanceof ? - Mire la última línea a la izquierda y arroje nuevas RuntimeException(s). De esta manera creamos y lanzamos una excepción. Este es solo un ejemplo. No lo haremos hasta ahora. - Usando el comando « а instanceof B » en el bloque derecho comprobamos si el objeto a tiene el tipo B . Es decir, si el objeto almacenado en la excepción variable tiene el tipo RuntimeException . Es una expresión lógica. - Bueno, se está poniendo un poco más claro.6 Diego, tarea de captura de excepción
- ¡Mira aquí! El tío Diego trajo pocas tareas para atraparte. Te deseo suerte. Creo que lo necesitarás. je. - ¡Hola, amigo! Aquí hay algunas tareas interesantes de captura de excepciones.Tareas de captura | |
---|---|
1 | 1. Excepción al operar con números Captura la excepción que ocurre al ejecutar el código: int a = 42 / 0; Mostrar la excepción a la pantalla, especificando su tipo |
2 | 2. Excepción al operar con cadenas Captura la excepción que ocurre al ejecutar el código: String s = null; String m = s.toLowerCase(); Muestre la excepción a la pantalla, especificando su tipo. |
3 | 3. Excepción al operar con arreglos Captura la excepción que ocurre al ejecutar el código: int[] m = new int[2]; m[8] = 5; Muestre la excepción a la pantalla, especificando su tipo. |
4 | 4. Excepción al operar con colecciones de listas Captura la excepción que ocurre cuando ejecutas el código: ArrayList<String> list = new ArrayList<String>(); Cadena s = lista.get(18); Muestre la excepción a la pantalla, especificando su tipo. |
5 | 5. Excepción al operar con colecciones de mapas Captura la excepción que ocurre cuando ejecutas el código: HashMap<String, String> map = new HashMap<String, String>(null); map.put(nulo, nulo); mapa.remove(null); Muestre la excepción a la pantalla, especificando su tipo. |
7 Risha, Cómo funciona la captura múltiple
- Ahora, algunas conferencias más interesantes. Me gusta mucho enseñar. - Quiero contarte cómo funciona una captura múltiple . En realidad es muy simple: cuando ocurre una excepción en el bloque try , la ejecución del programa se transfiere al primer catch . - Si el tipo especificado entre paréntesis de la captura de bloque es el mismo que el tipo del objeto de excepción, entonces la ejecución del código comienza dentro de {}. De lo contrario vamos a la siguiente captura . Allí se repite la comprobación. - Si no hay más bloques catch , pero la excepción no ha sido capturada, se lanza hacia adelante y el método actual se interrumpe. - Veo. Se ejecutará ese catch, cuyo tipo coincida con el tipo de excepción. - Si claro. En realidad, es un poco más complicado: el punto es que las clases se pueden heredar unas de otras. Si la clase «Vaca» se hereda de la clase «Animal», el objeto de tipo «Vaca» puede almacenarse no solo en una variable de tipo «Vaca», sino también en una variable de tipo «Animal» . - ¿Así que lo que? - Dado que todas las excepciones se heredan de las clases Exception o RuntimeException (que también se hereda de Exception ), todas pueden capturarse con los comandos catch (Exception e) o catch (RuntimeException e) . - ¿Así que lo que? - Esto significa que,primero, puede capturar cualquier excepción usando el comando catch(Exception e) . En segundo lugar, el orden de los bloques catch es importante. Ejemplos: - ArithmeticException resultante de la división por 0 se captura en la segunda captura. - En el siguiente ejemplo, ArithmeticException se captura en la primera captura , porque las clases de todas las excepciones se heredan de Exception. Entonces, Exception atrapa cualquier excepción . - En el siguiente ejemplo, la excepción ArithmeticException no se detecta, sino que se envía al método de llamada. - Bueno, ahora está más claro. Estas excepciones no son tan fáciles. - Sólo lo parece. De hecho, es una de las cosas más simples en Java. - Dudo si estar complacido o molesto por eso...8 Diego, Múltiples tareas de captura de excepción
- ¡Hola, amigo! Ayer me emborraché y te compliqué demasiado las tareas, pero espero que no haya resentimientos de tu parte y los resuelvas todos. Es por tu propio bien. Aquí:Tareas | |
---|---|
1 | 1. Excepciones Hay un método que arroja dos excepciones heredadas de Exception y las otras dos heredadas de RuntimeException : NullPointerException , ArithmeticException , FileNotFoundException y URISyntaxException . Debe capturar NullPointerException y FileNotFoundException , pero no capturar ArithmeticException y URISyntaxException . ¿Cómo hacerlo? |
2 | 2. Atrapar excepciones Hay tres excepciones heredadas secuencialmente de Exception : class Exception1 extends Exception class Exception2 extends Exception1 class Exception3 extends Exception2 Hay un método, que se describe a continuación: public static void method1() throws Exception1, Exception2, Exception3 Escribe una captura bloque para capturar las tres Exception1 , Exception2 y Exception3 |
3 | 3. Captura de excepciones selectivas 1. Averigüe qué excepciones lanza el método BEAN.methodThrowExceptions . 2. El método processExceptions() debe llamar al método BEAN.methodThrowExceptions y manejar las excepciones: 2.1. si se produce una excepción FileSystemException , regístrela llamando al método BEAN.log y envíe 2.2. si ocurre una excepción CharConversionException o cualquier otra IOException , simplemente regístrela llamando al método BEAN.log 3. Agregue la clase/tipo de la excepción que está reenviando en 2.1. al procesoExcepciones()firma del método. 4. Maneje la excepción restante en el método main() y regístrela. Use try..catch Sugerencia: si capturó la excepción MyException , que no deseaba capturar, puede lanzarla usando el siguiente código: catch (MyException e) { throw e; } |
4 | 4. Captura de excepciones verificadas Maneja todas las excepciones verificadas en el método processExceptions() . Debe mostrar en la pantalla cada excepción verificada que haya ocurrido. Puede usar solo un intento de bloque . |
5 | 5. Captura de excepciones no verificadas Maneja todas las excepciones no verificadas en el método processExceptions() . Debe mostrar en la pantalla un seguimiento de la pila de cada excepción ocurrida utilizando el método printStack() . Puede usar solo un intento de bloque . |
9 Profesor, Conferencia sobre excepciones
- Hoy tenemos un tema súper interesante: las excepciones. En ese momento, cuando los jóvenes científicos y programadores estaban profundamente entusiasmados con este tema... - Lo siento, debo ir al laboratorio. Aquí están las notas de la conferencia. Creo que lo descubrirás por ti mismo. Aquí: Excepciones de Java (documentación de Oracle) Manejo de excepciones en Java (punto T de Java) Java - Manejo de excepciones (punto de tutoriales) Manejo básico de excepciones de Java10 julio
- Amigo, ¿qué te parece la lección de hoy? ¿Tu cerebro de positrones aún no ha funcionado? Las tareas de Diego son suficientes para desgastar a cualquiera. Tomemos un momento de cerveza y relájese. ¿Sigues de pie?11 capitanas ardillas
- ¡Hola, soldado! - ¡Buenos días señor! - Tengo una noticia increíble para ti. Aquí tienes una comprobación rápida para reforzar tus habilidades. Hágalo todos los días y mejorará sus habilidades muy rápido. Las tareas están especialmente diseñadas para hacer en Intellij IDEA.Tareas adicionales para hacer en Intellij Idea | |
---|---|
1 | 1. División por cero Cree un método public static void divisionByZero() , donde necesita dividir cualquier número por cero y mostrar en la pantalla el resultado de la división. Envuelva la llamada al método divisionByZero() en un try..catch . Muestre en la pantalla el seguimiento de la pila de excepciones mediante el métodoException.printStackTrace () . |
2 | 2. Cuenta regresiva de 10 a 0 Escriba un bucle para la cuenta regresiva de 10 a 0. Use Thread.sleep(100) para hacer un retraso; Envuelva la llamada de sueño en un try..catch . |
3 | 3. Envuelva un método en un try..catch Lea números desde el teclado. Escriba un código para leer números del teclado en un método separado readData() . Envuelva todo el cuerpo de este método (el código completo dentro del método readData() , excepto la declaración de la lista donde se almacenarán los números) en un try..catch . Si el usuario ingresa algún texto en lugar de ingresar un número, el método tiene que detectar la excepción y mostrar en la pantalla todos los números ingresados antes. Mostrar números en la pantalla. Cada número debe estar en una nueva línea. El orden de los números debe ser tal como estaba en la entrada. |
4 | 4. Convertidor de fecha Leer desde el teclado una fecha en formato «08/18/2013» Mostrar en pantalla esa fecha en forma de «AGO 18, 2013». Usa los objetos Date y SimpleDateFormat . |
5 | 5. Vocales y consonantes Escriba un programa que lea líneas desde el teclado. El programa debe mostrar en la pantalla dos cadenas: 1) la primera cadena debe contener vocales 2) la segunda cadena debe contener consonantes y signos de puntuación del texto ingresado. Separe los caracteres por espacios. Entrada de ejemplo: Stop look listen Salida de ejemplo: oooie stplklstn |
6 | 6. El cuento de Caperucita Roja 1. Hay cinco clases: Caperucita Roja, abuela, empanada, leñador, lobo. 2. Cada clase tiene dos campos de tipo ArrayList : muertos y comidos. 3. Los objetos necesarios ya están creados (capucha, abuela,...). 4. Crea la relación correcta (quién comió y mató a quién) para obtener la lógica de «Caperucita Roja». |
7 | 7. Mover modificaciones estáticas Mueva modificadores estáticos para que el código compile. |
8 | 8. Lista de arreglos de números Crea una lista cuyos elementos sean arreglos de números. Agregue a la lista cinco matrices de objetos con una longitud de 5, 2, 4, 7, 0, respectivamente. Rellene matrices con cualquier dato y muéstrelos en la pantalla. |
9 | 9. Diez gatos Cree una clase Gato con un campo Nombre de cadena . Cree un diccionario Map<String, Cat> , agregue 10 gatos en el modelo «Name» - «Cat». Obtenga del Mapa un Conjunto de nombres y visualice el conjunto en la pantalla. |
tareas de bonificación | |
---|---|
1 | 1. El programa no se compila ni ejecuta. Arreglalo. Tarea: El programa debe leer del teclado dos nombres de archivo y copiar el primer archivo en la ubicación especificada por el segundo nombre. |
2 | 2. Agregar nueva funcionalidad al programa. Tarea anterior: el programa debe leer del teclado dos nombres de archivo y copiar el primer archivo en la ubicación especificada por el segundo nombre. Nueva tarea: el programa debe leer del teclado dos nombres de archivo y copiar el primer archivo en la ubicación especificada por el segundo nombre. Si el archivo (que se va a copiar) con el nombre especificado no existe, el programa debe mostrar en pantalla el mensaje «El archivo no existe» y tratar de leer el nombre del archivo desde la consola una vez más antes de leer el archivo. nombre del segundo archivo (destino). |
3 | 3. Algoritmo de aprendizaje y práctica. Lea desde el teclado la lista de palabras y números. Muestra en pantalla las palabras en orden ascendente y los números en orden descendente. Ejemplo de entrada: Cereza 1 Frijol 3 Manzana 2 0 Sandía Ejemplo de salida: Manzana 3 Frijol 2 Cereza 1 0 Sandía |
GO TO FULL VERSION