Lanzar en Java
Escribe tu la parada con throw. Abre Signal.java y lanza IllegalArgumentException con el mensaje empty antes de cualquier impresion de water. Compila con javac Signal.java y ejecuta java Signal. El programa se detiene en la linea throw; no se imprime water. Una segunda demo pone cups en 0 para que un if entre y lance. Una tercera pone cups en 3 para que se omita el if y la pantalla imprima water. Deja la lectura de archivos para la pagina siguiente.
Tu escribes la parada
Paginas anteriores mostraron una parada porque una linea rompio una regla — un indice malo del array lanzo ArrayIndexOutOfBoundsException. Esta pagina es la otra direccion. Tu eliges el tipo de excepcion y escribes throw para que la parada sea a proposito. Abre un archivo de ensenanza llamado Signal.java. Manten el nombre de clase publica Signal para que coincida con el archivo. Borra demos catch sobrantes de Guard, paradas de array de Alarm y cualquier Scanner o nextLine. El programa no debe esperar teclado. Esta pagina no necesita linea import.
Dentro de main, lanza antes de cualquier impresion tranquila de exito:
throw new IllegalArgumentException("empty");
Luego conserva una impresion que no debe ejecutarse cuando dispare el throw:
System.out.println("water");
Las palabras entre comillas son el mensaje. El nombre del tipo es IllegalArgumentException. No divides por cero ni lees slots[5]. La parada existe porque escribiste throw.
public class Signal {
public static void main(String[] args) {
throw new IllegalArgumentException("empty");
// water would not run after throw
}
}
Desde la carpeta con Signal.java, ejecuta javac Signal.java. Cuando coincidan parentesis, llaves y punto y coma, javac no escribe linea propia. Luego java Signal — no java Signal.java. Quita el final .java del comando de ejecucion.
La ejecucion se detiene en la linea throw. La terminal nombra IllegalArgumentException y muestra el mensaje empty. Una impresion de water despues de ese throw no corre, porque el programa ya se detuvo. Si conservas un System.out.println("water"); inalcanzable despues del throw en el mismo main, algunos compiladores avisan de codigo inalcanzable; la idea didactica sigue igual: tras throw, las lineas normales de ese camino no corren. Prefiere el archivo de throw desnudo sin impresion muerta si javac se queja — la parada es la leccion.
Si la terminal espera teclado, aun hay una llamada nextLine de un ejercicio viejo en un archivo. Borrala. Si ves blocked luego after, sigues ejecutando un archivo catch de Guard — cambia a java Signal. Si ves ArrayIndexOutOfBoundsException desde slots[5], un resto de Alarm sigue activo; sustituyelo por la linea throw de esta leccion.
Cero cups entra al if y lanza
Un segundo programa empieza de nuevo. Guarda cups como 0. Si cups es menor que 1, lanza la misma IllegalArgumentException con mensaje empty. Conserva una impresion de water despues del if.
public class Signal {
public static void main(String[] args) {
int cups = 0;
if (cups < 1) {
throw new IllegalArgumentException("empty");
}
System.out.println("water");
}
}
Compila con javac Signal.java, luego ejecuta java Signal. Cero es menor que uno, asi que se entra al if y corre throw. La pantalla muestra la misma parada: IllegalArgumentException y empty. La palabra water no se imprime. Nada en esta pagina captura la parada, el programa termina ahi. Es intencional — la pagina anterior practico catch; esta pagina practica escribir el throw.
Recorre las llaves una vez. La linea throw esta dentro del bloque if. La impresion water esta fuera del if. Cuando corre throw, el programa ya se detuvo, asi que water nunca se alcanza. La sangria y las llaves ponen el throw dentro de la comprobacion.
Tres cups omiten throw e imprimen water
Un tercer programa tambien empieza de nuevo. Pon cups en 3. Conserva el mismo if, el mismo throw y la misma impresion water.
public class Signal {
public static void main(String[] args) {
int cups = 3;
if (cups < 1) {
throw new IllegalArgumentException("empty");
}
System.out.println("water");
}
}
Compila y ejecuta otra vez con javac Signal.java y java Signal. Tres no es menor que uno, asi que no se entra al if. El throw nunca corre. La pantalla imprime water. No hay parada. Ese contraste es el punto de control: el throw solo dispara cuando tu condicion dice que el valor no sirve.
No inventes catch alrededor de estos archivos de ensenanza en esta pagina. Ya practicaste catch en Guard. Aqui debes ver la parada que escribiste y el camino que omite el throw. Tampoco sustituyas IllegalArgumentException por ArrayIndexOutOfBoundsException para cups vacias — ese nombre era de un indice malo, no de una comprobacion de valor que tu autorizaste con throw.
El nombre que escribiste
El tipo que lanzaste es IllegalArgumentException, no ArrayIndexOutOfBoundsException ni la palabra empty sola como tipo. El mensaje empty es lo que elegiste mostrar junto al nombre. Si capturas esta parada despues, la clausula catch debe nombrar IllegalArgumentException. Un catch de NullPointerException no la manejaria. Esa practica de catch no es obligatoria hoy en estos archivos Signal.
IllegalArgumentException es una excepcion de tiempo de ejecucion en el uso habitual del principiante, asi que estas demos pequenas de main no necesitan clausula throws en main. Quédate con este tipo y mensaje claros. No necesitas un catalogo de cada clase lanzable antes de que la pagina siguiente abra un archivo.
Comparado con catch en Guard
En la pagina try-catch, java Guard manejo un indice malo y continuo hasta after. En esta pagina, java Signal provoca una parada a proposito y no la captura. La historia del array es pasado. Conserva archivos Guard solo como demos viejas si siguen cerca; ejecuta java Signal para las demos throw para que la pantalla coincida con esta leccion.
Lo que esta pagina deja para files
Esta pagina solo muestra que provocas una parada con throw. La pagina siguiente empieza a leer un archivo. Quédate escribiendo la parada y omitiendola cuando cups sirve. No abras archivos como requisito en estas demos Signal todavia.
Antes de files
Puedes lanzar IllegalArgumentException("empty") y ver la ejecucion detenerse antes de water. Con cups en 0, entra el if y ocurre la misma parada. Con cups en 3, throw no corre y la pantalla imprime water. Compila Signal.java y ejecuta java Signal para cada demo guardada por turno. El nombre de esta parada es IllegalArgumentException. La pagina siguiente es leer un archivo.
Conserva el throw desnudo para una parada clara que escribiste. Conserva el par cups para una condicion que puede omitir el throw. Mantén la lectura de archivos fuera de esta pagina. Esos tres habitos son el control antes de seguir. Cuando water solo aparece en la ejecucion cups-en-tres de java Signal, throwing cumplio su trabajo en esta leccion y estas listo para el siguiente tema sobre archivos.
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior