1. Sammenligne objekter med==
Favorittfeilen til nybegynnerprogrammerere er å sammenligne objekter (spesielt strenger) ved å bruke operatøren ==
. For eksempel:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
System.out.println("The strings are equal");
}
Denne koden vil aldri vise "Strengene er like", fordi if
setningen sammenligner referanser til to forskjellige strengobjekter.
Her er den riktige versjonen 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. Endre et String
objekt
Nybegynnerprogrammerere glemmer ofte at alle objekter i klassen er uforanderlige , og at hver metode i String
klassen returnerer et nytt objekt - det nåværende objektet endres aldri.
Eksempel:
String s = "Hello";
s.toUpperCase (); // Convert to uppercase
Denne koden er veldig lik den riktige koden, men den vil ikke fungere som forventet. Metoden toUpperCase()
endrer ikke objektet den kalles på. Riktig kode vil se slik ut:
String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase
3. Glemte å initialisere objekter som er elementer i en matrise
En annen vanlig feil er å glemme å initialisere en matrisevariabel. Eksempel:
int[] array;
array[0] = 1;
array[0] = 2;
Denne koden vil ikke fungere: du må eksplisitt sette matrisevariabelen lik en referanse til containerobjektet som skal lagre elementene i matrisen.
int[] array = new int[10];
array[0] = 1;
array[0] = 2;
4. Bruke en lokal variabel i stedet for en forekomstvariabel.
Nybegynnere liker ikke å komme opp med lange og meningsfulle navn på variabler. De bruker ofte enkeltbokstavsnavn: a
, b
, i
, osv. Det er en grusom ting å gjøre når koden har flere slike variabler:
Sett tallet 99 inn i 100 celler i en matrise |
---|
|
Koden ovenfor vil ikke kompilere. Den riktige versjonen ser slik ut:
Sett tallet 99 inn i 100 celler i en matrise |
---|
|
5. Fjerne et samleobjekt
Svært ofte er det situasjoner når et bestemt element må fjernes fra en samling. Koden ser omtrent slik ut:
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);
Denne koden vil ikke fungere, fordi du ikke kan bruke en for-hver-løkke til å samtidig krysse elementene i en samling og endre den samlingen.
Det finnes flere løsninger. Først kan du gå gjennom en samling og endre en annen:
Løsning 1 |
---|
|
For det andre, siden Java 8, har samlinger en removeIf()
metode som du kan sende en regel (lambda-funksjon) til som indikerer hvilke elementer som skal fjernes.
Eksempel:
Løsning 2 |
---|
|
6. Plassere flere klasser med public
modifikatoren i en enkelt fil
Det kan bare være én offentlig klasse i en fil. Flere klasser kan deklareres i en fil, men de må enten være indre klasser av en offentlig klasse, eller ikke ha modifikatoren public
. Eksempel:
Innholdet i Solution.java-filen | Merk |
---|---|
|
Dette er ikke tillatt: to offentlige klasser i en enkelt fil. |
|
Men du kan gjøre dette. Hovedklassen er ikke offentlig |
|
Og du kan gjøre dette. Hovedklassen er en nestet klasse |
7. Kalle vanlige (ikke-statiske) metoder for en klasse fra den statiske main()
metoden
Noen ganger prøver nybegynnere programmerere å få tilgang til ikke-statiske variabler og metoder fra metoden main()
eller andre statiske metoder. Slik kode vil selvfølgelig ikke fungere.
public class Solution
{
public int n = 100;
public int[] createArray()
{
return new int[n];
}
public static void main(String[]args)
{
int[] array = createArray();
}
}
Hovedmetoden kan kun referere til statiske metoder/variabler. Vel, eller det må først opprette en forekomst av klassen Solution
, og først deretter kalle ikke-statiske metoder for det objektet. Eksempel:
Løsning 1 | Løsning 2 |
---|---|
|
|
8. Erklære en konstruktør som en metode
En annen vanlig feil er feil deklarering av en klassekonstruktør. Navnet på en konstruktør må være det samme som navnet på klassen, og en konstruktør har ingen resultattype. De vanligste feilene ser slik ut:
|
Det skal ikke være en returtype her |
|
Ugyldig konstruktørnavn. Navnet på konstruktøren må samsvare med klassenavnet |
|
this mangler. Variabelen value vil bli tildelt seg selv |
|
Det er alt riktig |
9. Feil nedarving av grensesnitt
Javas skapere prøvde å gjøre det veldig nært engelsk, så de valgte forskjellige nøkkelord for visse relaterte konsepter.
Når en klasse arver en klasse, må du bruke nøkkelordet extends
:
class Pet
{
}
class Cat extends Pet
{
}
Når en klasse arver et grensesnitt, må du bruke nøkkelordet implements
:
interface Meow
{
}
class Cat implements Meow
{
}
Når et grensesnitt arver et grensesnitt, bruk nøkkelordet extends
:
interface Meow
{
}
interface Voice extends Meow
{
}
10. Utelatelse break
i en switch
uttalelse
Og den siste feilen for oss i dag, men ikke den siste for nybegynnere, er å ikke inkludere en break
uttalelse i en switch
uttalelse. Eksempel
Feil | Ikke sant |
---|---|
|
|
GO TO FULL VERSION