Hace algún tiempo que no posteaba en este BLOGs por temas de tiempo, pero hoy regreso a postear sobre un tema interesante y es sobre diferentes algoritmos de búsqueda que son:
- Lineal
- Binario
I.- ALGORITMO LINEAL: Es bien común y consta que la iteración de un arreglo posición por posición hasta encontrar un TRUE en lo relacionado al comparativo que se va haciendo. Este algoritmo es bueno para distancias cortas pero por ejemplo si se requiere buscar una lista cargada con 40'000 registros y el ID buscado esta en la posición 39'999, uno por uno se mandara a comparar. Esto es un problema.
II.- ALGORTIMO BINARIO: Muchos no lo conocen pero este algoritmo sale a solucionar un el gran problema que el Algoritmo Lineal tiene con las listas grandes. Este Algoritmo tiene una lógica basada en simplemente decir:
NumeroAuxiliar = ( "Numero Inicial del Arreglo" + "Numero Final del Arreglo" ) / 2
Esto automáticamente enviara el INDICE al centro del Arreglo, de ahí se tiene que realizar una validación contra el número a buscar tanto por ‘IZQ como DER':
Aquí la matriz:
NumeroBuscar > NumeroAuxiliar
INCREMENTO: posicionArreglo ++
NumeroBuscar < NumeroAuxiliar
DECREMENTO: posicionArreglo --
NumeroBuscar = NumeroAuxiliar
"NUMERO ENCONTRADO"
Esto agiliza hasta en un 70% la velocidad del motor de búsqueda:
El ejemplo continuación muestra los dos Algoritmos de Búsqueda en dos modos de realizarlo, el 1er modo utilizando comandos de iteración como el típico FOR y el 2do modo: utilizando RECURSIVIDAD. Así los ejemplos estarán a GUSTO DE TODOS.
Para probar el ejemplo simplemente descomentar el método deseado y este se ejecutara e imprimirá un LOG detallado con los resultados:
iteacion.busquedaLineal( numero, arregloNumeros );
//iteacion.busquedaBinaria( numero, arregloNumeros );
//iteacion.busquedaLinealRecursiva( numero, arregloNumeros );
//iteacion.busquedaBinariaRecursiva( numero, arregloNumeros );
public static int[] arregloNumeros = { 111, 222, 333, 444, 555, 666, 777, 888 , 999 };
- Numero Buscar: 999
- Inicio: 0
- Fin: 8
------- ORDEN: [0] -------
ES MAYOR ...!!!
999 > 111
- Numero Buscar: 999
- Inicio: 1
- Fin: 8
------- ORDEN: [1] -------
ES MAYOR ...!!!
999 > 222
- Numero Buscar: 999
- Inicio: 2
- Fin: 8
------- ORDEN: [2] -------
ES MAYOR ...!!!
999 > 333
- Numero Buscar: 999
- Inicio: 3
- Fin: 8
------- ORDEN: [3] -------
ES MAYOR ...!!!
999 > 444
- Numero Buscar: 999
- Inicio: 4
- Fin: 8
------- ORDEN: [4] -------
ES MAYOR ...!!!
999 > 555
- Numero Buscar: 999
- Inicio: 5
- Fin: 8
------- ORDEN: [5] -------
ES MAYOR ...!!!
999 > 666
- Numero Buscar: 999
- Inicio: 6
- Fin: 8
------- ORDEN: [6] -------
ES MAYOR ...!!!
999 > 777
- Numero Buscar: 999
- Inicio: 7
- Fin: 8
------- ORDEN: [7] -------
ES MAYOR ...!!!
999 > 888
- Numero Buscar: 999
- Inicio: 8
- Fin: 8
------- ENCONTRADO: [8] -------
999 = 999
---------- TOTAL DE PASOS (BUSQUEDA LINEAL): [9] ----------
- Numero Buscar: 999
- Inicio: 0
- Fin: 8
- Suma: 8
------- ORDEN: [4] -------
ES MAYOR ...!!!
999 > 555
- Numero Buscar: 999
- Inicio: 5
- Fin: 8
- Suma: 13
------- ORDEN: [6] -------
ES MAYOR ...!!!
999 > 777
- Numero Buscar: 999
- Inicio: 7
- Fin: 8
- Suma: 15
------- ORDEN: [7] -------
ES MAYOR ...!!!
999 > 888
- Numero Buscar: 999
- Inicio: 8
- Fin: 8
- Suma: 16
------- ENCONTRADO: [8] -------
999 = 999
---------- TOTAL DE PASOS (BUSQUEDA BINARIA): [4] ----------
999 != 111
999 != 222
999 != 333
999 != 444
999 != 555
999 != 666
999 != 777
999 != 888
999 == 999
---------- TOTAL DE PASOS (BUSQUEDA LINEAL RECURSIVA): [9] ----------
------- ORDEN: [4] -------
ES MAYOR ...!!!
999 > 555
------- ORDEN: [6] -------
ES MAYOR ...!!!
999 > 777
------- ORDEN: [7] -------
ES MAYOR ...!!!
999 > 888
ENCONTRADO ...!!!
999 == 999
---------- TOTAL DE PASOS (BUSQUEDA BINARIA RECURSIVA): [4] ----------
Para descarga del demo completo pulsar AQUÍ.
Showing posts with label Java. Show all posts
Showing posts with label Java. Show all posts
Saturday, October 23, 2010
Saturday, April 17, 2010
MANEJO DE LA CLASE: java.lang.Math
Que tal, en esta oportunidad postearé sobre un clase muy importante en lo que respecta cálculos Matemáticos y con la que se puede realizar muchas operaciones y redondeos muy buenos. El ejemplo que mostraré esta basado en 'NOTAS' de las cuales se procederá con los cálculos respectivos:
El código es el siguiente:
/**
* @author Cesar Ricardo.
* @clase: CalculodeNotas.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class ManejoMath{
/**
* main
* @param argumentos
*/
public static void main( String... argumentos ){
ManejoMath calcular = new ManejoMath();
calcular.calcularNota();
}
/**
* calcularNota
*/
public void calcularNota(){
int notaMatematica = 10;
int notaLenguaje = -2;
double notaHistoria = 9.55;
double notaBiologia = 8.3;
//Valores Absolutos
imprimir( "----------- VALORES 'ABSOLUTOS' -----------" );
imprimir( "- MATEMATICA: [" + notaMatematica + "] nota 'ABSOLUTA': [" + this.getValorAbsoluto( notaMatematica ) + "]" );
imprimir( "- LENGUAJE: [" + notaLenguaje + "] nota 'ABSOLUTA': [" + this.getValorAbsoluto( notaLenguaje ) + "]" );
imprimir( "- HISTORIO: [" + notaHistoria + "] nota 'ABSOLUTA': [" + this.getValorAbsoluto( notaHistoria ) + "]" );
imprimir( "- BIOLOGIA: [" + notaBiologia + "] nota 'ABSOLUTA': [" + this.getValorAbsoluto( notaBiologia ) + "]" );
System.out.println( "" );
//Redondeo de cifras al siguiente numero entero
imprimir( "----------- VALORES 'REDONDEADOS' -----------" );
imprimir( "- MATEMATICA: [" + notaMatematica + "] nota 'REDONDEADO': [" + this.getRedondeo( notaMatematica ) + "]" );
imprimir( "- LENGUAJE: [" + notaLenguaje + "] nota 'REDONDEADO': [" + this.getRedondeo( notaLenguaje ) + "]" );
imprimir( "- HISTORIO: [" + notaHistoria + "] nota 'REDONDEADO': [" + this.getRedondeo( notaHistoria ) + "]" );
imprimir( "- BIOLOGIA: [" + notaBiologia + "] nota 'REDONDEADO': [" + this.getRedondeo( notaBiologia ) + "]" );
System.out.println( "" );
//El techo ("ceiling") de un número es el minimo entero mayor o igual
//al mismo numero. Un numero entero es su propio techo ("ceiling")
imprimir( "----------- VALORES 'CEILING' -----------" );
imprimir( "- MATEMATICA: El 'ceiling' de: [" + notaMatematica + "] es: [" + this.getMinimoEnteroMayorIgual( notaMatematica ) + "]" );
imprimir( "- LENGUAJE: El 'ceiling' de: [" + notaLenguaje + "] es: [" + this.getMinimoEnteroMayorIgual( notaLenguaje ) + "]" );
imprimir( "- HISTORIO: El 'ceiling' de: [" + notaHistoria + "] es: [" + this.getMinimoEnteroMayorIgual( notaHistoria ) + "]" );
imprimir( "- BIOLOGIA: El 'ceiling' de: [" + notaBiologia + "] es: [" + this.getMinimoEnteroMayorIgual( notaBiologia ) + "]" );
System.out.println( "" );
//El piso ("floor") de un numero es el entero mayor o igual al mismo numero.
//Un numero entero es su propio piso ("floor")
imprimir( "----------- VALORES 'FLOOR' -----------" );
imprimir( "- MATEMATICA: El 'floor' de: [" + notaMatematica + "] es: [" + this.getMayorIgual( notaMatematica ) + "]" );
imprimir( "- LENGUAJE: El 'floor' de: [" + notaLenguaje + "] es: [" + this.getMayorIgual( notaLenguaje ) + "]" );
imprimir( "- HISTORIO: El 'floor' de: [" + notaHistoria + "] es: [" + this.getMayorIgual( notaHistoria ) + "]" );
imprimir( "- BIOLOGIA: El 'floor' de: [" + notaBiologia + "] es: [" + this.getMayorIgual( notaBiologia ) + "]" );
System.out.println( "" );
//min() retorna el menor de los argumentos proporcionados.
imprimir( "----------- VALORES 'MINIMO' -----------" );
imprimir( "- El 'MINIMO' valor entre: [" + notaMatematica + ", " + notaLenguaje + "] es: [" + this.getValorMinimo( notaMatematica, notaLenguaje ) + "]" );
imprimir( "- El 'MINIMO' valor entre: [" + notaHistoria + ", " + notaBiologia + "] es: [" + this.getValorMinimo( notaHistoria, notaBiologia ) + "]" );
imprimir( "- El 'MINIMO' valor entre: [" + notaMatematica + ", " + notaHistoria + "] es: [" + this.getValorMinimo( notaMatematica, notaHistoria ) + "]" );
imprimir( "- El 'MINIMO' valor entre: [" + notaBiologia + ", " + notaLenguaje + "] es: [" + this.getValorMinimo( notaBiologia, notaLenguaje ) + "]" );
imprimir( "- El 'MINIMO' valor entre: [" + notaBiologia + ", " + notaBiologia + "] es: [" + this.getValorMinimo( notaBiologia, notaBiologia ) + "]" );
System.out.println( "" );
//max() retorna el mayor de los argumentos proporcionados
imprimir( "----------- VALORES 'MAXIMO' -----------" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaMatematica + ", " + notaLenguaje + "] es: [" + this.getValorMaximo( notaMatematica, notaLenguaje ) + "]" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaHistoria + ", " + notaBiologia + "] es: [" + this.getValorMaximo( notaHistoria, notaBiologia ) + "]" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaMatematica + ", " + notaHistoria + "] es: [" + this.getValorMaximo( notaMatematica, notaHistoria ) + "]" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaBiologia + ", " + notaLenguaje + "] es: [" + this.getValorMaximo( notaBiologia, notaLenguaje ) + "]" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaBiologia + ", " + notaBiologia + "] es: [" + this.getValorMaximo( notaBiologia, notaBiologia ) + "]" );
}
//Imprimir datos.
void imprimir( String cadena ){
System.out.println( cadena );
}
/**
* getValorAbsoluto
* @param notaParam
* @return Number
*/
public Number getValorAbsoluto( Number notaParam ){
Number objetoNumero = 0;
if( notaParam instanceof Double ){
objetoNumero = Math.abs( Double.parseDouble( notaParam.toString() ) );
}
else if( notaParam instanceof Float ){
objetoNumero = Math.abs( Float.parseFloat( notaParam.toString() ) );
}
else if( notaParam instanceof Integer ){
objetoNumero = Math.abs( Integer.parseInt( notaParam.toString() ) );
}
else if( notaParam instanceof Long ){
objetoNumero = Math.abs( Long.parseLong( notaParam.toString() ) );
}
return objetoNumero;
}
/**
* getRedondeo
* @param notaParam
* @return Number
*/
public Number getRedondeo( Number notaParam ){
Number objetoNumero = 0;
if( notaParam instanceof Double ){
objetoNumero = Math.round( Double.parseDouble( notaParam.toString() ) );
}
else if( notaParam instanceof Float ){
objetoNumero = Math.round( Float.parseFloat( notaParam.toString() ) );
}
else if( notaParam instanceof Integer ){
objetoNumero = Math.round( Integer.parseInt( notaParam.toString() ) );
}
return objetoNumero;
}
/**
* getMayorIgual
* @param notaParam
* @return Number
*/
public Number getMayorIgual( Number notaParam ){
Number objetoNumero = 0;
if( notaParam instanceof Double ){
objetoNumero = Math.ceil( Double.parseDouble( notaParam.toString() ) );
}
else if( notaParam instanceof Integer ){
objetoNumero = Math.ceil( Integer.parseInt( notaParam.toString() ) );
}
return objetoNumero;
}
/**
* getMinimoEnteroMayorIgual
* @param notaParam
* @return Number
*/
public Number getMinimoEnteroMayorIgual( Number notaParam ){
Number objetoNumero = 0;
if( notaParam instanceof Double ){
objetoNumero = Math.floor( Double.parseDouble( notaParam.toString() ) );
}
else if( notaParam instanceof Integer ){
objetoNumero = Math.floor( Integer.parseInt( notaParam.toString() ) );
}
return objetoNumero;
}
/**
* getValorMaximo
* @param notaParam_01
* @param notaParam_02
* @return Number
*/
public Number getValorMaximo( Number notaParam_01, Number notaParam_02 ){
Number objetoNumero = 0;
if( (notaParam_01 instanceof Integer) && (notaParam_02 instanceof Integer) ){
objetoNumero = Math.max( Integer.parseInt( notaParam_01 + "" ),
Integer.parseInt( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Double) && (notaParam_02 instanceof Double) ){
objetoNumero = Math.max( Double.parseDouble( notaParam_01 + "" ),
Double.parseDouble( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Double) && (notaParam_02 instanceof Integer) ){
objetoNumero = Math.max( Double.parseDouble( notaParam_01 + "" ),
Integer.parseInt( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Integer) && (notaParam_02 instanceof Double) ){
objetoNumero = Math.max( Integer.parseInt( notaParam_01 + "" ),
Double.parseDouble( notaParam_02 + "" ) );
}
return objetoNumero;
}
/**
* getValorMinimo
* @param notaParam_01
* @param notaParam_02
* @return Number
*/
public Number getValorMinimo( Object notaParam_01, Object notaParam_02 ){
Number objetoNumero = 0;
if( (notaParam_01 instanceof Integer) && (notaParam_02 instanceof Integer) ){
objetoNumero = Math.min( Integer.parseInt( notaParam_01 + "" ),
Integer.parseInt( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Double) && (notaParam_02 instanceof Double) ){
objetoNumero = Math.min( Double.parseDouble( notaParam_01 + "" ),
Double.parseDouble( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Double) && (notaParam_02 instanceof Integer) ){
objetoNumero = Math.min( Double.parseDouble( notaParam_01 + "" ),
Integer.parseInt( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Integer) && (notaParam_02 instanceof Double) ){
objetoNumero = Math.min( Integer.parseInt( notaParam_01 + "" ),
Double.parseDouble( notaParam_02 + "" ) );
}
return objetoNumero;
}
}
La salida en consola luego de la ejecución de dicha clase es la siguiente:
----------- VALORES 'ABSOLUTOS' -----------
- MATEMATICA: [10] nota 'ABSOLUTA': [10]
- LENGUAJE: [-2] nota 'ABSOLUTA': [2]
- HISTORIO: [9.55] nota 'ABSOLUTA': [9.55]
- BIOLOGIA: [8.3] nota 'ABSOLUTA': [8.3]
----------- VALORES 'REDONDEADOS' -----------
- MATEMATICA: [10] nota 'REDONDEADO': [10]
- LENGUAJE: [-2] nota 'REDONDEADO': [-2]
- HISTORIO: [9.55] nota 'REDONDEADO': [10]
- BIOLOGIA: [8.3] nota 'REDONDEADO': [8]
----------- VALORES 'CEILING' -----------
- MATEMATICA: El 'ceiling' de: [10] es: [10.0]
- LENGUAJE: El 'ceiling' de: [-2] es: [-2.0]
- HISTORIO: El 'ceiling' de: [9.55] es: [9.0]
- BIOLOGIA: El 'ceiling' de: [8.3] es: [8.0]
----------- VALORES 'FLOOR' -----------
- MATEMATICA: El 'floor' de: [10] es: [10.0]
- LENGUAJE: El 'floor' de: [-2] es: [-2.0]
- HISTORIO: El 'floor' de: [9.55] es: [10.0]
- BIOLOGIA: El 'floor' de: [8.3] es: [9.0]
----------- VALORES 'MINIMO' -----------
- El 'MINIMO' valor entre: [10, -2] es: [-2]
- El 'MINIMO' valor entre: [9.55, 8.3] es: [8.3]
- El 'MINIMO' valor entre: [10, 9.55] es: [9.55]
- El 'MINIMO' valor entre: [8.3, -2] es: [-2.0]
- El 'MINIMO' valor entre: [8.3, 8.3] es: [8.3]
----------- VALORES 'MAXIMO' -----------
- El 'MAXIMO' valor entre: [10, -2] es: [10]
- El 'MAXIMO' valor entre: [9.55, 8.3] es: [9.55]
- El 'MAXIMO' valor entre: [10, 9.55] es: [10.0]
- El 'MAXIMO' valor entre: [8.3, -2] es: [8.3]
- El 'MAXIMO' valor entre: [8.3, 8.3] es: [8.3]
El código es el siguiente:
/**
* @author Cesar Ricardo.
* @clase: CalculodeNotas.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class ManejoMath{
/**
* main
* @param argumentos
*/
public static void main( String... argumentos ){
ManejoMath calcular = new ManejoMath();
calcular.calcularNota();
}
/**
* calcularNota
*/
public void calcularNota(){
int notaMatematica = 10;
int notaLenguaje = -2;
double notaHistoria = 9.55;
double notaBiologia = 8.3;
//Valores Absolutos
imprimir( "----------- VALORES 'ABSOLUTOS' -----------" );
imprimir( "- MATEMATICA: [" + notaMatematica + "] nota 'ABSOLUTA': [" + this.getValorAbsoluto( notaMatematica ) + "]" );
imprimir( "- LENGUAJE: [" + notaLenguaje + "] nota 'ABSOLUTA': [" + this.getValorAbsoluto( notaLenguaje ) + "]" );
imprimir( "- HISTORIO: [" + notaHistoria + "] nota 'ABSOLUTA': [" + this.getValorAbsoluto( notaHistoria ) + "]" );
imprimir( "- BIOLOGIA: [" + notaBiologia + "] nota 'ABSOLUTA': [" + this.getValorAbsoluto( notaBiologia ) + "]" );
System.out.println( "" );
//Redondeo de cifras al siguiente numero entero
imprimir( "----------- VALORES 'REDONDEADOS' -----------" );
imprimir( "- MATEMATICA: [" + notaMatematica + "] nota 'REDONDEADO': [" + this.getRedondeo( notaMatematica ) + "]" );
imprimir( "- LENGUAJE: [" + notaLenguaje + "] nota 'REDONDEADO': [" + this.getRedondeo( notaLenguaje ) + "]" );
imprimir( "- HISTORIO: [" + notaHistoria + "] nota 'REDONDEADO': [" + this.getRedondeo( notaHistoria ) + "]" );
imprimir( "- BIOLOGIA: [" + notaBiologia + "] nota 'REDONDEADO': [" + this.getRedondeo( notaBiologia ) + "]" );
System.out.println( "" );
//El techo ("ceiling") de un número es el minimo entero mayor o igual
//al mismo numero. Un numero entero es su propio techo ("ceiling")
imprimir( "----------- VALORES 'CEILING' -----------" );
imprimir( "- MATEMATICA: El 'ceiling' de: [" + notaMatematica + "] es: [" + this.getMinimoEnteroMayorIgual( notaMatematica ) + "]" );
imprimir( "- LENGUAJE: El 'ceiling' de: [" + notaLenguaje + "] es: [" + this.getMinimoEnteroMayorIgual( notaLenguaje ) + "]" );
imprimir( "- HISTORIO: El 'ceiling' de: [" + notaHistoria + "] es: [" + this.getMinimoEnteroMayorIgual( notaHistoria ) + "]" );
imprimir( "- BIOLOGIA: El 'ceiling' de: [" + notaBiologia + "] es: [" + this.getMinimoEnteroMayorIgual( notaBiologia ) + "]" );
System.out.println( "" );
//El piso ("floor") de un numero es el entero mayor o igual al mismo numero.
//Un numero entero es su propio piso ("floor")
imprimir( "----------- VALORES 'FLOOR' -----------" );
imprimir( "- MATEMATICA: El 'floor' de: [" + notaMatematica + "] es: [" + this.getMayorIgual( notaMatematica ) + "]" );
imprimir( "- LENGUAJE: El 'floor' de: [" + notaLenguaje + "] es: [" + this.getMayorIgual( notaLenguaje ) + "]" );
imprimir( "- HISTORIO: El 'floor' de: [" + notaHistoria + "] es: [" + this.getMayorIgual( notaHistoria ) + "]" );
imprimir( "- BIOLOGIA: El 'floor' de: [" + notaBiologia + "] es: [" + this.getMayorIgual( notaBiologia ) + "]" );
System.out.println( "" );
//min() retorna el menor de los argumentos proporcionados.
imprimir( "----------- VALORES 'MINIMO' -----------" );
imprimir( "- El 'MINIMO' valor entre: [" + notaMatematica + ", " + notaLenguaje + "] es: [" + this.getValorMinimo( notaMatematica, notaLenguaje ) + "]" );
imprimir( "- El 'MINIMO' valor entre: [" + notaHistoria + ", " + notaBiologia + "] es: [" + this.getValorMinimo( notaHistoria, notaBiologia ) + "]" );
imprimir( "- El 'MINIMO' valor entre: [" + notaMatematica + ", " + notaHistoria + "] es: [" + this.getValorMinimo( notaMatematica, notaHistoria ) + "]" );
imprimir( "- El 'MINIMO' valor entre: [" + notaBiologia + ", " + notaLenguaje + "] es: [" + this.getValorMinimo( notaBiologia, notaLenguaje ) + "]" );
imprimir( "- El 'MINIMO' valor entre: [" + notaBiologia + ", " + notaBiologia + "] es: [" + this.getValorMinimo( notaBiologia, notaBiologia ) + "]" );
System.out.println( "" );
//max() retorna el mayor de los argumentos proporcionados
imprimir( "----------- VALORES 'MAXIMO' -----------" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaMatematica + ", " + notaLenguaje + "] es: [" + this.getValorMaximo( notaMatematica, notaLenguaje ) + "]" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaHistoria + ", " + notaBiologia + "] es: [" + this.getValorMaximo( notaHistoria, notaBiologia ) + "]" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaMatematica + ", " + notaHistoria + "] es: [" + this.getValorMaximo( notaMatematica, notaHistoria ) + "]" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaBiologia + ", " + notaLenguaje + "] es: [" + this.getValorMaximo( notaBiologia, notaLenguaje ) + "]" );
imprimir( "- El 'MAXIMO' valor entre: [" + notaBiologia + ", " + notaBiologia + "] es: [" + this.getValorMaximo( notaBiologia, notaBiologia ) + "]" );
}
//Imprimir datos.
void imprimir( String cadena ){
System.out.println( cadena );
}
/**
* getValorAbsoluto
* @param notaParam
* @return Number
*/
public Number getValorAbsoluto( Number notaParam ){
Number objetoNumero = 0;
if( notaParam instanceof Double ){
objetoNumero = Math.abs( Double.parseDouble( notaParam.toString() ) );
}
else if( notaParam instanceof Float ){
objetoNumero = Math.abs( Float.parseFloat( notaParam.toString() ) );
}
else if( notaParam instanceof Integer ){
objetoNumero = Math.abs( Integer.parseInt( notaParam.toString() ) );
}
else if( notaParam instanceof Long ){
objetoNumero = Math.abs( Long.parseLong( notaParam.toString() ) );
}
return objetoNumero;
}
/**
* getRedondeo
* @param notaParam
* @return Number
*/
public Number getRedondeo( Number notaParam ){
Number objetoNumero = 0;
if( notaParam instanceof Double ){
objetoNumero = Math.round( Double.parseDouble( notaParam.toString() ) );
}
else if( notaParam instanceof Float ){
objetoNumero = Math.round( Float.parseFloat( notaParam.toString() ) );
}
else if( notaParam instanceof Integer ){
objetoNumero = Math.round( Integer.parseInt( notaParam.toString() ) );
}
return objetoNumero;
}
/**
* getMayorIgual
* @param notaParam
* @return Number
*/
public Number getMayorIgual( Number notaParam ){
Number objetoNumero = 0;
if( notaParam instanceof Double ){
objetoNumero = Math.ceil( Double.parseDouble( notaParam.toString() ) );
}
else if( notaParam instanceof Integer ){
objetoNumero = Math.ceil( Integer.parseInt( notaParam.toString() ) );
}
return objetoNumero;
}
/**
* getMinimoEnteroMayorIgual
* @param notaParam
* @return Number
*/
public Number getMinimoEnteroMayorIgual( Number notaParam ){
Number objetoNumero = 0;
if( notaParam instanceof Double ){
objetoNumero = Math.floor( Double.parseDouble( notaParam.toString() ) );
}
else if( notaParam instanceof Integer ){
objetoNumero = Math.floor( Integer.parseInt( notaParam.toString() ) );
}
return objetoNumero;
}
/**
* getValorMaximo
* @param notaParam_01
* @param notaParam_02
* @return Number
*/
public Number getValorMaximo( Number notaParam_01, Number notaParam_02 ){
Number objetoNumero = 0;
if( (notaParam_01 instanceof Integer) && (notaParam_02 instanceof Integer) ){
objetoNumero = Math.max( Integer.parseInt( notaParam_01 + "" ),
Integer.parseInt( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Double) && (notaParam_02 instanceof Double) ){
objetoNumero = Math.max( Double.parseDouble( notaParam_01 + "" ),
Double.parseDouble( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Double) && (notaParam_02 instanceof Integer) ){
objetoNumero = Math.max( Double.parseDouble( notaParam_01 + "" ),
Integer.parseInt( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Integer) && (notaParam_02 instanceof Double) ){
objetoNumero = Math.max( Integer.parseInt( notaParam_01 + "" ),
Double.parseDouble( notaParam_02 + "" ) );
}
return objetoNumero;
}
/**
* getValorMinimo
* @param notaParam_01
* @param notaParam_02
* @return Number
*/
public Number getValorMinimo( Object notaParam_01, Object notaParam_02 ){
Number objetoNumero = 0;
if( (notaParam_01 instanceof Integer) && (notaParam_02 instanceof Integer) ){
objetoNumero = Math.min( Integer.parseInt( notaParam_01 + "" ),
Integer.parseInt( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Double) && (notaParam_02 instanceof Double) ){
objetoNumero = Math.min( Double.parseDouble( notaParam_01 + "" ),
Double.parseDouble( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Double) && (notaParam_02 instanceof Integer) ){
objetoNumero = Math.min( Double.parseDouble( notaParam_01 + "" ),
Integer.parseInt( notaParam_02 + "" ) );
}
else if( (notaParam_01 instanceof Integer) && (notaParam_02 instanceof Double) ){
objetoNumero = Math.min( Integer.parseInt( notaParam_01 + "" ),
Double.parseDouble( notaParam_02 + "" ) );
}
return objetoNumero;
}
}
La salida en consola luego de la ejecución de dicha clase es la siguiente:
----------- VALORES 'ABSOLUTOS' -----------
- MATEMATICA: [10] nota 'ABSOLUTA': [10]
- LENGUAJE: [-2] nota 'ABSOLUTA': [2]
- HISTORIO: [9.55] nota 'ABSOLUTA': [9.55]
- BIOLOGIA: [8.3] nota 'ABSOLUTA': [8.3]
----------- VALORES 'REDONDEADOS' -----------
- MATEMATICA: [10] nota 'REDONDEADO': [10]
- LENGUAJE: [-2] nota 'REDONDEADO': [-2]
- HISTORIO: [9.55] nota 'REDONDEADO': [10]
- BIOLOGIA: [8.3] nota 'REDONDEADO': [8]
----------- VALORES 'CEILING' -----------
- MATEMATICA: El 'ceiling' de: [10] es: [10.0]
- LENGUAJE: El 'ceiling' de: [-2] es: [-2.0]
- HISTORIO: El 'ceiling' de: [9.55] es: [9.0]
- BIOLOGIA: El 'ceiling' de: [8.3] es: [8.0]
----------- VALORES 'FLOOR' -----------
- MATEMATICA: El 'floor' de: [10] es: [10.0]
- LENGUAJE: El 'floor' de: [-2] es: [-2.0]
- HISTORIO: El 'floor' de: [9.55] es: [10.0]
- BIOLOGIA: El 'floor' de: [8.3] es: [9.0]
----------- VALORES 'MINIMO' -----------
- El 'MINIMO' valor entre: [10, -2] es: [-2]
- El 'MINIMO' valor entre: [9.55, 8.3] es: [8.3]
- El 'MINIMO' valor entre: [10, 9.55] es: [9.55]
- El 'MINIMO' valor entre: [8.3, -2] es: [-2.0]
- El 'MINIMO' valor entre: [8.3, 8.3] es: [8.3]
----------- VALORES 'MAXIMO' -----------
- El 'MAXIMO' valor entre: [10, -2] es: [10]
- El 'MAXIMO' valor entre: [9.55, 8.3] es: [9.55]
- El 'MAXIMO' valor entre: [10, 9.55] es: [10.0]
- El 'MAXIMO' valor entre: [8.3, -2] es: [8.3]
- El 'MAXIMO' valor entre: [8.3, 8.3] es: [8.3]
EJECUTAR UN COMANDO 'PING' DESDE JAVA.
En muchas ocaciones es necesario validar la conexiones que tengamos apuntando hacia diferentes servidores o PC en Red. Para esto una forma de validar conexion con ellos es hacer un simple 'PING' desde consola hacia dichas IPs o HOST. Bueno en este momento mostraré una de las formas para poder realizar este proceso desde JAVA y así validar.
El código es el siguiente:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author Cesar Ricardo.
* @clase: JavaPing.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class ManejoComandoPing{
private static final String COMANDO = "ping";
private static final String ESPACIO = " ";
private static final String IP_HOST = "www.google.com";
/**
* main
* @param argumentos
*/
public static void main( String[] argumentos ){
ManejoComandoPing javaPing = new ManejoComandoPing();
String IP = null;
String otroIP = IP_HOST;
//Validación Previa.
if( argumentos.length > 0 ){
IP = argumentos[ 0 ]; //Desde consola (DOS, UNIX, LINUX).
}
else{
if( (otroIP.equalsIgnoreCase( "" )) ){
IP = "localhost"; //HardCode.
}
else{
IP = otroIP;
}
}
//Validacion IP.
javaPing.validarPingIP( IP );
}
/**
* validarPingIP
* @param IP
*/
public void validarPingIP( String IP ){
String mensaje = null;
String pingCMD = COMANDO + ESPACIO + IP;
try{
Runtime ejecuta = Runtime.getRuntime();
Process proceso = ejecuta.exec( pingCMD );
InputStreamReader entrada = new InputStreamReader( proceso.getInputStream() );
BufferedReader buffer = new BufferedReader( entrada );
String linea = "";
for( ;(linea = buffer.readLine() ) != null; ){
System.out.println( linea );
mensaje += linea;
}
buffer.close();
}
catch( IOException e ){
System.out.println( e );
}
catch( Exception e ){
System.out.println( e );
}
}
}
La salida es la siguiente:
Haciendo ping a www.l.google.com [72.14.204.99] con 32 bytes de datos:
Respuesta desde 72.14.204.99: bytes=32 tiempo=110ms TTL=51
Respuesta desde 72.14.204.99: bytes=32 tiempo=108ms TTL=51
Respuesta desde 72.14.204.99: bytes=32 tiempo=110ms TTL=51
Respuesta desde 72.14.204.99: bytes=32 tiempo=108ms TTL=51
El código es el siguiente:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author Cesar Ricardo.
* @clase: JavaPing.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class ManejoComandoPing{
private static final String COMANDO = "ping";
private static final String ESPACIO = " ";
private static final String IP_HOST = "www.google.com";
/**
* main
* @param argumentos
*/
public static void main( String[] argumentos ){
ManejoComandoPing javaPing = new ManejoComandoPing();
String IP = null;
String otroIP = IP_HOST;
//Validación Previa.
if( argumentos.length > 0 ){
IP = argumentos[ 0 ]; //Desde consola (DOS, UNIX, LINUX).
}
else{
if( (otroIP.equalsIgnoreCase( "" )) ){
IP = "localhost"; //HardCode.
}
else{
IP = otroIP;
}
}
//Validacion IP.
javaPing.validarPingIP( IP );
}
/**
* validarPingIP
* @param IP
*/
public void validarPingIP( String IP ){
String mensaje = null;
String pingCMD = COMANDO + ESPACIO + IP;
try{
Runtime ejecuta = Runtime.getRuntime();
Process proceso = ejecuta.exec( pingCMD );
InputStreamReader entrada = new InputStreamReader( proceso.getInputStream() );
BufferedReader buffer = new BufferedReader( entrada );
String linea = "";
for( ;(linea = buffer.readLine() ) != null; ){
System.out.println( linea );
mensaje += linea;
}
buffer.close();
}
catch( IOException e ){
System.out.println( e );
}
catch( Exception e ){
System.out.println( e );
}
}
}
La salida es la siguiente:
Haciendo ping a www.l.google.com [72.14.204.99] con 32 bytes de datos:
Respuesta desde 72.14.204.99: bytes=32 tiempo=110ms TTL=51
Respuesta desde 72.14.204.99: bytes=32 tiempo=108ms TTL=51
Respuesta desde 72.14.204.99: bytes=32 tiempo=110ms TTL=51
Respuesta desde 72.14.204.99: bytes=32 tiempo=108ms TTL=51
MANEJO DE LA CLASE: java.util.Properties
Muchas veces es necesario que en nuestras aplicaciones tengamos un Archivo de Configuración con los parametros de configuración de parte o de toda nuestra aplicación. Por ejemplo, un archivo de configuración donde se registren las conexiones, drivers, URL, etc de nuestras 'BDs' a las que nos contectamos. Porque realizamos estos?, bueno normalmente para eliminar la tendencia de tener 'HardCodeado' en diferentes parte de nuestra aplicación dichos parametros. Uds dirán y porque no tenerlos en una clase 'Constantes.java', bueno la razón es que dicha clase 'Constantes.java' al ser compilada genera un '.class' y luego del despliegue si queremos editar un campo de dicha clase simplemente 'NO PODREMOS'. Por este motivo lo mejor es tener un archivo de configuración en un fichero de tipo: .PROPERTIES, .XML o un .TXT, ya que estos no se compilan y pueden ser editados en todo momento. En esta oportunidad mostraré la utilidad que brinda la clase: 'java.util.Properties', para el acceso a ficheros de tipo: .PROPERTIES y con ellos poder crearnos un archivo de configuración para nuestras aplicaciones.
FICHERO DE CONFIGURACIÓN:
#####################################################################
################ PROPIEDADES DE PARA ACCESO DE DATOS ################
#####################################################################
#### EL DELIMITADOR DE ACCESO SE PUEDE REGISTRAR CON LA SIMBOLOGÍA => ':', '=', 'BLANCO' ####
propiedad.datos.nombres = Cesar Ricardo
propiedad.datos.apellidos : Guerra Arnaiz
propiedad.datos.direccion Av Naranjal 1029 Los Olivos
CLASE: ManejoJavaProperties
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
/**
* @author Cesar Ricardo.
* @clase: ManejoJavaProperties.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class ManejoJavaProperties{
private static final String RUTA_PATH = "src/org/java/properties/";
private static final String FICHERO = "FicheroConfiguracion.properties";
/**
* main
* @param argumentos
*/
public static void main( String[] argumentos ){
ManejoJavaProperties properties = new ManejoJavaProperties();
properties.cargarDataFichero();
}
/**
* cargarDataFichero
*/
public void cargarDataFichero(){
try{
String rutaFichero = RUTA_PATH + FICHERO;
Properties objPropiedadFichero = new Properties();
FileInputStream archivoInput = new FileInputStream( rutaFichero );
//Carga Fichero.
objPropiedadFichero.load( archivoInput );
//Obteniendo Datos.
String nombres = objPropiedadFichero.getProperty( "propiedad.datos.nombres" ); //Identificador de 'Nombres' registrado para Acceso.
String apellidos = objPropiedadFichero.getProperty( "propiedad.datos.apellidos" ); //Identificador de 'Apellidos' registrado para Acceso.
String direccion = objPropiedadFichero.getProperty( "propiedad.datos.direccion" ); //Identificador de 'Direccion' registrado para Acceso.
//Imprimiendo Resultados.
System.out.println( "- Dato Obtenido #1: " + nombres );
System.out.println( "- Dato Obtenido #2: " + apellidos );
System.out.println( "- Dato Obtenido #3: " + direccion );
objPropiedadFichero.setProperty( "propiedad.datos.nombres", "Cesar Ricardo = JAVAMAN" );
//El SETEO solo se dá en MEMORIA, no en el fichero FISICO en sí.
nombres = objPropiedadFichero.getProperty( "propiedad.datos.nombres" ); //Identificador de 'Apellidos' registrado para Acceso.
System.out.println( "" );
System.out.println( "- Dato Obtenido #1 (NEW): " + nombres );
}
catch( IOException e ){
e.printStackTrace();
}
catch( Exception e ){
e.printStackTrace();
}
}
}
Para descarga del ejemplo completo pulsar AQUÍ.
FICHERO DE CONFIGURACIÓN:
#####################################################################
################ PROPIEDADES DE PARA ACCESO DE DATOS ################
#####################################################################
#### EL DELIMITADOR DE ACCESO SE PUEDE REGISTRAR CON LA SIMBOLOGÍA => ':', '=', 'BLANCO' ####
propiedad.datos.nombres = Cesar Ricardo
propiedad.datos.apellidos : Guerra Arnaiz
propiedad.datos.direccion Av Naranjal 1029 Los Olivos
CLASE: ManejoJavaProperties
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
/**
* @author Cesar Ricardo.
* @clase: ManejoJavaProperties.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class ManejoJavaProperties{
private static final String RUTA_PATH = "src/org/java/properties/";
private static final String FICHERO = "FicheroConfiguracion.properties";
/**
* main
* @param argumentos
*/
public static void main( String[] argumentos ){
ManejoJavaProperties properties = new ManejoJavaProperties();
properties.cargarDataFichero();
}
/**
* cargarDataFichero
*/
public void cargarDataFichero(){
try{
String rutaFichero = RUTA_PATH + FICHERO;
Properties objPropiedadFichero = new Properties();
FileInputStream archivoInput = new FileInputStream( rutaFichero );
//Carga Fichero.
objPropiedadFichero.load( archivoInput );
//Obteniendo Datos.
String nombres = objPropiedadFichero.getProperty( "propiedad.datos.nombres" ); //Identificador de 'Nombres' registrado para Acceso.
String apellidos = objPropiedadFichero.getProperty( "propiedad.datos.apellidos" ); //Identificador de 'Apellidos' registrado para Acceso.
String direccion = objPropiedadFichero.getProperty( "propiedad.datos.direccion" ); //Identificador de 'Direccion' registrado para Acceso.
//Imprimiendo Resultados.
System.out.println( "- Dato Obtenido #1: " + nombres );
System.out.println( "- Dato Obtenido #2: " + apellidos );
System.out.println( "- Dato Obtenido #3: " + direccion );
objPropiedadFichero.setProperty( "propiedad.datos.nombres", "Cesar Ricardo = JAVAMAN" );
//El SETEO solo se dá en MEMORIA, no en el fichero FISICO en sí.
nombres = objPropiedadFichero.getProperty( "propiedad.datos.nombres" ); //Identificador de 'Apellidos' registrado para Acceso.
System.out.println( "" );
System.out.println( "- Dato Obtenido #1 (NEW): " + nombres );
}
catch( IOException e ){
e.printStackTrace();
}
catch( Exception e ){
e.printStackTrace();
}
}
}
Para descarga del ejemplo completo pulsar AQUÍ.
Wednesday, November 11, 2009
MANEJO DE 'REGEX EXPRESSIONS' EN JAVA
Las Expresiones Regulares (Regex) vienen a ser una forma sofisticada de hacer un Buscar & Reemplazar a una velocidad realmente impresionante. En el mundo Windows no tienen mucho sentido, después de todo allí casi todo va a base de clicks. Pero en el mundo Unix/Linux, en el que casi todo son ficheros de texto, son casi una herramienta imprescindible. No tan solo de cara al administrador, sino también de cara a cualquier otro programador que puede ver como las expresiones regulares le salvan la vida en más de una ocasión.
Java utiliza internamente dentro de API conocidas estas expresiones regulares, solo que nosotros no lo sabemos. Por ejemplo en las clases:
Split, StringTokenizer, Scanner
Cuando usas un Delimiter( "-" ) , estas dichas clases realizan un consulta y segmentación internamente utilizando ‘Regex’ o cuando uno hacer una cadena de conexión vía JDBC para la obtención de la URL, etc.
Aparte estas expresiones sirven también en diferentes lenguajes como para hacer la validación de formatos de: números, cadenas, email, etc.
Aquí una parte de lo preparado:
I. EL PUNTO: "." es el meta carácter por excelencia. Un punto representa cualquier caracter excepto nueva línea.
II. EL SIGNO DE DOLAR: "$" representa el final de la cadena de caracteres o el final de la línea, si se utiliza el modo multi-línea. No representa un carácter en especial sino una posición. Si se utiliza la expresión regular "\.$" el motor encontrará todos los lugares donde un punto finalice la línea, lo que es útil para avanzar entre párrafos.
..
…
…..
Para mayor detalle descargar la clase demo preparada desde:
Aquí.
Java utiliza internamente dentro de API conocidas estas expresiones regulares, solo que nosotros no lo sabemos. Por ejemplo en las clases:
Split, StringTokenizer, Scanner
Cuando usas un Delimiter( "-" ) , estas dichas clases realizan un consulta y segmentación internamente utilizando ‘Regex’ o cuando uno hacer una cadena de conexión vía JDBC para la obtención de la URL, etc.
Aparte estas expresiones sirven también en diferentes lenguajes como para hacer la validación de formatos de: números, cadenas, email, etc.
Aquí una parte de lo preparado:
I. EL PUNTO: "." es el meta carácter por excelencia. Un punto representa cualquier caracter excepto nueva línea.
II. EL SIGNO DE DOLAR: "$" representa el final de la cadena de caracteres o el final de la línea, si se utiliza el modo multi-línea. No representa un carácter en especial sino una posición. Si se utiliza la expresión regular "\.$" el motor encontrará todos los lugares donde un punto finalice la línea, lo que es útil para avanzar entre párrafos.
..
…
…..
Para mayor detalle descargar la clase demo preparada desde:
Aquí.
Sunday, October 25, 2009
SCJP 6 (Sun Certified Programmer for Java 6)
Sun Java Certification Program, es el programa de certificación mundial relacionada a la tecnología Java. Esta se enfoca en la certificación de personas en que desempeñan los roles en desarrollo y arquitectura en aplicación de software. Estas certificaciones acreditan el conocimiento y experiencia en el lenguaje Java. Por otro lado, Sun ofrece las siguientes certificaciones profesionales Java:
- Sun Certified Java Associate (SCJA)
- Sun Certified Java Programmer (SCJP)
- Sun Certified Java Developer (SCJD)
- Sun Certified Web Component Developer (SCWCD)
- Sun Certified Business Component Developer (SCBCD)
- Sun Certified Developer For Java Web Services (SCDJWS)
- Sun Certified Mobile Application Developer (SCMAD)
- Sun Certified Enterprise Architect (SCEA)
En esta oportunidad hablaremos sobre la certificación SCJP (Sun Certified Programmer for the Java Platform), Standard Edition 6. Este es un examen para programadores experimentados en la programación en el lenguaje Java. Esta certificación provee una clara evidencia en el entendimiento de estructura, sintaxis, etc., en la programación en el lenguaje y acredita el conocimiento en la creación de aplicaciones Java que corran en Escritorio y Servidor a nivel mundial usando Java SE 6.
Para la gente que este por dar el examen SCJP (Sun Certified Programmer for Java 6 Exam) , este es el libro que contiene todo lo necesario para una preparación por excelencia ya que contiene todos los temas al detalle:
El libro se llama 'Sun Certified Programmer for Java 6 Study Guide', esta en Ingles, muy bien detallado, con ejemplos, Quiz de prueba al final de cada capìtulo y esta dividido de la siguiente manera:
Temas:
---------
* Independientes:
Pag#1 (1 Hoja)
Pag#6 (1 Hoja)
* Contents:
Pag#15 - Pag#21 (6 Hojas)
* Cap#1: Declarations and Acces Control:
Pag#39 - Pag#122 (83 Hojas)
* Cap#2: Object Orientation:
Pag#123 - Pag#220 (97 Hojas)
* Cap#3: Assignments:
Pag#221 - Pag#324 (97 Hojas)
* Cap#4: Operators:
Pag#325 - Pag#364 (39 Hojas)
* Cap#5: Flow Control, Exceptios and Assertios:
Pag#365 - Pag#462 (97 Hojas)
* Cap#6: String, I/O, Formatting and Parsing:
Pag#463 - Pag#578 (115 Hojas)
* Cap#7: Generics and Collectios:
Pag#579 - Pag#698 (119 Hojas)
* Cap#8: Inner Classes:
Pag#699 - Pag#738 (39 Hojas)
* Cap#9: Threads:
Pag#739 - Pag#827 (88 Hojas)
* Cap#10: Threads:
Pag#828 - Pag#868 (40 Hojas)
II.- Capítulos Faltantes:
* Cap#11.pdf:
Pag#1 - Pag#15 (15 Hojas)
* Cap#12.pdf:
Pag#1 - Pag#14 (14 Hojas)
* Cap#13.pdf:
Pag#1 - Pag#17 (17 Hojas)
* Cap#14.pdf:
Pag#1 - Pag#22 (22 Hojas)
* Cap#15.pdf:
Pag#1 - Pag#8 (8 Hojas)
* Cap#16.pdf:
Pag#1 - Pag#6 (6 Hojas)
* Cap#17.pdf:
Pag#1 - Pag#19 (19 Hojas)
* Cap#18.pdf:
Pag#1 - Pag#11 (11 Hojas)
TOTAL HOJAS A IMPRIMIR: 934 Hojas
Para descargar El Libro para la Certificación Java SCJP 6 pulsar:
AQUÌ.
Para descargar El Libro OCP Java SE 6 Programmer Practice Exams pulsar:
AQUÌ.
Luego de leer todo el El Libro para la Certificación Java SCJP 6 a conciencia, aquí comparto estos SIMULADORES del examen, para que uno se pueda probar antes de rendir el dicho exàmen de certificación. Los Simuladores pertenecen a las entidades:
- Simulador 'TechFaq360'
- Simulador 'Sybex'
- Simulador 'Whizlabs'
- Simulador 'KillTest'
Para descargarlos pulsar: AQUI.
- Sun Certified Java Associate (SCJA)
- Sun Certified Java Programmer (SCJP)
- Sun Certified Java Developer (SCJD)
- Sun Certified Web Component Developer (SCWCD)
- Sun Certified Business Component Developer (SCBCD)
- Sun Certified Developer For Java Web Services (SCDJWS)
- Sun Certified Mobile Application Developer (SCMAD)
- Sun Certified Enterprise Architect (SCEA)
En esta oportunidad hablaremos sobre la certificación SCJP (Sun Certified Programmer for the Java Platform), Standard Edition 6. Este es un examen para programadores experimentados en la programación en el lenguaje Java. Esta certificación provee una clara evidencia en el entendimiento de estructura, sintaxis, etc., en la programación en el lenguaje y acredita el conocimiento en la creación de aplicaciones Java que corran en Escritorio y Servidor a nivel mundial usando Java SE 6.
Para la gente que este por dar el examen SCJP (Sun Certified Programmer for Java 6 Exam) , este es el libro que contiene todo lo necesario para una preparación por excelencia ya que contiene todos los temas al detalle:
![]() |
El libro se llama 'Sun Certified Programmer for Java 6 Study Guide', esta en Ingles, muy bien detallado, con ejemplos, Quiz de prueba al final de cada capìtulo y esta dividido de la siguiente manera:
Temas:
---------
* Independientes:
Pag#1 (1 Hoja)
Pag#6 (1 Hoja)
* Contents:
Pag#15 - Pag#21 (6 Hojas)
* Cap#1: Declarations and Acces Control:
Pag#39 - Pag#122 (83 Hojas)
* Cap#2: Object Orientation:
Pag#123 - Pag#220 (97 Hojas)
* Cap#3: Assignments:
Pag#221 - Pag#324 (97 Hojas)
* Cap#4: Operators:
Pag#325 - Pag#364 (39 Hojas)
* Cap#5: Flow Control, Exceptios and Assertios:
Pag#365 - Pag#462 (97 Hojas)
* Cap#6: String, I/O, Formatting and Parsing:
Pag#463 - Pag#578 (115 Hojas)
* Cap#7: Generics and Collectios:
Pag#579 - Pag#698 (119 Hojas)
* Cap#8: Inner Classes:
Pag#699 - Pag#738 (39 Hojas)
* Cap#9: Threads:
Pag#739 - Pag#827 (88 Hojas)
* Cap#10: Threads:
Pag#828 - Pag#868 (40 Hojas)
II.- Capítulos Faltantes:
* Cap#11.pdf:
Pag#1 - Pag#15 (15 Hojas)
* Cap#12.pdf:
Pag#1 - Pag#14 (14 Hojas)
* Cap#13.pdf:
Pag#1 - Pag#17 (17 Hojas)
* Cap#14.pdf:
Pag#1 - Pag#22 (22 Hojas)
* Cap#15.pdf:
Pag#1 - Pag#8 (8 Hojas)
* Cap#16.pdf:
Pag#1 - Pag#6 (6 Hojas)
* Cap#17.pdf:
Pag#1 - Pag#19 (19 Hojas)
* Cap#18.pdf:
Pag#1 - Pag#11 (11 Hojas)
TOTAL HOJAS A IMPRIMIR: 934 Hojas
Para descargar El Libro para la Certificación Java SCJP 6 pulsar:
AQUÌ.
Para descargar El Libro OCP Java SE 6 Programmer Practice Exams pulsar:
AQUÌ.
Luego de leer todo el El Libro para la Certificación Java SCJP 6 a conciencia, aquí comparto estos SIMULADORES del examen, para que uno se pueda probar antes de rendir el dicho exàmen de certificación. Los Simuladores pertenecen a las entidades:
- Simulador 'TechFaq360'
- Simulador 'Sybex'
- Simulador 'Whizlabs'
- Simulador 'KillTest'
Para descargarlos pulsar: AQUI.
Monday, May 4, 2009
Descargador Videos Youtube en JAVA.
Aqui les comparto un demo creado con la finalidad de generar un Descargador de Video de 'Youtube' en JAVA. El demo esta desarrollado en base a Hilos.
Para el manejo simplemente en el textField ingresar la URL del video de Youtube deseado y pulsar el boton descargar. Dependiendo del tamaño del video la aplicacion como que se colgara, pero la razon es que se genero un hilo de descarga. Al finalizar la descarga en mostrara en el TextArea la ruta donde se guardo el video descargado y un mensaje de conformidad.
Los videos descargado bajaràn en formado .Flv en la ruta:
C:\VideosDescargados y para visualizarlos se tendra que descargar el reproductor: Riva FLV PLAYER v2.0.
Dentro del comprimido se encontrara un .zip con el codigo fuente de la aplicacion y un .jar que es el ejecutable ya compilado y funcionando.
Para descargar la aplicaciòn demo pulsar:
Aquì.
Para el manejo simplemente en el textField ingresar la URL del video de Youtube deseado y pulsar el boton descargar. Dependiendo del tamaño del video la aplicacion como que se colgara, pero la razon es que se genero un hilo de descarga. Al finalizar la descarga en mostrara en el TextArea la ruta donde se guardo el video descargado y un mensaje de conformidad.
Los videos descargado bajaràn en formado .Flv en la ruta:
C:\VideosDescargados y para visualizarlos se tendra que descargar el reproductor: Riva FLV PLAYER v2.0.
Dentro del comprimido se encontrara un .zip con el codigo fuente de la aplicacion y un .jar que es el ejecutable ya compilado y funcionando.
Para descargar la aplicaciòn demo pulsar:
Aquì.
Saturday, May 2, 2009
Encriptaciòn, Criptografia y Firmas Digitales en JAVA.
Hola como estan, en esta oportunidad postearè sobre Encriptaciòn, Criptografia y Firmas Digitales en JAVA , por ese motivo estoy compartiendo un par de clases especiales ('ManejoEncriptacion.java') para el manejo de encriptacion y desencriptacion de datos y manejo de firmas digitales, utilizando los algoritmos 'SHA1, MD5, BASE64, CIPHER, SHA1PRNG, SUNJCE, BLOWFISH' . Esta muy bien detalla y ordenada. El manejo de este par de clases seria simplemente instanciandolas y accediendo a los mètodos respectivos, segun convenga. He creado dentro de cada clase un mètodo "main" que muestra la forma como llamar a los mètodos para ver su funcionamiento y lo que imprime al ejecutarce dichas clases:
I.- Ejecuciòn clase: 'ManejoEncriptacion.java' Al ejecutarce esta clase se muestran la aplicaciòn de los algoritmos respectivos, ya antes comentados.
/*******************************************************************************/
Dato Original a Encriptar: Cesar Ricardo Guerra Arnaiz ==> 'JAVAMAN'
- Dato Encriptado utilizando 'SHA1': 963B634E2A2A74399D521545372C590640F6328FF615
- Dato Encriptado utilizando 'MD5': 9B47DE66E257144C9A6C4BA463DC673C1C67
- Dato Encriptado utilizando 'BASE64': Q2VzYXIgUmljYXJkbyBHdWVycmEgQXJuYWl6ID09PiAnSkFWQU1BTic=
- Dato Encriptado utilizando 'CIPHER': rqYOA80r41UjlAdaIq32MSW8ZBzh1ue/qUux9Z9TvDFclqWrG8e55mTxVE9ohJ2u
- Dato Comparado Existente 'SHA1': true
- Dato Comparado Existente 'MD5': true
- Dato Desencryptado utilizando 'BASE64': Cesar Ricardo Guerra Arnaiz ==> 'JAVAMAN'
- Dato Desencryptado utilizando 'CIPHER': Cesar Ricardo Guerra Arnaiz ==> 'JAVAMAN'
/*******************************************************************************/
II.- Ejecuciòn clase: 'ManejoCriptografia_FirmasDigitales.java'
Esta clase al ejecutarce guardara en la ruta: C:\\Encriptacion\\
4 archivos '.txt' ( CriptografiaPrivada.txt, CriptografiaPublica.txt,CriptografiaSecreta.txt, FirmaDigital.txt ), con las llaves pùblica, privada, secreta y la firma digital generada respectivamente.
/*******************************************************************************/
Llave Privada: Sun DSA Private Key
parameters:
p:
fca682ce 8e12caba 26efccf7 110e526d b078b05e decbcd1e b4a208f3 ae1617ae
01f35b91 a47e6df6 3413c5e1 2ed0899b cd132acd 50d99151 bdc43ee7 37592e17
q:
962eddcc 369cba8e bb260ee6 b6a126d9 346e38c5
g:
678471b2 7a9cf44e e91a49c5 147db1a9 aaf244f0 5a434d64 86931d2d 14271b9e
35030b71 fd73da17 9069b32e 2935630e 1c206235 4d0da20a 6c416e50 be794ca4
x: 05d1cd9b f2a50d95 ebd60b1f 92a6c366 b48c5246
Llave Publica: Sun DSA Public Key
Parameters:
p:
fca682ce 8e12caba 26efccf7 110e526d b078b05e decbcd1e b4a208f3 ae1617ae
01f35b91 a47e6df6 3413c5e1 2ed0899b cd132acd 50d99151 bdc43ee7 37592e17
q:
962eddcc 369cba8e bb260ee6 b6a126d9 346e38c5
g:
678471b2 7a9cf44e e91a49c5 147db1a9 aaf244f0 5a434d64 86931d2d 14271b9e
35030b71 fd73da17 9069b32e 2935630e 1c206235 4d0da20a 6c416e50 be794ca4
y:
d13969c4 4a72fc75 34c8a901 f9a7385c c5e0f58a f7e4ff2f 86c81303 34c88ead
174e69a5 2e419e0b 075af7f1 0b0ee3af 7e701dee 8e392760 afb42e5b 051bf3f3
Llave Secreta: com.sun.crypto.provider.DESKey@fffe78e4
DSA 'Llave Privada' 'DATOS ESPECIFICOS'
g: 5421644057436475141609648488325705128047428394380474376834667300766108262613900542681289080713724597310673074119355136085795982097390670890367185141189796
p: 13232376895198612407547930718267435757728527029623408872245156039757713029036368719146452186041204237350521785240337048752071462798273003935646236777459223
q: 857393771208094202104259627990318636601332086981
x (Private Key): 33223720685525160964687769090827582703053591110
DSA 'Llave Publica' 'DATOS ESPECIFICOS'
g: 5421644057436475141609648488325705128047428394380474376834667300766108262613900542681289080713724597310673074119355136085795982097390670890367185141189796
p: 13232376895198612407547930718267435757728527029623408872245156039757713029036368719146452186041204237350521785240337048752071462798273003935646236777459223
q: 857393771208094202104259627990318636601332086981
y (Public Key): 10957964172216934477577618607139934551345542158063249939755549047479274223759870433197949180499126827884422297601943888110924226391334218853590138250589171
Mensaje Transacciòn: Clave 'Privada' Guardada
Mensaje Transacciòn: Clave 'Publica' Guardada
Mensaje Transacciòn: Clave 'Secreta' Guardada
Mensaje Transacciòn: Clave 'Privada' Recuperada
Mensaje Transacciòn: Clave 'Publica' Recuperada
Mensaje Transacciòn: Clave 'Secreta' Recuperada
Mensaje Transacciòn: 'Firma Digital' Creada
Mensaje Transacciòn: 'Firma Digital' Guardada en Archivo
Firma Digital: 0, 5lE?Í"0Y"ššµ?
¬Dêãå± r“ ×)”f¡îM)ÕÃu†å1dXà
Existe Firma Digital: false
Mensaje Transacciòn: 'Firma Digital' Recuperada de Archivo
Obteniendo Firma Digital 'Archivo': 0, 5lE?Í"0Y"ššµ?
¬Dêãå± r“ ×)”f¡îM)ÕÃu†å1dXà
Listado Algoritmos 'KeyPairGenerator': [ECIES, GOST3410, ECGOST3410, EC, DIFFIEHELLMAN, ECDSA, DSA, ECDH, ECDHC, RSA, DH, ELGAMAL]
Listado Algoritmos 'Signature': [SHA256WITHRSAENCRYPTION, RSASSA-PSS, MD5WITHRSA/ISO9796-2, SHA256WITHECDSA, SHA384WITHECDSA, ECGOST3410, SHA256WITHRSA/PSS, DSA, ECDSA, MD4WITHRSAENCRYPTION, SHA384WITHRSA, RIPEMD128WITHRSAENCRYPTION, RIPEMD160WITHRSAENCRYPTION, SHA384WITHRSAENCRYPTION, SHA512WITHRSA, SHA224WITHECDSA, MD2WITHRSA, NONEWITHDSA, SHA256WITHECNR, SHA224WITHRSAENCRYPTION, SHA256WITHDSA, RIPEMD256WITHRSAENCRYPTION, SHA224WITHECNR, MD5WITHRSA, SHA1WITHRSAENCRYPTION, SHA256WITHRSA, SHA512WITHECDSA, SHA512WITHRSAENCRYPTION, SHA384WITHRSA/PSS, GOST3410, SHA1WITHRSA/PSS, SHA1WITHECNR, SHA1WITHDSA, SHA1WITHRSA/ISO9796-2, SHA512WITHRSA/PSS, SHA224WITHRSA/PSS, SHA224WITHDSA, SHA512WITHDSA, SHA1WITHRSA, MD5ANDSHA1WITHRSA, RIPEMD160WITHRSA/ISO9796-2, SHA512WITHECNR, SHA384WITHDSA, MD5WITHRSAENCRYPTION, MD2WITHRSAENCRYPTION, SHA384WITHECNR, 1.2.840.113549.1.1.10]
Lista Proveedores Encriptacion:
--------------------------------
SUN version 1.6
SunRsaSign version 1.5
SunJSSE version 1.6
SunJCE version 1.6
SunJGSS version 1.0
SunSASL version 1.5
XMLDSig version 1.0
SunPCSC version 1.6
SunMSCAPI version 1.6
BC version 1.36
/*******************************************************************************/
Para descargar el paquete completo: pulsar AQUI #1. - AQUI #2.
I.- Ejecuciòn clase: 'ManejoEncriptacion.java' Al ejecutarce esta clase se muestran la aplicaciòn de los algoritmos respectivos, ya antes comentados.
/*******************************************************************************/
Dato Original a Encriptar: Cesar Ricardo Guerra Arnaiz ==> 'JAVAMAN'
- Dato Encriptado utilizando 'SHA1': 963B634E2A2A74399D521545372C590640F6328FF615
- Dato Encriptado utilizando 'MD5': 9B47DE66E257144C9A6C4BA463DC673C1C67
- Dato Encriptado utilizando 'BASE64': Q2VzYXIgUmljYXJkbyBHdWVycmEgQXJuYWl6ID09PiAnSkFWQU1BTic=
- Dato Encriptado utilizando 'CIPHER': rqYOA80r41UjlAdaIq32MSW8ZBzh1ue/qUux9Z9TvDFclqWrG8e55mTxVE9ohJ2u
- Dato Comparado Existente 'SHA1': true
- Dato Comparado Existente 'MD5': true
- Dato Desencryptado utilizando 'BASE64': Cesar Ricardo Guerra Arnaiz ==> 'JAVAMAN'
- Dato Desencryptado utilizando 'CIPHER': Cesar Ricardo Guerra Arnaiz ==> 'JAVAMAN'
/*******************************************************************************/
II.- Ejecuciòn clase: 'ManejoCriptografia_FirmasDigitales.java'
Esta clase al ejecutarce guardara en la ruta: C:\\Encriptacion\\
4 archivos '.txt' ( CriptografiaPrivada.txt, CriptografiaPublica.txt,CriptografiaSecreta.txt, FirmaDigital.txt ), con las llaves pùblica, privada, secreta y la firma digital generada respectivamente.
/*******************************************************************************/
Llave Privada: Sun DSA Private Key
parameters:
p:
fca682ce 8e12caba 26efccf7 110e526d b078b05e decbcd1e b4a208f3 ae1617ae
01f35b91 a47e6df6 3413c5e1 2ed0899b cd132acd 50d99151 bdc43ee7 37592e17
q:
962eddcc 369cba8e bb260ee6 b6a126d9 346e38c5
g:
678471b2 7a9cf44e e91a49c5 147db1a9 aaf244f0 5a434d64 86931d2d 14271b9e
35030b71 fd73da17 9069b32e 2935630e 1c206235 4d0da20a 6c416e50 be794ca4
x: 05d1cd9b f2a50d95 ebd60b1f 92a6c366 b48c5246
Llave Publica: Sun DSA Public Key
Parameters:
p:
fca682ce 8e12caba 26efccf7 110e526d b078b05e decbcd1e b4a208f3 ae1617ae
01f35b91 a47e6df6 3413c5e1 2ed0899b cd132acd 50d99151 bdc43ee7 37592e17
q:
962eddcc 369cba8e bb260ee6 b6a126d9 346e38c5
g:
678471b2 7a9cf44e e91a49c5 147db1a9 aaf244f0 5a434d64 86931d2d 14271b9e
35030b71 fd73da17 9069b32e 2935630e 1c206235 4d0da20a 6c416e50 be794ca4
y:
d13969c4 4a72fc75 34c8a901 f9a7385c c5e0f58a f7e4ff2f 86c81303 34c88ead
174e69a5 2e419e0b 075af7f1 0b0ee3af 7e701dee 8e392760 afb42e5b 051bf3f3
Llave Secreta: com.sun.crypto.provider.DESKey@fffe78e4
DSA 'Llave Privada' 'DATOS ESPECIFICOS'
g: 5421644057436475141609648488325705128047428394380474376834667300766108262613900542681289080713724597310673074119355136085795982097390670890367185141189796
p: 13232376895198612407547930718267435757728527029623408872245156039757713029036368719146452186041204237350521785240337048752071462798273003935646236777459223
q: 857393771208094202104259627990318636601332086981
x (Private Key): 33223720685525160964687769090827582703053591110
DSA 'Llave Publica' 'DATOS ESPECIFICOS'
g: 5421644057436475141609648488325705128047428394380474376834667300766108262613900542681289080713724597310673074119355136085795982097390670890367185141189796
p: 13232376895198612407547930718267435757728527029623408872245156039757713029036368719146452186041204237350521785240337048752071462798273003935646236777459223
q: 857393771208094202104259627990318636601332086981
y (Public Key): 10957964172216934477577618607139934551345542158063249939755549047479274223759870433197949180499126827884422297601943888110924226391334218853590138250589171
Mensaje Transacciòn: Clave 'Privada' Guardada
Mensaje Transacciòn: Clave 'Publica' Guardada
Mensaje Transacciòn: Clave 'Secreta' Guardada
Mensaje Transacciòn: Clave 'Privada' Recuperada
Mensaje Transacciòn: Clave 'Publica' Recuperada
Mensaje Transacciòn: Clave 'Secreta' Recuperada
Mensaje Transacciòn: 'Firma Digital' Creada
Mensaje Transacciòn: 'Firma Digital' Guardada en Archivo
Firma Digital: 0, 5lE?Í"0Y"ššµ?
¬Dêãå± r“ ×)”f¡îM)ÕÃu†å1dXà
Existe Firma Digital: false
Mensaje Transacciòn: 'Firma Digital' Recuperada de Archivo
Obteniendo Firma Digital 'Archivo': 0, 5lE?Í"0Y"ššµ?
¬Dêãå± r“ ×)”f¡îM)ÕÃu†å1dXà
Listado Algoritmos 'KeyPairGenerator': [ECIES, GOST3410, ECGOST3410, EC, DIFFIEHELLMAN, ECDSA, DSA, ECDH, ECDHC, RSA, DH, ELGAMAL]
Listado Algoritmos 'Signature': [SHA256WITHRSAENCRYPTION, RSASSA-PSS, MD5WITHRSA/ISO9796-2, SHA256WITHECDSA, SHA384WITHECDSA, ECGOST3410, SHA256WITHRSA/PSS, DSA, ECDSA, MD4WITHRSAENCRYPTION, SHA384WITHRSA, RIPEMD128WITHRSAENCRYPTION, RIPEMD160WITHRSAENCRYPTION, SHA384WITHRSAENCRYPTION, SHA512WITHRSA, SHA224WITHECDSA, MD2WITHRSA, NONEWITHDSA, SHA256WITHECNR, SHA224WITHRSAENCRYPTION, SHA256WITHDSA, RIPEMD256WITHRSAENCRYPTION, SHA224WITHECNR, MD5WITHRSA, SHA1WITHRSAENCRYPTION, SHA256WITHRSA, SHA512WITHECDSA, SHA512WITHRSAENCRYPTION, SHA384WITHRSA/PSS, GOST3410, SHA1WITHRSA/PSS, SHA1WITHECNR, SHA1WITHDSA, SHA1WITHRSA/ISO9796-2, SHA512WITHRSA/PSS, SHA224WITHRSA/PSS, SHA224WITHDSA, SHA512WITHDSA, SHA1WITHRSA, MD5ANDSHA1WITHRSA, RIPEMD160WITHRSA/ISO9796-2, SHA512WITHECNR, SHA384WITHDSA, MD5WITHRSAENCRYPTION, MD2WITHRSAENCRYPTION, SHA384WITHECNR, 1.2.840.113549.1.1.10]
Lista Proveedores Encriptacion:
--------------------------------
SUN version 1.6
SunRsaSign version 1.5
SunJSSE version 1.6
SunJCE version 1.6
SunJGSS version 1.0
SunSASL version 1.5
XMLDSig version 1.0
SunPCSC version 1.6
SunMSCAPI version 1.6
BC version 1.36
/*******************************************************************************/
Para descargar el paquete completo: pulsar AQUI #1. - AQUI #2.
Java
Criptografia,
Encriptaciòn,
Firmas Digitales,
Java
Sunday, March 29, 2009
Serializacion & Deserializaciòn de Objetos
En esta oportunidad muestro el manejo de 'Serializacion & Deserializacion de Objetos en Java'. Esto lo elabore en base de Objetos Stream, como sus dos mètodos famosos: 'writeObject' y 'readObject'. Los dos ejemplos que se muestran, realizan lo mismo impreso en consola, la diferencia que es que en el primer ejemplo el seteo de objetos esta en modo 'HardCode' y en el segundo utilizo un bean 'BeanSerializable' para la transmisiòn. En total los dos ejemplos cuantan con tres clases:
BeanSerializable.java
import java.io.Serializable;
import java.util.Date;
/**
* En clase es utilizada para el setedo de datos para su posterior serializacion.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/
public class BeanSerializable implements Serializable{
private static final long serialVersionUID = -7905579217165381885L;
private Integer codigo;
private String nombre;
private String apellido;
private Date fecha;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public Date getFecha() {
return fecha;
}
public void setFecha(Date fecha) {
this.fecha = fecha;
}
}
Serializando_Deserealizando_Objetos_01.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
/**
* En esta clase estoy mostrando el manejo de Serializacion y Deserealizaciòn
* de datos en modo 'HardCode'.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/
public class Serializando_Deserealizando_Objetos_01 implements Serializable{
private static final long serialVersionUID = -2071812553599487256L;
public static void main( String[] args ){
try{
/***************************************/
/**** ENVIAN OBJETOS 'Serializados' ****/
/***************************************/
FileOutputStream salida = new FileOutputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectOutput objSalida = new ObjectOutputStream(salida);
objSalida.writeObject( 123456 );
objSalida.writeObject( "Cesar Ricardo" );
objSalida.writeObject( "Guerra Arnaiz" );
objSalida.writeObject( new Date() );
objSalida.flush();
objSalida.close();
/********************************************/
/**** RECUPERAN OBJETOS 'Deserializados' ****/
/********************************************/
FileInputStream entrada = new FileInputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectInputStream objEntrada = new ObjectInputStream( entrada );
Integer codigo = (Integer)objEntrada.readObject();
String nombre = (String)objEntrada.readObject();
String apellido = (String)objEntrada.readObject();
Date fecha = (Date)objEntrada.readObject();
objEntrada.close();
System.out.println( "Objeto Deserealizado #01: " + codigo );
System.out.println( "Objeto Deserealizado #02: " + nombre );
System.out.println( "Objeto Deserealizado #02: " + apellido );
System.out.println( "Objeto Deserealizado #03: " + fecha );
}
catch( Exception e ){
e.printStackTrace();
}
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
}
Serializando_Deserealizando_Objetos_02.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
/**
* En esta clase estoy mostrando el manejo de Serializacion y Deserealizaciòn
* de datos utilizando un Objeto Bean de apoyo.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/
public class Serializando_Deserealizando_Objetos_02 implements Serializable{
private static final long serialVersionUID = -7282739136711013954L;
public static void main( String[] args ){
try{
BeanSerializable objeto = new BeanSerializable();
/***************************************/
/**** ENVIAN OBJETOS 'Serializados' ****/
/***************************************/
FileOutputStream salida = new FileOutputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectOutput objSalida = new ObjectOutputStream(salida);
objeto.setCodigo( 123456 );
objeto.setNombre( "Cesar Ricardo" );
objeto.setApellido( "Guerra Arnaiz" );
objeto.setFecha( new Date() );
objSalida.writeObject( objeto );
objSalida.flush();
objSalida.close();
/********************************************/
/**** RECUPERAN OBJETOS 'Deserializados' ****/
/********************************************/
FileInputStream entrada = new FileInputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectInputStream objEntrada = new ObjectInputStream( entrada );
BeanSerializable objetoBean = (BeanSerializable)objEntrada.readObject();
System.out.println( "Objeto: " + objetoBean );
if( objetoBean instanceof BeanSerializable ){
System.out.println( "Si es Instanciado al Objeto" );
}
else{
System.out.println( "No es Instanciado al Objeto" );
}
objEntrada.close();
System.out.println( "Objeto Deserealizado #1: " + objetoBean.getCodigo() );
System.out.println( "Objeto Deserealizado #2: " + objetoBean.getNombre() );
System.out.println( "Objeto Deserealizado #3: " + objetoBean.getApellido() );
System.out.println( "Objeto Deserealizado #4: " + objetoBean.getFecha() );
}
catch( Exception e ){
e.printStackTrace();
}
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
}
BeanSerializable.java
import java.io.Serializable;
import java.util.Date;
/**
* En clase es utilizada para el setedo de datos para su posterior serializacion.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/
public class BeanSerializable implements Serializable{
private static final long serialVersionUID = -7905579217165381885L;
private Integer codigo;
private String nombre;
private String apellido;
private Date fecha;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public Date getFecha() {
return fecha;
}
public void setFecha(Date fecha) {
this.fecha = fecha;
}
}
Serializando_Deserealizando_Objetos_01.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
/**
* En esta clase estoy mostrando el manejo de Serializacion y Deserealizaciòn
* de datos en modo 'HardCode'.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/
public class Serializando_Deserealizando_Objetos_01 implements Serializable{
private static final long serialVersionUID = -2071812553599487256L;
public static void main( String[] args ){
try{
/***************************************/
/**** ENVIAN OBJETOS 'Serializados' ****/
/***************************************/
FileOutputStream salida = new FileOutputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectOutput objSalida = new ObjectOutputStream(salida);
objSalida.writeObject( 123456 );
objSalida.writeObject( "Cesar Ricardo" );
objSalida.writeObject( "Guerra Arnaiz" );
objSalida.writeObject( new Date() );
objSalida.flush();
objSalida.close();
/********************************************/
/**** RECUPERAN OBJETOS 'Deserializados' ****/
/********************************************/
FileInputStream entrada = new FileInputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectInputStream objEntrada = new ObjectInputStream( entrada );
Integer codigo = (Integer)objEntrada.readObject();
String nombre = (String)objEntrada.readObject();
String apellido = (String)objEntrada.readObject();
Date fecha = (Date)objEntrada.readObject();
objEntrada.close();
System.out.println( "Objeto Deserealizado #01: " + codigo );
System.out.println( "Objeto Deserealizado #02: " + nombre );
System.out.println( "Objeto Deserealizado #02: " + apellido );
System.out.println( "Objeto Deserealizado #03: " + fecha );
}
catch( Exception e ){
e.printStackTrace();
}
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
}
Serializando_Deserealizando_Objetos_02.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
/**
* En esta clase estoy mostrando el manejo de Serializacion y Deserealizaciòn
* de datos utilizando un Objeto Bean de apoyo.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/
public class Serializando_Deserealizando_Objetos_02 implements Serializable{
private static final long serialVersionUID = -7282739136711013954L;
public static void main( String[] args ){
try{
BeanSerializable objeto = new BeanSerializable();
/***************************************/
/**** ENVIAN OBJETOS 'Serializados' ****/
/***************************************/
FileOutputStream salida = new FileOutputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectOutput objSalida = new ObjectOutputStream(salida);
objeto.setCodigo( 123456 );
objeto.setNombre( "Cesar Ricardo" );
objeto.setApellido( "Guerra Arnaiz" );
objeto.setFecha( new Date() );
objSalida.writeObject( objeto );
objSalida.flush();
objSalida.close();
/********************************************/
/**** RECUPERAN OBJETOS 'Deserializados' ****/
/********************************************/
FileInputStream entrada = new FileInputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectInputStream objEntrada = new ObjectInputStream( entrada );
BeanSerializable objetoBean = (BeanSerializable)objEntrada.readObject();
System.out.println( "Objeto: " + objetoBean );
if( objetoBean instanceof BeanSerializable ){
System.out.println( "Si es Instanciado al Objeto" );
}
else{
System.out.println( "No es Instanciado al Objeto" );
}
objEntrada.close();
System.out.println( "Objeto Deserealizado #1: " + objetoBean.getCodigo() );
System.out.println( "Objeto Deserealizado #2: " + objetoBean.getNombre() );
System.out.println( "Objeto Deserealizado #3: " + objetoBean.getApellido() );
System.out.println( "Objeto Deserealizado #4: " + objetoBean.getFecha() );
}
catch( Exception e ){
e.printStackTrace();
}
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
}
Sunday, March 1, 2009
Manejo de Hilos (Threads) en Java
Aqui muestro el manejo de un Tema muy importante en JAVA. Hilos (Threads) que se utiliza para el manejo de varios proceso simultaneamente (Uno por cada Hilo creado).
En el demo preparado muestro dos formas de como manejar 'Threads', por medio de dos beans similares. El primero haciendo un 'extends Thread' y el segundo haciendo un 'implements Runnable'.
Espero que el demo sea ilustrativo y les de ideas para futuros manejos en otras aplicaciones.
Ademàs, para una informaciòn mas completa he colgado tambien un Tutorial en PDF donde muestras una informaciòn mas completa sobre este tema.
Para descargar la aplicaciòn Demo pulsar Aquì
Para descargar un buen tutorial en PDF pulsar Aquì
En el demo preparado muestro dos formas de como manejar 'Threads', por medio de dos beans similares. El primero haciendo un 'extends Thread' y el segundo haciendo un 'implements Runnable'.
Espero que el demo sea ilustrativo y les de ideas para futuros manejos en otras aplicaciones.
Ademàs, para una informaciòn mas completa he colgado tambien un Tutorial en PDF donde muestras una informaciòn mas completa sobre este tema.
Para descargar la aplicaciòn Demo pulsar Aquì
Para descargar un buen tutorial en PDF pulsar Aquì
Friday, February 27, 2009
Manejo Objectos Generics
Aquì mostrarè un Ejemplo de como manejar Objetos (Setear y Acceder) de tipo Genrics.
Declaramos el Objeto 'BeanGenerico' y le ponemos que sea de tipo '< objetoGenerico extends Object >', que significa que en la variable 'objetoGenerico' se almacenarà cualquier tipo de valor que se le atribuya a la variable:
class BeanGenerico< objetoGenerico extends Object >{
private objetoGenerico codigo;
private objetoGenerico nombre;
private objetoGenerico apellido;
private objetoGenerico dni;
private objetoGenerico cumpleanos;
/*******************/
/**** GET - SET ****/
/*******************/
public objetoGenerico getCodigo() {
return codigo;
}
public objetoGenerico getNombre() {
return nombre;
}
public objetoGenerico getApellido() {
return apellido;
}
public objetoGenerico getDni() {
return dni;
}
public void setCodigo(objetoGenerico codigo) {
this.codigo = codigo;
}
public void setNombre(objetoGenerico nombre) {
this.nombre = nombre;
}
public void setApellido(objetoGenerico apellido) {
this.apellido = apellido;
}
public void setDni(objetoGenerico dni) {
this.dni = dni;
}
public objetoGenerico getCumpleanos() {
return cumpleanos;
}
public void setCumpleanos(objetoGenerico cumpleanos) {
this.cumpleanos = cumpleanos;
}
}
Luego creamos la Clase 'PruebaBeanGenerico', donde se Seteara y Accedera al Objeto anterior:
import java.math.BigDecimal;
import java.util.Date;
public class PruebaBeanGenerico{
static Integer anoPruebaInicio = 2009;
static Integer mesPruebaInicio = 12;
static Integer diaPruebaInicio = 3;
static Integer redondeoAñoFecha = 1900; //Redonde de Año.
static Integer redondeoMesFecha = 1; //Redonde de Mes.
@SuppressWarnings("deprecation")
public static void main( String[] params ){
BeanGenerico beanGenerico = new BeanGenerico();
BigDecimal codigo = new BigDecimal( 10 );
String nombre = new String( "Cesar Ricardo" );
String apellido = new String( "Guerra Arnaiz" );
Integer dni = new Integer(41816133);
Date cumpleanos = new Date( (anoPruebaInicio - redondeoAñoFecha), (mesPruebaInicio - redondeoMesFecha), diaPruebaInicio );
beanGenerico.setCodigo( codigo );
beanGenerico.setNombre( nombre );
beanGenerico.setApellido( apellido );
beanGenerico.setDni( dni );
beanGenerico.setCumpleanos( cumpleanos );
imprimir( beanGenerico );
}
public static void imprimir( Object parametro ){
BeanGenerico beanGenerico = (BeanGenerico)parametro;
System.err.println("");
System.err.println("OBTENIENDO DATOS 'GENERICs'");
System.err.println("Codigo: " + beanGenerico.getCodigo() );
System.err.println("Nombre: " + beanGenerico.getNombre() );
System.err.println("Apellido: " + beanGenerico.getApellido() );
System.err.println("Dni: " + beanGenerico.getDni() );
System.err.println("Cumpleaños: " + beanGenerico.getCumpleanos() );
System.err.println("");
}
}
De esta forma que resuelta la duda de como manejar los Objetos Generics en JAVA.
Declaramos el Objeto 'BeanGenerico' y le ponemos que sea de tipo '< objetoGenerico extends Object >', que significa que en la variable 'objetoGenerico' se almacenarà cualquier tipo de valor que se le atribuya a la variable:
class BeanGenerico< objetoGenerico extends Object >{
private objetoGenerico codigo;
private objetoGenerico nombre;
private objetoGenerico apellido;
private objetoGenerico dni;
private objetoGenerico cumpleanos;
/*******************/
/**** GET - SET ****/
/*******************/
public objetoGenerico getCodigo() {
return codigo;
}
public objetoGenerico getNombre() {
return nombre;
}
public objetoGenerico getApellido() {
return apellido;
}
public objetoGenerico getDni() {
return dni;
}
public void setCodigo(objetoGenerico codigo) {
this.codigo = codigo;
}
public void setNombre(objetoGenerico nombre) {
this.nombre = nombre;
}
public void setApellido(objetoGenerico apellido) {
this.apellido = apellido;
}
public void setDni(objetoGenerico dni) {
this.dni = dni;
}
public objetoGenerico getCumpleanos() {
return cumpleanos;
}
public void setCumpleanos(objetoGenerico cumpleanos) {
this.cumpleanos = cumpleanos;
}
}
Luego creamos la Clase 'PruebaBeanGenerico', donde se Seteara y Accedera al Objeto anterior:
import java.math.BigDecimal;
import java.util.Date;
public class PruebaBeanGenerico{
static Integer anoPruebaInicio = 2009;
static Integer mesPruebaInicio = 12;
static Integer diaPruebaInicio = 3;
static Integer redondeoAñoFecha = 1900; //Redonde de Año.
static Integer redondeoMesFecha = 1; //Redonde de Mes.
@SuppressWarnings("deprecation")
public static void main( String[] params ){
BeanGenerico beanGenerico = new BeanGenerico();
BigDecimal codigo = new BigDecimal( 10 );
String nombre = new String( "Cesar Ricardo" );
String apellido = new String( "Guerra Arnaiz" );
Integer dni = new Integer(41816133);
Date cumpleanos = new Date( (anoPruebaInicio - redondeoAñoFecha), (mesPruebaInicio - redondeoMesFecha), diaPruebaInicio );
beanGenerico.setCodigo( codigo );
beanGenerico.setNombre( nombre );
beanGenerico.setApellido( apellido );
beanGenerico.setDni( dni );
beanGenerico.setCumpleanos( cumpleanos );
imprimir( beanGenerico );
}
public static void imprimir( Object parametro ){
BeanGenerico beanGenerico = (BeanGenerico)parametro;
System.err.println("");
System.err.println("OBTENIENDO DATOS 'GENERICs'");
System.err.println("Codigo: " + beanGenerico.getCodigo() );
System.err.println("Nombre: " + beanGenerico.getNombre() );
System.err.println("Apellido: " + beanGenerico.getApellido() );
System.err.println("Dni: " + beanGenerico.getDni() );
System.err.println("Cumpleaños: " + beanGenerico.getCumpleanos() );
System.err.println("");
}
}
De esta forma que resuelta la duda de como manejar los Objetos Generics en JAVA.
Manejo 'Enums'
Aqui les comparto un Ejemplo de como manejar la 'Enums' en JAVA. Para el manejo
de una lista de 'Constantes' en su interior y asi ya no estar declarando varias lineas Constantes.
Creamos la Clase 'ManejoEnum' y codificamos de esta maneja:
public class ManejoEnum{
public enum Paises{
PAIS_01( "PERU" ),
PAIS_02( "BRASIL" ),
PAIS_03( "ALEMANIA" ),
PAIS_04( "FRANCIA" );
private String mensaje;
Paises( String mensaje ){
this.mensaje = mensaje;
}
String getMensaje(){
return mensaje;
}
void setMensage( String mensaje ){
this.mensaje = mensaje;
}
}
public static void main( String[] args ){
System.out.println( "PAIS SELECCIONADO: " + Paises.PAIS_01.getMensaje() );
Paises.PAIS_01.setMensage("RUMANIA");
System.out.println( "PAIS SELECCIONADO: " + Paises.PAIS_01.getMensaje() );
}
}
El Ejemplo mostrara en 'Consola' lo siguiente:
PAIS SELECCIONADO: PERU
PAIS SELECCIONADO: RUMANIA
de una lista de 'Constantes' en su interior y asi ya no estar declarando varias lineas Constantes.
Creamos la Clase 'ManejoEnum' y codificamos de esta maneja:
public class ManejoEnum{
public enum Paises{
PAIS_01( "PERU" ),
PAIS_02( "BRASIL" ),
PAIS_03( "ALEMANIA" ),
PAIS_04( "FRANCIA" );
private String mensaje;
Paises( String mensaje ){
this.mensaje = mensaje;
}
String getMensaje(){
return mensaje;
}
void setMensage( String mensaje ){
this.mensaje = mensaje;
}
}
public static void main( String[] args ){
System.out.println( "PAIS SELECCIONADO: " + Paises.PAIS_01.getMensaje() );
Paises.PAIS_01.setMensage("RUMANIA");
System.out.println( "PAIS SELECCIONADO: " + Paises.PAIS_01.getMensaje() );
}
}
El Ejemplo mostrara en 'Consola' lo siguiente:
PAIS SELECCIONADO: PERU
PAIS SELECCIONADO: RUMANIA
Monday, February 23, 2009
Manejo Clases y Mètodos de JAVA.
Hola, en esta oportunidad presento una Clase que he desarrolado con la finalidad de dar a mostrar el manejo de distintan Clases de Java, que son y que no son muy cocidas y usadas, asi como el manejo sus mètodos correspondiente de estas, de una forma muy bien detallada. Las Clases, temas y mètodos de las que estoy mostrando su funcionamiento, son las siguientes:
- Recursividad
- StopWatch
- Validate
- Arreglos ( Dimensionales, Bidimensionales )
- ArrayListToArray
- ArrayUtils
- DateUtils
- StringUtils
- TimeZone
- SimpleDateFormat
- Calendar
- GregorianCalendar
- Date
- System
- HashTable
- Stack
- Enumeration
- Character
- Clases_Envoltorias
- bigInteger
- bigDesimal
- tipos_IF_ELSE
- comparativoCadenasSinConEspacios
- LinkedList
- ArrayList
- Vector
- HashMap
- Aleatorio #01
- Aleatorio #02
- StringBuffer
- Substring
- CompareTo
He subido un .Zip llamado 'Manejo_Clases_Metodos_Java.zip' que contiene en su interior un proyecto J2EE llamada 'Manejo_Clases_Metodos_Java', de Eclipse. Luego en el arbol de Eclipse se mostara la ruta: 'org.java.prueba' con las clases:
- PruebaClasesJava.java
- PruebaClasesJavaGUI.java
- Consola.java
- BeanComboBoxModel.java
La Clase que maneja todo esto la he llamado 'PruebaClasesJava.java' y para probar su funcionamiento se puede hacer de dos formas:
Forma #1:
Simplemente se descomenta el llamado al metodo de la Clase que se desea ver su funcionamiento y se ejecuta el Mètodo: 'public static void main( String[] args )'. El Resultado se mostrara en Consola.
Forma #2:
He colocado una Clase llamada 'PruebaClasesJavaGUI.java', que es en realidad una pequeña aplicacion realizada en 'Java SWING', donde al ejecutarce se puede escoger desde un ComboBox la Clase que se desea ver su funcionamiento, consultarlo y el
resultado se mostrara en un TextArea.
Para visualizar como luce la aplicaciòn pulsar:
Aquì.
Para descargar el paquete de la Clase junto con la aplicaciòn demo pulsar AQUI.
- Recursividad
- StopWatch
- Validate
- Arreglos ( Dimensionales, Bidimensionales )
- ArrayListToArray
- ArrayUtils
- DateUtils
- StringUtils
- TimeZone
- SimpleDateFormat
- Calendar
- GregorianCalendar
- Date
- System
- HashTable
- Stack
- Enumeration
- Character
- Clases_Envoltorias
- bigInteger
- bigDesimal
- tipos_IF_ELSE
- comparativoCadenasSinConEspacios
- LinkedList
- ArrayList
- Vector
- HashMap
- Aleatorio #01
- Aleatorio #02
- StringBuffer
- Substring
- CompareTo
He subido un .Zip llamado 'Manejo_Clases_Metodos_Java.zip' que contiene en su interior un proyecto J2EE llamada 'Manejo_Clases_Metodos_Java', de Eclipse. Luego en el arbol de Eclipse se mostara la ruta: 'org.java.prueba' con las clases:
- PruebaClasesJava.java
- PruebaClasesJavaGUI.java
- Consola.java
- BeanComboBoxModel.java
La Clase que maneja todo esto la he llamado 'PruebaClasesJava.java' y para probar su funcionamiento se puede hacer de dos formas:
Forma #1:
Simplemente se descomenta el llamado al metodo de la Clase que se desea ver su funcionamiento y se ejecuta el Mètodo: 'public static void main( String[] args )'. El Resultado se mostrara en Consola.
Forma #2:
He colocado una Clase llamada 'PruebaClasesJavaGUI.java', que es en realidad una pequeña aplicacion realizada en 'Java SWING', donde al ejecutarce se puede escoger desde un ComboBox la Clase que se desea ver su funcionamiento, consultarlo y el
resultado se mostrara en un TextArea.
Para visualizar como luce la aplicaciòn pulsar:
Aquì.
Para descargar el paquete de la Clase junto con la aplicaciòn demo pulsar AQUI.
Sunday, December 28, 2008
Exceptions JAVA
Las Exceptions Java son muy importantes para capturar
las posibles fallas que puedan ocurrir durante el
desarrollo del software.
Existen 2 tipos de Excepciones Java:
1. Checked Exceptions: Son Excepciones que son heredadas de
java.lang.Exception. Este tipo de exception es obligada a
ser controlada dentro de un bloque Try/Catch o bien declarar la
excepción en el throws, para obligar al método que invoca a
controlar la excepción
2. Unchecked Exceptions: Son Excepciones que son heredadas de
java.lang.RuntimeException. Este tipo de exception no es
obligatoria su control, se manifiesta normalmente por error
del programador. Es importante que antes a crear unchecked
exception revisar las excepciones estándar que ofrece:
ArithmeticException, NullPointerException, IndexOutOfBoundsException,
etc.
Importante: Por ejemplo al no aplicar bien los Unchecked Exceptions podría pasar que al aplicar un java.lang.Exception (Muy Común), se estaría "comiendo" cualquier java.lang.RuntimeException (ya que heredan de java.lang.Exception), y como el bloque está vacío se evita que se propaguen las excepciones y nadie se entera que pasó realmente.
Tabla de Orden de Exceptions
java.lang.Throwable
Error
VirtualMachineError
...
Exception
ClassNotFoundException
DataFormatException
IOException
NoSuchFieldException
NoSuchMethodException
...
RuntimeException
ArithmeticException
ClassCastException
IllegalArgumentException
IllegalStateException
IndexOutOfBoundsException
NegativeArraySizeException
NoSuchElementException
NullPointerException
UnsupportedOperationException
ConcurrentModificationException
...
Algunas Definiciones de Exceptions.
ArithmeticException
Cuando se intenta dividir por un cero.
ArrayStoreException
Cuando se intenta guardar un objeto en una Arreglo de tipo incompatible (Normalmente ocurre al usar un Arreglo de Objetos, donde el compilador cogerá cualquier error del tipo explícito)
IndexOutOfBoundsException
Cuando un índice del Arreglo está fuera de rango.
NullPointerException
Cuando se intenta hacer referencia un objeto nulo.
Descargar Demo Manejo Exception:
AQUI
Links Importantes de Referencia:
http://blog.lshimokawa.net/2008/08/excepciones-en-java.html
http://www.hachisvertas.net/blog/01/2008/10/28/manejo-de-excepciones-y-errores-en-una-arquitectura-java
http://jungla.dit.upm.es/~pepe/libros/vademecum/html/ExceptionclasejavalangException.html
las posibles fallas que puedan ocurrir durante el
desarrollo del software.
Existen 2 tipos de Excepciones Java:
1. Checked Exceptions: Son Excepciones que son heredadas de
java.lang.Exception. Este tipo de exception es obligada a
ser controlada dentro de un bloque Try/Catch o bien declarar la
excepción en el throws, para obligar al método que invoca a
controlar la excepción
2. Unchecked Exceptions: Son Excepciones que son heredadas de
java.lang.RuntimeException. Este tipo de exception no es
obligatoria su control, se manifiesta normalmente por error
del programador. Es importante que antes a crear unchecked
exception revisar las excepciones estándar que ofrece:
ArithmeticException, NullPointerException, IndexOutOfBoundsException,
etc.
Importante: Por ejemplo al no aplicar bien los Unchecked Exceptions podría pasar que al aplicar un java.lang.Exception (Muy Común), se estaría "comiendo" cualquier java.lang.RuntimeException (ya que heredan de java.lang.Exception), y como el bloque está vacío se evita que se propaguen las excepciones y nadie se entera que pasó realmente.
Tabla de Orden de Exceptions
java.lang.Throwable
Error
VirtualMachineError
...
Exception
ClassNotFoundException
DataFormatException
IOException
NoSuchFieldException
NoSuchMethodException
...
RuntimeException
ArithmeticException
ClassCastException
IllegalArgumentException
IllegalStateException
IndexOutOfBoundsException
NegativeArraySizeException
NoSuchElementException
NullPointerException
UnsupportedOperationException
ConcurrentModificationException
...
Algunas Definiciones de Exceptions.
ArithmeticException
Cuando se intenta dividir por un cero.
ArrayStoreException
Cuando se intenta guardar un objeto en una Arreglo de tipo incompatible (Normalmente ocurre al usar un Arreglo de Objetos, donde el compilador cogerá cualquier error del tipo explícito)
IndexOutOfBoundsException
Cuando un índice del Arreglo está fuera de rango.
NullPointerException
Cuando se intenta hacer referencia un objeto nulo.
Descargar Demo Manejo Exception:
AQUI
Links Importantes de Referencia:
http://blog.lshimokawa.net/2008/08/excepciones-en-java.html
http://www.hachisvertas.net/blog/01/2008/10/28/manejo-de-excepciones-y-errores-en-una-arquitectura-java
http://jungla.dit.upm.es/~pepe/libros/vademecum/html/ExceptionclasejavalangException.html
Subscribe to:
Posts (Atom)