Java Intermedio 01
Java Intermedio 01
Intermedio
1
Contenido
●
●
●
●
●
3
Exceptions
Como por ejemplo cuando se hace una división entre cero, cuando un objeto
es “null” y no puede serlo, cuando no se abre correctamente un fichero, etc.
Cuando se produce la máquina virtual de Java crea un objeto de la clase
Exception.
Cuando en Java se produce una excepción se crear un objeto de una
determina clase (dependiendo del tipo de error que se haya producido), que
mantendrá la información sobre el error producido y nos proporcionará los
métodos necesarios para obtener dicha información.
Estas clases tienen como clase padre la clase Throwable, por tanto se
mantiene una jerarquía en las excepciones.
Throwable
● Error
● VirtualMachineError
● OutofMemoryError
● InternalError
● UnknownError
● AssertionError
● StackOverflowError
● NullPointerException
● ArrayIndexOutOfBound
● IllegalArgumentException
● IllegalStateException
La excepción verificada es aquella que se verifica en tiempo de compilación
llamada Excepción comprobada, si algún código dentro de un método lanza
una excepción marcada, entonces el método debe manejarla o debe
especificarse usando la sentencia reservada throws.
● IOException
● SQLException
● DataAccessException
● ClassNotFoundException
● InvocationTargetException
● MalformedURLException
Handling Exceptions
try...catch
try
try{
//esta linea lanza una excepcion.
}
try...catch
Catch
try...Catch
try...Catch
Bloque 1
try
//Bloque 1
try{
//Bloque 2
}catch(AritmeticException ae){
//Bloque 3
}catch(NullPointerException ne){
//Bloque 4
}
//Bloque 5
try...Catch
try...Catch
Bloque 1 Bloque 2
Finally
finally
//Bloque 1
try{
//Bloque 2
}catch(AritmeticException ae){
//Bloque 3
}finally{
//Bloque 4
}
//Bloque 5
5
thows
throws
Si un método es capaz de provocar una excepción que no maneja él mismo,
debería especificar este comportamiento, para que todos los métodos que lo
llamen puedan colocar protecciones frente a esa excepción.
La sentencia throws se utiliza para identificar la lista posible de excepciones
que un método puede lanzar.
Si un método lanza explícitamente una instancia de Exception o de sus
subclases, se debe declarar su tipo con la sentencia throws.
throws
Cuando se lanza una excepción:
● Se sale inmediatamente del bloque de código actual
● Si el bloque tiene asociada una cláusula catch adecuada para el tipo de la
excepción generada, se ejecuta el cuerpo de la cláusula catch.
● Si no, se sale del bloque (o método) dentro del cual se produjo la
excepción y se busca una cláusula catch apropiada.
● El proceso continúa hasta llegar al método main de la aplicación si ahí no
tampoco existe una cláusula catch adecuada, la máquina virtual Java
finaliza su ejecución con un mensaje de error.
throws
thow
throw
La sentencia throw se utiliza para lanzar explícitamente una excepción. En
primer lugar se debe obtener un descriptor de un objeto Throwable, bien
mediante un parámetro en una cláusula catch o, se puede crear utilizando el
operador new.
El flujo de la ejecución se detiene inmediatamente después de la sentencia
throw, y nunca se llega a la sentencia siguiente. Se inspecciona el bloque
try que la engloba más cercano, para ver si tiene la cláusula catch cuyo tipo
coincide con el del objeto o instancia Thorwable. Si se encuentra, el control se
transfiere a ese sentencia. Si no, se inspecciona el siguiente bloque try que la
engloba, y así sucesivamente.
throw
Multithreading
Los sistemas operativos son multitarea, lo que les permite ejecutar diversos
procesos de forma simultánea. Esta capacidad ha permitido el hecho de
optimizar la programación hacia modelos multiproceso o multihilo.
Típicamente cuando desarrollo una rutina esperamos que esta sea ejecuta de
forma secuencial una tras otra, pero que sí necesitamos que las tareas se
ejecuten de forma paralela?
Tampoco puede que sea buena idea emplear el multihilo para tareas
excesivamente complejas pues provocará excesiva sobrecarga y sea más un
problema que una ventaja.
se considera que una aplicación es candidata a ser programa en multihilo
cuando cumple las siguientes premisas:
● Se requiere realizar diversas tareas claramente diferenciadas.
● El resultado de las tareas que se ejecuten en diferentes hilos no debe
depender del resultado de otras tareas, ya que, de lo contrario, las tareas
se estarían esperando unas a otras y al final el rendimiento sería menor
del esperado.
● Se prevea que pueda haber tareas retenidas o bloqueadas por estar
esperando a una lectura de disco, por ejemplo. En estos casos, esta tarea
se bloquea y otra entra en acción, aprovechando de esta forma la
programación multihilo.
New
Runnable
Non Runnable
(Blocked)
Runnning
Terminated
Thread Runnable
La clase Thread define varios métodos que ayudan a administrar hilos:
Metodo Descripción
Thread Runnable
Thread
}
run
start()
currentThread()
getId() will return the unique identifier of current thread which is a positive
long value.
getName()
sleep()
9
Asignar prioridades a los
hilos
Threads Priority
Cada hilo tiene asociada una configuración de prioridad. La prioridad de un hilo
determina, en parte, cuánto tiempo de CPU recibe un hilo en relación con los
otros hilos activos.
https://javadesdecero.es/avanzado/prioridad-de-hilos/
9
¿Cómo saber si un hilo ha
finalizado?
Threads
El hilo proporciona un medio por el cual saber el estado de un hilo. Java
multi-threading proporciona dos formas de encontrar eso:
● isAlive()
● join()
isAlive()
El metodo isAlive () prueba si este hilo está vivo. Un hilo está vivo si se ha
iniciado y aún no ha muerto.
Hay un período de transición desde el momento en que se ejecuta un
subproceso hasta cuando no se ejecuta un subproceso. Si queremos saber si se
ha llamado al método de inicio del hilo o si se ha terminado el hilo, debemos
usar el método isAlive(). Este método se utiliza para saber si un subproceso
se ha iniciado realmente y aún no ha terminado.
join()
El método se usa para esperar a que termine un hilo se llama join(). Este
método espera hasta que el hilo en el que se llama termina. Las formas
adicionales de join() le permiten especificar la cantidad máxima de tiempo
que desea esperar a que termine el subproceso especificado.
Runnable
¿Preguntas?