De vanligaste felen
- Stavfel och skrivfel i namn
Det kanske vanligaste felet som inträffar när man skriver av Java-program är att identifierare, (klass-, metod- eller variabelnamn), stavas fel. Eftersom Java skiljer mellan små och stora bokstäver, (gemener och versaler), så måste identifierare skrivas på samma sätt varje gång.
Kompilatorn klagar på en Unknown identifier
när man t ex försöker använda någon variabel som inte finns, eller är felstavad. Observera att metoders identifierare ges av både metodens namn och dess parameterlista!
Också när vi kör våra program, kan vi drabbas av detta fel: om programmet inte gör vad det ska, trots att vi har skrivit metoder som borde utföras, kan dessa vara felaktigt namngivna.
När man ärver en klass, får man tillgång till klassens metoder och vi kan förändra dessa genom att omdefiniera dem. Om metodnamnet nu stavas fel, eller parameterlistan inte stämmer, får vi inget kompileringsfel, eftersom vi då istället definierat en ny metod.
- possible loss of precision ... explicit cast to (int) needed
När man omvandlar decimaltal till heltal, försvinner decimaldelen. För att undvika oönskade fel, måste man i Java skriva kod som tar hand om omvandlingen från t ex double
till int
. Exempel:
int l= (int)( 10*Math.PI); // trunkera talet, (ta bort decimaldelen)
int i= (int)( 10*Math.PI +0.5); // avrunda talet innan trunkering
- Omatchande klamrar och parenteser:
( {...} )
Varje vänsterparentes måste matchas av en högerparentes, ( ) och detsamma gäller klamrarna { }. Parenteser avgränsar deluttryck eller parametrarna i metodnamn. Klamrarna anger var en definition eller sekvens av Java- satser börjar och slutar. För många slutklamrar, ( "}" ), kan få klassdefinitionen att ta slut och följande programkod hamnar då utanför klassen, vilket resulterar i besynnerliga felmeddelanden.
- Bilder som inte visas
I Java hanteras bilder asynkront, så att dessa kan laddas parallellt medan ett program körs. Om bilden aldrig blir laddad alls, uppstår inget undantag men likväl kan det vara ett fel. Om bilder inte visas kan det bero på att de ligger i fel katalog, eller har fel namn. Det kan också vara så att bilden finns men att den inte har hämtats in första gången den ska visas. Om paint()-metoden bara anropas en gång, måste bilden hämtas med en MediaTracker eller genom att fråga efter dess storlek, innan den ska visas.
- ArrayIndexOutOfBoundsException
Detta fel inträffar när vektorvariabler som används får ett index utanför deklarerat område:
Exempel:
En vektor av 10 heltalsvariabler deklareras som: int[] i= new int[10];
Om vi nu försöker tilldela i[10]= 17;
får vi index out of bounds
, eftersom alla index räknas från noll (0). (Index måste i detta fall vara 0 <= index <10). >
- NullPointerException
Detta fel inträffar när vi försöker använda objekt som inte finns. Objektvariabler som används till t ex fönsterkomponenter refererar till objekten. När en objektvariabel deklareras, skapas inget objekt utan bara en möjlig objektreferens.
En konstruktor måste anropas med new Klassnamn()
, (eller en metod som returnerar ett önskat objekt), för att något objekt verkligen ska skapas.