Monday, 23 de March de 2009
Si ha estado trabajando con Java por algún tiempo, es seguro que habrá cometido estos errores al menos un par de veces. Los errores de programación en Java, asà como en otros lenguajes, ocurren más que todo en la sintaxis y errores en la lógica. Los errores en la sintaxis son causados cuando el compilar Java (javac) no puede reconocer la sentencia. Esto causa que el compilador devuelva un mensaje de error, usualmente con una lÃnea de código de referencia. También se conoce a los errores de sintaxis como errores en tiempo de compilación.
Los errores de lógica son conocidos como BUGS. Estos son los errores que nos tomarán tiempo hasta encontrarlos. Si damos a elegir, cualquier programador elegirÃa los errores en tiempo de compilación. A mi me ha tomado hasta varios dÃas hacer el debug cuando suceden errores de lógica, y eso, usando todas las herramientas disponibles: archivos logs, mensajes System.out, debuggers, etc.
Los siguientes errores aparecen en la mayorÃa de programadores cada cierto tiempo, pero podemos verlo regularmente en el código de los programadores novatos.
Tenemos que cuidarnos de estos errores para evitarlos y pulir nuestro código.
- El nombre de la Clase pública no coincide con el nombre del archivo
Cada archivo .java puede contener sólo una Clase pública. El nombre de esa Clase pública debe coincidir exactamente con el nombre del archivo antes de la extensión .java, respetando incluso las mayúsculas y minúsculas. Por ejemplo, una Clase pública llamada MyClass debe estar en un archivo MyClass.java y no en myclass.java. Este es un error de sintaxis.
- Una Clase no está en el directorio correcto
Este error de sintaxis ocurre si el comando javac no puede encontrar un archivo .java en el directorio esperado. Si una Clase está en el paquete por defecto (no tiene la declaración del package en la primera lÃnea), entonces esta Clase pertenece al directorio actual de trabajo o al directorio donde apunta el flag sourcepath del javac. Si una Clase está a un paquete, entonces pertenece a un subdirectorio debajo del directorio actual de trabajo o a un subdirectorio debajo del directorio donde apunta el flan sourcepath del javac. Por ejemplo, si existe una Clase llamada com.hello.HelloWorld entonces su nombre es HelloWorld y su paquete es com.hello. Si el flan sourcepath está configurada a c:src, entonces el archivo HelloWorld.java debe estar ubicado en el subdirectorio: c:srccomhello.
- Usando equals contra la asignación ( == versus = )
En Java este error puede ser incluso un error de lógica o sintaxis. Para comparar 2 referencias para igualarlas se usa el operador == (el operador de igualdad). Para asignar el valor de la derecha a la variable de la izquierda se usa el operador = (operador de asignación). Los programadores novatos a veces escriben: if (miValor = valorEsperado) Este código intenta evaluar el valorEsperado como un valor booleano en lugar de intentar la evaluación de igualdad entre miValor y valorEsperado. Si valorEsperado es del tipo booleano, entonces el código tendrá un error de lógica y probará si el valorEsperado es verdadero o falso. Si valorEsperado no es del tipo booleano, entonces el código lanzará un error de compilación debido a que la estructura if requiere un valor booleano que sea retornado de la comparación (miValor = valorEsperado), pero en Java el operador = siempre retorna el valor de la derecha.
- Error en mayúsculas y minúsculas.
Java es un lenguaje case sensitive, esto es que debemos respetar las mayúsculas y minúsculas. (miVar no es igual a mivar). Si hacemos referencia a un identificador que no está bien escrito entonces obtendremos un error de sintaxis.
- Olvidar que los Ãndices en Java empiezan en 0.
Los Ãndices de los arreglos de Java y las listas empiezan en 0, myArray[0], o myList.get(0). Asegurarse que su loop for no cause errores por este motivo. Si hacemos más loops de los que son posibles, entonces obtendremos el error: ArrayIndexOutBounds exception. Si hacemos menos loops de los requeridos, entonces tendremos un error de lógica.
- NullPointerException
El NullPointerException, la maldición de los programadores en Java. Los NullPointerExceptions son errores de lógica causados cuando un programa intenta acceder a métodos o atributos en una referencia que está nula. Si nuestro objeto no ha sido inicializado o ha sido establecido a null con el operador =, entonces la llamada el método o el acceso a uno de sus atributos no es válido.
Espero que esta lista corta de errores de código le ayude a pensar de manera defensiva a la hora de escribir código. Mientras más errores evitemos, entonces más productivos seremos, tanto en tiempo de desarrollo como también el código más refinado.
Ancelot Programación, java desarrollo, j2ee, java, Programación
Tuesday, 24 de February de 2009
Este código me fué de mucha ayuda cuando recién empecé a ver algo de java en el instituto, espero que le sirva a las nuevas generaciones de programadores.
Acá tenemos un keyListener, su función es captar los eventos del teclado,tanto con o sin modificadores, esto se refiere a si el usuario usa SHIFT o no.
El código está funcionando, es autónomo, para ejecutar el ejemplo se debe agregar al proyecto a darle RUN.
JAVA:
-
package keyListener;
-
-
import javax.swing.*;
-
import java.awt.event.*;
-
import java.awt.BorderLayout;
-
import java.awt.Dimension;
-
-
public class KeyEventDemo
extends JPanel
-
-
-
-
-
static final String nuevaLinea =
"\n";
-
-
public KeyEventDemo() {
-
-
-
-
button.addActionListener(this);
-
-
-
typingArea.addKeyListener(this);
-
-
-
displayArea.setEditable(false);
-
-
scrollPane.
setPreferredSize(new Dimension(375,
125));
-
-
-
-
-
}
-
-
/** Handle the key typed event from the text field. */
-
-
displayInfo(e, "KEY TYPED: ");
-
}
-
-
/** Handle the key pressed event from the text field. */
-
-
displayInfo(e, "KEY PRESSED: ");
-
}
-
-
/** Handle the key released event from the text field. */
-
-
displayInfo(e, "KEY RELEASED: ");
-
}
-
-
/** Handle the button click. */
-
-
//Limpia los componentes de texto.
-
displayArea.setText("");
-
typingArea.setText("");
-
-
//Vuelve el foco al área de tipeo.
-
typingArea.requestFocusInWindow();
-
}
-
-
-
String keyString, modString, tmpString,
-
actionString, locationString;
-
-
int id = e.getID();
-
-
char c = e.getKeyChar();
-
keyString = "key character = '" + c + "'";
-
} else {
-
int keyCode = e.getKeyCode();
-
keyString = "key code = " + keyCode
-
+ " ("
-
-
+ ")";
-
}
-
-
int modifiers = e.getModifiersEx();
-
modString = "modificadores = " + modifiers;
-
tmpString =
KeyEvent.
getModifiersExText(modifiers
);
-
if (tmpString.length()> 0) {
-
modString += " (" + tmpString + ")";
-
} else {
-
modString += " (sin modificadores)";
-
}
-
-
actionString = "¿Tecla de acción? ";
-
if (e.isActionKey()) {
-
actionString += "SI";
-
} else {
-
actionString += "NO";
-
}
-
-
locationString = "Ubicación tecla: ";
-
int location = e.getKeyLocation();
-
if (location ==
KeyEvent.
KEY_LOCATION_STANDARD) {
-
locationString += "standard";
-
} else if (location ==
KeyEvent.
KEY_LOCATION_LEFT) {
-
locationString += "izquierda";
-
} else if (location ==
KeyEvent.
KEY_LOCATION_RIGHT) {
-
locationString += "derecha";
-
} else if (location ==
KeyEvent.
KEY_LOCATION_NUMPAD) {
-
locationString += "numpad";
-
} else {
-
// (location == KeyEvent.KEY_LOCATION_UNKNOWN)
-
locationString += "desconocido";
-
}
-
-
displayArea.append(s + nuevaLinea
-
+ "Â Â Â " + keyString + nuevaLinea
-
+ "Â Â Â " + modString + nuevaLinea
-
+ "Â Â Â " + actionString + nuevaLinea
-
+ "Â Â Â " + locationString + nuevaLinea);
-
displayArea.setCaretPosition(displayArea.getDocument().getLength());
-
}
-
-
/**
-
* Se crea la GUI y se muestra.
-
*/
-
private static void createAndShowGUI() {
-
//Se crea y setea la ventana.
-
-
frame.
setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE);
-
-
//Se crea y setea el content pane.
-
-
newContentPane.setOpaque(true); //content panes deben ser opacos
-
frame.setContentPane(newContentPane);
-
-
//Muestra la ventana
-
frame.pack();
-
frame.setVisible(true);
-
}
-
-
public static void main
(String[] args
) {
-
//Creando y mostrando la gui de esta aplicación.
-
-
public void run() {
-
createAndShowGUI();
-
}
-
});
-
}
-
}
Ancelot Programación, java desarrollo, j2ee, java, Programación
Friday, 30 de January de 2009
Para todos nuestros amigos programadores que se setán recién iniciando en el tema, les tengo un pequeño tip para realizar una calculadora bastante simple, no me maten pero está hecha en una sola clase, les dije, es sólo un ejemplo.
Espero les sirva para poder hacer pruebas y familiarizarse con el lenguaje.

