Class java.lang.IndexOutOfBoundsException
By : Alma Esqueda
Esta
es lanzada para indicar que un índice de algún tipo (por ejemplo, a una matriz,
una cadena, o para un vector) está fuera de rango.
FileNotFoundException
By : Alma Esqueda
Excepción que se produce cuando se produce un
error al intentar tener acceso a un archivo que no existe en el disco.
EOFException
By : Alma Esqueda
Es
una checked exception, por lo cual, en caso de ser declarada tiene que ser
manejada dentro del método. Existen dos modos de manejar una excepción:
Arrojándola o tratándola. Cuando arrojas una excepción (usando la palabra
reservada throws) quiere decir que en el método donde la arrojas no es
necesario darle un tratamiento en específico, sin embargo, la excepción podrá
ser arrojada hacia algún trozo de código que mande llamar a este método.
IOException
By : Alma Esqueda
Significa
que se ha producido un error en la entrada/salida. Es obligatorio tratar la excepción, ya sea en la cabeza del método con
"throws IOException" o con un bloque try/catch.
java.io.IOException
es una clase java que tiene por objetivo señalar que ha ocurrido algún tipo
error de entrada o salida de datos, java crea un objeto de esta clase que
representa ese error.
Así, los métodos de las clases que manejan Streams de entrada o salida lanzan estas excepciones (objetos de la clase IOException); por ejemplo, aquellos de las clases InputStream, InputStreamReader, OutputStream o OutputStreamWriter.
Como ocurre con otras clases de excepciones, cuando se crea y lanza un objeto de la clase IOException este debe ser capturado en un bloque try - catch o ser traspasado o relanzado al método que realizó la llamada al método que genera la excepción (sentencia throws). Sin embargo, una vez generado el objeto Exception, este debe ser capturado en alguno de los métodos, ya que de no ser así hará que el programa termine, arrojando un mensaje de error.
Cuando crees algún programa que utilize algunas de estas clases de entrada/salida (io) y sus métodos, deberás importar también la clase IOException, agregando la siguiente línea en el encabezado de tu programa
NoRouteToHostException
By : Alma Esqueda
Las señales que se produjo un error al
intentar conectar un conector a una dirección remota y el
puerto. Normalmente, el host remoto no se puede alcanzar debido a un
cortafuegos intermedio, o si un enrutador intermedio es hacia abajo.
Class java.net.ConnectException
By : Alma Esqueda
Las señales
que se produjo un error al intentar conectar un socket a una dirección remota y
el puerto. Normalmente, la conexión fue rechazada de forma remota.
BindException
By : Alma Esqueda
Las
señales que se produjo un error al intentar enlazar un socket a una dirección y
el puerto local. Por lo general, el puerto está en uso, o la dirección local solicitada
no puede ser asignada.
Esta
excepción se lanza para indicar que se produjo un error cuando una aplicación
intenta enlazar un socket a una dirección y el puerto local. La principal
causa de esta excepción es que, o bien el puerto ya está en uso, o la dirección
solicitada no se puede asignar a la aplicación de llamada.
El BindException clase amplía
la SocketException clase, que se lanza para indicar un error al crear
o acceder a un socket.Además, el SocketException clase extiende
la IOException clase, que se utiliza para indicar que se ha producido
una excepción de E/S.
La
estructura de las BindException
Constructores
*BindException
()
Crea una
instancia de la BindException clase,
estableciendo nula como su mensaje.
*BindException
(String s)
Crea una
instancia de la BindException clase, utilizando la cadena
especificada como mensaje. El argumento de cadena indica el nombre de la
clase que arrojó el error.
El BindException en Java
Como ya
explicamos, el BindException se produce cuando la aplicación Java
intenta enlazar un socket a una dirección y el puerto local, pero que están
siendo utilizados por otra aplicación. Eche un vistazo al siguiente
ejemplo:
BindExceptionExample.java:
01
|
importación java.io.IOException;
|
02
|
importación java.net.ServerSocket;
|
03
|
|
04
|
pública clase BindExceptionExample {
|
05
|
|
06
|
privada última estática int PORT
= 15000;
|
07
|
|
08
|
públicas estáticas void main
(String [] args) lanza IOException {
|
09
|
ServerSocket _socket = nueva ServerSocket (PORT);
|
10
|
|
11
|
// La siguiente declaración lanza una BindException.
|
12
|
ServerSocket _socket_ = nueva ServerSocket (PORT);
|
13
|
|
14
|
_socket.close ();
|
15
|
_socket_.close ();
|
16
|
}
|
17
|
}
|
En este
ejemplo queremos crear dos instancias del ServerSocket clase. La
primera instancia se crea correctamente y se une el puerto
especificado. Cuando el segundo ejemplo está a punto de ser creado, usando
el mismo puerto, entonces, un BindException se lanza.
Una
muestra de la ejecución se muestra a continuación:
1
|
Excepción en
el hilo "principal" java.net.BindException:
Dirección ya en uso
|
2
|
en
java.net.PlainSocketImpl.socketBind (Método Nativo)
|
3
|
en java.net.AbstractPlainSocketImpl.bind
(AbstractPlainSocketImpl.java:382)
|
4
|
en java.net.ServerSocket.bind (ServerSocket.java:375)
|
5
|
en
java.net.ServerSocket. (ServerSocket.java:237)
|
6
|
en
java.net.ServerSocket. (ServerSocket.java:128)
|
7
|
en main.java.BindExceptionExample.main (BindExceptionExample.java:14)
|
La forma
más sencilla de evitar esta excepción es usar otro puerto y verificar
que el puerto no está en uso por otra aplicación.
SocketException
By : Alma Esqueda
Lanzado para indicar que hay un error al crear
o acceder a un Socket* .
* Los sockets son un mecanismo que nos permite
establecer un enlace entre dos programas que se ejecutan independientes el uno
del otro (generalmente un programa cliente y un programa servidor) Java por
medio de la librería java.net nos provee dos clases: Socket para
implementar la conexión desde el lado del cliente y ServerSocket que
nos permitirá manipular la conexión desde el lado del servidor. Cabe resaltar
que tanto el cliente como el servidor no necesariamente deben estar
implementados en Java, solo deben conocer sus direcciones IP y el puerto por el
cual se comunicarán.
NullPointerException
By : Alma Esqueda
Las excepciones de tipo NullPointer son
las causas de excepción en tiempo de ejecución más comunes.
Todos los valores en Java,
excepto las primitivas, son referencias a objetos y todos
tienen un valor por defecto, el valor null, que indica que el objeto no tiene
asignado ningún valor. A un objeto con valor null, no inicializado, que no
referencia ningún objeto, no se le puede aplicar ningún método, siendo el
resultado el lanzamiento de una excepción de tipo NullPointerException
Una excepción de tipo NullPointerException lleva
asociada la información de la línea de código donde se produjo el error. El
mecanismo para detectar y corregir el error es directamente ir a esta línea de
código y averiguar cuál de los objetos involucrados en la operación es el que
no ha sido inicializado. Una vez detectado, será necesario inicializar el valor
del objeto, pero siempre teniendo cuidado de no hacerlo para simplemente eliminar
el error, sino que se le debe asignar un valor acorde con la lógica propia del
programa.
public class ValidarNull {
public static void main(String[] args){
String
cadenaPrueba = null;
try{
//Validamos
la cadena nula evitando la excepciòn
if ("".equals(cadenaPrueba))
{
System.out.println("Hola");
}else{
System.out.println("Adiós");
}
}catch(NullPointerException
ex){
System.out.println("Una
fea excepción: "+ex);
}
}
}
Herencia
By : Alma Esqueda
La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase, que luego se aplican a los atributos y métodos heredados.
Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas clases tiende a proteger las datos miembro usando la encapsulación).
Jerarquía de clase
La relación primaria-secundaria entre clases puede representarse desde un punto de vista jerárquico, denominado vista de clases en árbol. La vista en árbol comienza con una clase general llamada superclase (a la que algunas veces se hace referencia como clase primaria, clase padre,clase principal, o clase madre; existen muchas metáforas genealógicas). Las clases derivadas (clase secundaria o subclase) se vuelven cada vez más especializadas a medida que van descendiendo el árbol. Por lo tanto, se suele hacer referencia a la relación que une a una clase secundaria con una clase primaria mediante la frase "es una" x o y.
Redefinición de métodos en clases derivadas.
By : Alma Esqueda
Re-definición
de las clases derivadas: El lenguaje java permite re-definir miembros de la
clase base en las clases derivadas, pero el compilador emite una advertencia
cuando detecta una re-definición. Una advertencia (warning) es un mensaje del
compilador acerca de un posible problema. Sin embargo, en este caso sí se
genera código ejecutable (a diferencia del mensaje de error). Re-definición de
campos.
Constructores y destructores en clases derivadas.
By : Alma Esqueda
Constructores en clases derivadas:
Al instanciar objetos de clases derivadas se inicia una cadena de invocaciones
a constructores en las cuales el constructor de la clase derivada, antes de
realizar sus propias tareas, invoca (ya sea implícita o explícitamente) al
constructor de su clase base. Similarmente, si la clase base fue derivada de
otra clase, el constructor de la clase base debe invocar al constructor de la
clase ubicada en el siguiente nivel superior de la jerarquía, y así
sucesivamente. El último constructor invocado en la cadena es el constructor de
la clase Object, cuyo cuerpo se ejecuta primero. El cuerpo del constructor de
la clase derivada se ejecuta al final. El constructor de cada clase base
inicializa las variables de instancia que el objeto de la clase derivada
hereda.
Destructores en clases derivadas:
Cuando remueve de la memoria un objeto de una clase derivada, el recolector de
basura invoca al destructor del objeto. Esto inicia una cadena de invocaciones
a destructores, en donde el destructor de la clase derivada y los destructores
de las clases bases directas e indirectas se ejecutan en orden inverso al que
se ejecutaron los constructores, esto es, primero se ejecuta el destructor de
la clase derivada y al final se ejecuta el destructor de la clase base ubicada
en el nivel superior de la jerarquía. La ejecución de los destructores debe liberar
todos los recursos que el objeto adquirió, antes de que el recolector de basura
reclame la memoria de ese objeto. Cuando el recolector de basura invoca al
destructor de un objeto de una clase derivada, ese destructor realiza su tarea
y después invoca al destructor de la clase base.
Referencia al objeto de la clase base.
By : Alma Esqueda
La
funcionalidad de una clase existente se puede extender al crear una nueva clase
que se deriva de ella. La clase derivada hereda las propiedades de la clase base
y es posible agregar o reemplazar métodos y propiedades según sea necesario.
En C#, el operador: que equivale a extends e implements en Java, define la herencia e implementación de interfaces. La clase base siempre debe estar en el extremo izquierdo en la declaración de clase.
Como Java, C# no admite herencia múltiple, lo que significa que las clases no pueden heredar más de una clase. Sin embargo, se pueden utilizar interfaces para ese propósito, de la misma manera que en Java
En C#, el operador: que equivale a extends e implements en Java, define la herencia e implementación de interfaces. La clase base siempre debe estar en el extremo izquierdo en la declaración de clase.
Como Java, C# no admite herencia múltiple, lo que significa que las clases no pueden heredar más de una clase. Sin embargo, se pueden utilizar interfaces para ese propósito, de la misma manera que en Java
Reutilización de miembros heredados.
By : Alma Esqueda
Para que el código existente se pueda reutilizar, debe definir alguna forma de comunicación o interfaz. Esto se puede dar por llamadas a una subrutina, a un objeto, o a una clase.
En concreto:
1. Se puede declarar un nuevo atributo con el mismo identificador que uno heredado, quedando este atributo oculto. Esta técnica no es recomendable.
2. Se puede declarar un nuevo método de instancia con la misma cabecera que el de la clase ascendiente, lo que supone su sobreescritura. Por lo tanto, la sobreescritura o redefinición consiste en que métodos adicionales declarados en la clase descendiente con el mismo nombre, tipo de dato devuelto y número y tipo de parámetros sustituyen a los heredados.
3. Se puede declarar un nuevo método de clase con la misma cabecera que el de la clase ascendiente, lo que hace que éste quede oculto. Por lo tanto, los métodos de clase o estáticos (declarados como static) no pueden ser redefinidos.
4. Un método declarado con el modificador final tampoco puede ser redefinido por una clase derivada.
5. Se puede declarar un constructor de la subclase que llame al de la superclase de forma implícita o de mediante la palabra reservada super.
6. En general puede accederse a los métodos de la clase ascendiente que han sido redefinidos empleando la palabra reservada super delante del identificador del método. Este mecanismo sólo permite acceder al metodo perteneciente a la clase en el nivel inmediatamente superior de la jerarquía de clases.
"La re-utilización de software reduce el tiempo de desarrollo de los programas"
Los
diseñadores que trabajan en proyectos de software a gran escala en la
industria, las personas experimentadas con esos proyectos dicen que la
re-utilización efectiva del software mejora el proceso de desarrollo del mismo. La
programación orientada a objetos facilita la re-utilización de software, con lo
que se obtiene una potencial reducción en el tiempo de desarrollo.
La
disponibilidad de bibliotecas de clases extensas y útiles produce los máximos beneficios
de la re-utilización de software a través de la herencia. Los diseñadores de
aplicaciones crean sus aplicaciones con estas bibliotecas, y los diseñadores de
bibliotecas obtienen su recompensa al incluir sus bibliotecas con las
aplicaciones. Las bibliotecas de clases estándar de Java que se incluyen con
Java SE 6 tienden a ser de propósito general.
Así
como los diseñadores de sistemas no orientados a objetos deben evitar la
proliferación de métodos, los diseñadores de sistemas orientados a objetos
deben evitar la proliferación de clases. Dicha proliferación crea problemas administrativos
y puede obstaculizar la re-utilización de software, ya que en una biblioteca de
clases enorme es difícil para un cliente localizar las clases más apropiadas.
La alternativa es crear menos clases que proporcionen una funcionalidad más
substancial, pero dichas clases podrían volverse complejas.
Clasificación: herencia simple, herencia múltiple.
By : Alma Esqueda
La
herencia se puede clasificar de dos formas:
1. Herencia simple:
La herencia simple consiste en cuando una clase, hereda a una clase hijo, y a solo una le hereda sus atributos, es igual al concepto general de herencia, con la limitante de solo poder heredar de una clase padre a una clase hijo, y solo a una clase hijo
Un ejemplo de herencia simple en Java es la siguiente:
Public class animal{
Public String ojos;
Public String color;
Public int patas;
Public void patas(){
. . .
}
}
Public class perro extends animal{ /*la clase perro hereda atributos y métodos de la clase animal*/
System.out.println(“Dame el color del animal”+ color);//Hereda la variable color de la clase animal
}
2. Herencia múltiple:
Consiste en la utilización de las propiedades de una clase a varias clases mas, lo que significa que en esta propiedad una sola clase padre puede heredarle atributos, u objetos de esta a varias clases hijo sin ninguna limitación entre ellas.
Consiste en la utilización de las propiedades de una clase a varias clases mas, lo que significa que en esta propiedad una sola clase padre puede heredarle atributos, u objetos de esta a varias clases hijo sin ninguna limitación entre ellas.
Nota: Java
no soporta la herencia múltiple.
Definición: clase base, clase derivada.
By : Alma Esqueda
Definición de herencia: Es
una forma de reutilización de software en la que se crea una nueva clase
absorbiendo los miembros de una clase existente, y se mejoran con nuevas
capacidades, o con modificaciones en las capacidades ya existentes. Con la
herencia, los programadores ahorran tiempo durante el desarrollo, al reutilizar
software probado y depurado de alta calidad. Esto también aumenta la
probabilidad de que un sistema se implemente con efectividad.
Clase base: Una clase base es
aquella que no dependen ninguno de sus atributos u objetos de la clase de alguna
otra clase, se podría decir que en términos de herencia, sería la clase padre,
la clase que se mantiene fija, en el aspecto de herencia. Es también por así
llamarlo la clase principal de un programa, sería la clase primaria sin incluir
la clase main en donde se corre todo el programa en sí.
Clase derivada: son
clases que dependen de las clases bases, ya que algunos de sus métodos son
también heredados, y muchas veces, el compilador arrojara malos resultados, ya
que al ser dependientes estas clases, a veces podrán generar errores lógicos.
He aquí un ejemplo de lo que serian las clases bases y clases derivadas, y de cómo se demuestra la dependencia de la derivada con la clase base:
public abstract class Figura {
protected int x;
protected int y;
public Figura(int x, int y) {
this.x=x;
this.y=y;
}
public abstract double area();
}
class Rectangulo extends Figura{
protected double ancho, alto;
public Rectangulo(int x, int y, double ancho, double alto){
super(x,y);
this.ancho=ancho;
this.alto=alto;
}
public double area(){
return ancho*alto;
}
}
En este ejemplo, se nota como la clase figura le da atributos a la clase rectangulo