1. Confrontare oggetti con==
L'errore preferito dei programmatori principianti è confrontare gli oggetti (soprattutto le stringhe) usando l' ==
operatore. Per esempio:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
System.out.println("The strings are equal");
}
Questo codice non visualizzerà mai "Le stringhe sono uguali", poiché l' if
istruzione confronta i riferimenti a due diversi oggetti stringa.
Ecco la versione corretta del codice:
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. Modificare un String
oggetto
I programmatori principianti spesso dimenticano che tutti gli oggetti della classe sono immutabili e che ogni metodo della String
classe restituisce un nuovo oggetto: l'oggetto corrente non cambia mai.
Esempio:
String s = "Hello";
s.toUpperCase (); // Convert to uppercase
Questo codice è molto simile al codice corretto, ma non funzionerà come previsto. Il toUpperCase()
metodo non modifica l'oggetto su cui viene chiamato. Il codice corretto sarebbe simile a questo:
String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase
3. Dimenticare di inizializzare gli oggetti che sono elementi di un array
Un altro errore comune è dimenticare di inizializzare una variabile di matrice. Esempio:
int[] array;
array[0] = 1;
array[0] = 2;
Questo codice non funzionerà: è necessario impostare in modo esplicito la variabile array uguale a un riferimento all'oggetto contenitore che memorizzerà gli elementi dell'array.
int[] array = new int[10];
array[0] = 1;
array[0] = 2;
4. Utilizzo di una variabile locale invece di una variabile di istanza.
Ai neofiti non piace inventare nomi lunghi e significativi per le variabili. Spesso usano nomi di una sola lettera: a
, b
, i
, ecc. Questa è una cosa crudele da fare quando il codice ha diverse variabili come questa:
Inserisci il numero 99 in 100 celle di un array |
---|
|
Il codice sopra non verrà compilato. La versione corretta è simile a questa:
Inserisci il numero 99 in 100 celle di un array |
---|
|
5. Rimozione di un elemento della raccolta
Molto spesso ci sono situazioni in cui un determinato elemento deve essere rimosso da una collezione. Il codice è più o meno così:
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);
Questo codice non funzionerà, poiché non è possibile utilizzare un ciclo for-each per attraversare simultaneamente gli elementi di una raccolta e modificare tale raccolta.
Ci sono diverse soluzioni. Innanzitutto, puoi attraversare una raccolta e modificarne un'altra:
Soluzione 1 |
---|
|
In secondo luogo, a partire da Java 8, le raccolte hanno un removeIf()
metodo, al quale è possibile passare una regola (funzione lambda) che indica quali elementi rimuovere.
Esempio:
Soluzione 2 |
---|
|
6. Inserimento di più classi con il public
modificatore in un unico file
Può esserci solo una classe pubblica in un file. È possibile dichiarare più classi in un file, ma devono essere classi interne di una classe pubblica o non avere il public
modificatore. Esempio:
Contenuto del file Solution.java | Nota |
---|---|
|
Questo non è consentito: due classi pubbliche in un unico file. |
|
Ma puoi farlo. La classe principale non è pubblica |
|
E puoi farlo. La classe Main è una classe nidificata |
7. Chiamare metodi ordinari (non statici) di una classe dal main()
metodo statico
A volte i programmatori principianti tentano di accedere a variabili e metodi non statici dal main()
metodo o da altri metodi statici. Tale codice non funzionerà, ovviamente.
public class Solution
{
public int n = 100;
public int[] createArray()
{
return new int[n];
}
public static void main(String[]args)
{
int[] array = createArray();
}
}
Il metodo principale può fare riferimento solo a metodi/variabili statici. Bene, o deve prima creare un'istanza della Solution
classe e solo successivamente chiamare metodi non statici di quell'oggetto. Esempio:
Soluzione 1 | Soluzione 2 |
---|---|
|
|
8. Dichiarare un costruttore come un metodo
Un altro errore comune è la dichiarazione errata di un costruttore di classe. Il nome di un costruttore deve essere uguale al nome della classe e un costruttore non ha alcun tipo di risultato. Gli errori più comuni assomigliano a questo:
|
Non dovrebbe esserci un tipo di ritorno qui |
|
Nome costruttore non valido. Il nome del costruttore deve corrispondere al nome della classe |
|
this manca. La value variabile verrà assegnata a se stessa |
|
È tutto corretto |
9. Ereditarietà errata delle interfacce
I creatori di Java hanno cercato di renderlo molto vicino all'inglese, quindi hanno scelto parole chiave diverse per alcuni concetti correlati.
Quando una classe eredita una classe, devi usare la extends
parola chiave:
class Pet
{
}
class Cat extends Pet
{
}
Quando una classe eredita un'interfaccia, devi usare la implements
parola chiave:
interface Meow
{
}
class Cat implements Meow
{
}
Quando un'interfaccia eredita un'interfaccia, usa la extends
parola chiave:
interface Meow
{
}
interface Voice extends Meow
{
}
10. Omissione break
in una switch
dichiarazione
E l'ultimo errore per noi oggi, ma non l'ultimo per i principianti, è non includere un'affermazione break
in switch
un'affermazione. Esempio
Sbagliato | Giusto |
---|---|
|
|
GO TO FULL VERSION