Leer más...
Ancelot Programación, java desarrollo, j2ee, Programación
Wednesday, 28 de January de 2009
Una de las mayores dificultades que yo mismo tengo es de recordar aquel código que casi nunca usamos, en mi caso es el switch-case, debido a mi costumbre a usar bloques for y la poca necesidad de usar switch-case, como me he dado cuenta que a muchos les pasa me dispuse a escribir un ejemplo acá.
EN JAVA la sentencia es Switch con la siguiente estructura
JAVA:
-
switch (variable)
-
{
-
case valor_literal:
-
codigo que ejecutamos;
-
break;
-
case otro_valor_literal:
-
codigo que ejecutamos;
-
break;
-
default:
-
codigo que ejecutamos;
-
}
Si no les queda muy claro les pondré un ejemplo práctico
JAVA:
-
int mes;
-
-
switch (mes) {
-
case 1:
System.
out.
println("Enero");
break;
-
case 2:
System.
out.
println("Febrero");
break;
-
case 3:
System.
out.
println("Marzo");
break;
-
case 4:
System.
out.
println("Abril");
break;
-
case 5:
System.
out.
println("May0");
break;
-
case 6:
System.
out.
println("Junio");
break;
-
case 7:
System.
out.
println("Julio");
break;
-
case 8:
System.
out.
println("Agosto");
break;
-
case 9:
System.
out.
println("Septiembre");
break;
-
case 10:
System.
out.
println("Octubre");
break;
-
case 11:
System.
out.
println("Noviembre");
break;
-
case 12:
System.
out.
println("Diciembre");
break;
-
}
Como podemos ver, la variable mes toma siempre solo un valor, por ejemplo 2, por lo tanto cae en el switch-case y cuando llega al case 2 imprime febrero y sale del bloque, es una forma más elegante y óptima de escribir nuestro código, dado que esta misma función la podemos hacer con un gran bloque de if y else.
Ancelot Programación, java desarrollo, j2ee, java, Programación
Tuesday, 27 de January de 2009
Como muchos saben hace un par de meses que estoy trabajando con GWT, lo que significa Google Web Toolkit, asà que me decidà a escribir un poco sobre este tema, si bien esste blog ha sido concebido como una ayuda para la porgramación, se ha ido llenando de humor y anécdotas, si bien también era uno de los objetivos de este proyecto, empezaremos a equilibrar un poco la balanza.
Google Web Toolkit es una herramienta de desarrollo AJAX de Google destinada a desarrolladores Java. Las aplicaciones web (tanto GUI -Graphical User Interface- como RPC -Remote Procedure Call-) se escriben en Java usando el API GWT. Después los archivos Java se compilan en archivos JavaScript compactos, ofuscados y especÃficos del navegador. Un pequeño código de carga en JavaScript determina que archivos de script especÃfico del navegador se deben utilizar dependiendo del navegador cliente. La librerÃa API está licenciada bajo licencia Apache 2.0.
Leer más...
Ancelot Programación, java desarrollo, gwt, informática, j2ee, java, Programación
Thursday, 22 de January de 2009
Muchos han esatdo buscando una forma de validar si un RUT es válido o no, pero también hay muchos que necesitan probar sus aplicaciones y están usando sus propios RUTs, pero ¿qué pasa cuando necesitas hacer una prueba masivamente?, acá te traigo la solución...
Leer más...
VN:F [1.0.9_379]
Rating: 1.0/10 (1 voto cast) | |
Ancelot Programación, java desarrollo, generador de rut, informática, j2ee, java, Programación, rut, verificador de rut