1. Jämföra objekt med==
Favoritfelet för nybörjarprogrammerare är att jämföra objekt (särskilt strängar) med ==
operatören. Till exempel:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
System.out.println("The strings are equal");
}
Den här koden kommer aldrig att visa "Strängarna är lika", eftersom satsen if
jämför referenser till två olika strängobjekt.
Här är den korrekta versionen av koden:
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. Ändra ett String
objekt
Nybörjarprogrammerare glömmer ofta att alla objekt i klassen är oföränderliga och att varje metod i String
klassen returnerar ett nytt objekt - det aktuella objektet ändras aldrig.
Exempel:
String s = "Hello";
s.toUpperCase (); // Convert to uppercase
Den här koden är väldigt lik den korrekta koden, men den kommer inte att fungera som förväntat. Metoden toUpperCase()
ändrar inte objektet som den anropas på. Rätt kod skulle se ut så här:
String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase
3. Att glömma att initiera objekt som är element i en array
Ett annat vanligt misstag är att glömma att initiera en arrayvariabel. Exempel:
int[] array;
array[0] = 1;
array[0] = 2;
Den här koden fungerar inte: du måste uttryckligen ställa in arrayvariabeln lika med en referens till containerobjektet som kommer att lagra elementen i arrayen.
int[] array = new int[10];
array[0] = 1;
array[0] = 2;
4. Använda en lokal variabel istället för en instansvariabel.
Nybörjare gillar inte att komma på långa och meningsfulla namn på variabler. De använder ofta enbokstavsnamn: a
, b
, i
, etc. Det är en grym sak att göra när koden har flera sådana variabler:
Sätt siffran 99 i 100 celler i en array |
---|
|
Koden ovan kommer inte att kompileras. Den korrekta versionen ser ut så här:
Sätt siffran 99 i 100 celler i en array |
---|
|
5. Ta bort ett samlingsobjekt
Mycket ofta finns det situationer när ett visst element måste tas bort från en samling. Koden ser ungefär ut så här:
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);
Den här koden kommer inte att fungera, eftersom du inte kan använda en för varje slinga för att samtidigt gå igenom elementen i en samling och modifiera den samlingen.
Det finns flera lösningar. Först kan du gå igenom en samling och ändra en annan:
Lösning 1 |
---|
|
För det andra, sedan Java 8, har samlingar en removeIf()
metod, till vilken du kan skicka en regel (lambda-funktion) som anger vilka element som ska tas bort.
Exempel:
Lösning 2 |
---|
|
6. Placera flera klasser med public
modifieraren i en enda fil
Det kan bara finnas en offentlig klass i en fil. Fler klasser kan deklareras i en fil, men de måste antingen vara inre klasser av en offentlig klass eller inte ha modifieraren public
. Exempel:
Innehållet i filen Solution.java | Notera |
---|---|
|
Detta är inte tillåtet: två offentliga klasser i en enda fil. |
|
Men du kan göra det här. Huvudklassen är inte offentlig |
|
Och du kan göra detta. Huvudklassen är en kapslad klass |
7. Anropa vanliga (icke-statiska) metoder för en klass från den statiska main()
metoden
Ibland försöker nybörjarprogrammerare komma åt icke-statiska variabler och metoder från main()
metoden eller andra statiska metoder. Sådan kod fungerar naturligtvis inte.
public class Solution
{
public int n = 100;
public int[] createArray()
{
return new int[n];
}
public static void main(String[]args)
{
int[] array = createArray();
}
}
Huvudmetoden kan endast hänvisa till statiska metoder/variabler. Tja, eller så måste den först skapa en instans av klassen Solution
och först sedan anropa icke-statiska metoder för det objektet. Exempel:
Lösning 1 | Lösning 2 |
---|---|
|
|
8. Deklarera en konstruktor som en metod
Ett annat vanligt misstag är att felaktigt deklarera en klasskonstruktor. Namnet på en konstruktor måste vara detsamma som namnet på klassen, och en konstruktor har ingen resultattyp. De vanligaste misstagen ser ut så här:
|
Det borde inte finnas någon returtyp här |
|
Ogiltigt konstruktornamn. Namnet på konstruktören måste matcha klassnamnet |
|
this saknas. Variabeln value kommer att tilldelas sig själv |
|
Det är allt korrekt |
9. Felaktigt arv av gränssnitt
Javas skapare försökte göra det väldigt nära engelska, så de valde olika nyckelord för vissa relaterade begrepp.
När en klass ärver en klass måste du använda nyckelordet extends
:
class Pet
{
}
class Cat extends Pet
{
}
När en klass ärver ett gränssnitt måste du använda nyckelordet implements
:
interface Meow
{
}
class Cat implements Meow
{
}
När ett gränssnitt ärver ett gränssnitt, använd extends
nyckelordet:
interface Meow
{
}
interface Voice extends Meow
{
}
10. Utelämnande break
i ett switch
uttalande
Och det sista misstaget för oss idag, men inte det sista för nybörjare, är att inte inkludera ett break
uttalande i ett switch
uttalande. Exempel
Fel | Höger |
---|---|
|
|
GO TO FULL VERSION