1. Comparar objetos con==
El error favorito de los programadores novatos es comparar objetos (especialmente cadenas) usando el ==
operador. Por ejemplo:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
System.out.println("The strings are equal");
}
Este código nunca mostrará "Las cadenas son iguales", porque la if
declaración compara referencias a dos objetos de cadena diferentes.
Aquí está la versión correcta del código:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1.equals(s2))
{
System.out.println("The strings are equal");
}
2. Cambiar un String
objeto
Los programadores novatos a menudo olvidan que todos los objetos de la clase son inmutables y que cada método de la String
clase devuelve un nuevo objeto: el objeto actual nunca cambia.
Ejemplo:
String s = "Hello";
s.toUpperCase (); // Convert to uppercase
Este código es muy similar al código correcto, pero no funcionará como se esperaba. El toUpperCase()
método no cambia el objeto en el que se llama. El código correcto se vería así:
String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase
3. Olvidarse de inicializar objetos que son elementos de una matriz
Otro error común es olvidarse de inicializar una variable de matriz. Ejemplo:
int[] array;
array[0] = 1;
array[0] = 2;
Este código no funcionará: debe establecer explícitamente la variable de matriz igual a una referencia al objeto contenedor que almacenará los elementos de la matriz.
int[] array = new int[10];
array[0] = 1;
array[0] = 2;
4. Usar una variable local en lugar de una variable de instancia.
A los novatos no les gusta encontrar nombres largos y significativos para las variables. Con frecuencia usan nombres de una sola letra: a
, b
, i
, etc. Eso es algo cruel cuando el código tiene varias variables como esa:
Pon el número 99 en 100 celdas de una matriz |
---|
|
El código anterior no se compilará. La versión correcta se ve así:
Pon el número 99 en 100 celdas de una matriz |
---|
|
5. Eliminar un elemento de la colección
Muy a menudo hay situaciones en las que un determinado elemento debe eliminarse de una colección. El código se ve más o menos así:
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);
for (Integer value: list)
if (value < 0)
list.remove(value);
Este código no funcionará porque no puede usar un bucle for-each para recorrer simultáneamente los elementos de una colección y modificar esa colección.
Hay varias soluciones. Primero, puede recorrer una colección y cambiar otra:
Solución 1 |
---|
|
En segundo lugar, desde Java 8, las colecciones tienen un removeIf()
método al que puede pasar una regla (función lambda) que indica qué elementos eliminar.
Ejemplo:
Solución 2 |
---|
|
6. Colocar varias clases con el public
modificador en un solo archivo
Solo puede haber una clase pública en un archivo. Se pueden declarar más clases en un archivo, pero deben ser clases internas de una clase pública o no tener el public
modificador. Ejemplo:
Contenido del archivo Solution.java | Nota |
---|---|
|
Esto no está permitido: dos clases públicas en un solo archivo. |
|
Pero puedes hacer esto. La clase principal no es pública. |
|
Y puedes hacer esto. La clase principal es una clase anidada |
7. Llamar a métodos ordinarios (no estáticos) de una clase desde el main()
método estático
A veces, los programadores novatos intentan acceder a variables y métodos no estáticos desde el main()
método u otros métodos estáticos. Tal código no funcionará, por supuesto.
public class Solution
{
public int n = 100;
public int[] createArray()
{
return new int[n];
}
public static void main(String[]args)
{
int[] array = createArray();
}
}
El método principal solo puede referirse a métodos/variables estáticos. Bueno, o primero debe crear una instancia de la Solution
clase y solo luego llamar a métodos no estáticos de ese objeto. Ejemplo:
Solución 1 | Solución 2 |
---|---|
|
|
8. Declarar un constructor como un método
Otro error común es declarar incorrectamente un constructor de clase. El nombre de un constructor debe ser el mismo que el nombre de la clase y un constructor no tiene ningún tipo de resultado. Los errores más comunes se ven así:
|
No debería haber un tipo de retorno aquí |
|
Nombre de constructor no válido. El nombre del constructor debe coincidir con el nombre de la clase. |
|
this Está perdido. La value variable se asignará a sí misma. |
|
eso es todo correcto |
9. Herencia incorrecta de interfaces
Los creadores de Java trataron de hacerlo muy parecido al inglés, por lo que eligieron diferentes palabras clave para ciertos conceptos relacionados.
Cuando una clase hereda una clase, debe usar la extends
palabra clave:
class Pet
{
}
class Cat extends Pet
{
}
Cuando una clase hereda una interfaz, debe usar la implements
palabra clave:
interface Meow
{
}
class Cat implements Meow
{
}
Cuando una interfaz hereda una interfaz, use la extends
palabra clave:
interface Meow
{
}
interface Voice extends Meow
{
}
10. Omitir break
en una switch
declaración
Y el último error para nosotros hoy, pero no el último para los principiantes, es no incluir una break
declaración en una switch
declaración. Ejemplo
Equivocado | Bien |
---|---|
|
|