Här kommer vi efter hand som de dyker upp att fylla på med frågor och svar på återkommade standardproblem. Det är mänskligt att man inom javaprogrammering fastnar på t ex:
-
FRÅGA: Jag får felet, Can't make a static reference to nonstatic variable x in class MinKlass. Vad gör jag för fel och vad betyder egentligen static?
SVAR: Metoden main är deklarerad static vilket betyder att den då ska kunna anropas utan att man först skapar en instans av klassen. Detta innebär att om man i metoden main vill använda variabler deklarerade utanför main så måste även dessa vara deklarerade static, det vill säga tillhöra klassen. Då går det att använda main utan att något objekt behöver skapas.
Eftersom x här är en instans-variabel, det vill säga tillhör ett objekt, så går följande inte att kompilera:
public class MinKlass {
int x = 10;
public static void main(String[] args) {
System.out.println("x: " + x);
}
}
Följande fungerar däremot bra eftersom x här endast gäller internt i main-metoden:
public class MinKlass {
public static void main(String[] args) {
int x = 10;
System.out.println("x: " + x);
}
}
Även följande går bra eftersom x själv är deklarerad static, det vill säga x tillhör klassen (x är en klass-variabel):
public class MinKlass {
static int x = 10;
public static void main(String[] args) {
System.out.println("x: " + x);
}
}
-
FRÅGA: Hela mitt fönster är fullt av felmeddelanden, hur ska jag veta var felen finns?
SVAR: Utveckla iterativt och lägg bara till lite kod i taget. Felen blir då mycket lättare att hitta.
-
FRÅGA: Min kod går igenom kompileringen utan anmärkning, men när jag sedan ska köra mitt program fungerar det inte. Vid prompten skrivs det ut ett svårtolkat felmeddelande med något om NullPointerException. Hur ska jag tolka:

SVAR: NullPointerException ger ofta felmeddelanden som inte är så lätta att tolka men beror alltid på att det någonstans i koden används en referens till ett objekt som bara deklarerats, men inte instansierats. Referensen pekar därför på null och resultatet blir ett undantag som avbryter programexekveringen. I exemplet här nedanför så är det knappen b2 som ställer till det i kodraden där knappen ska läggas in i en panel:
panel.add(b2);
Problemet försvinner om man som med den andra knappen b1 först skapar en instans med
new Button()
import java.awt.*;
public class Voff extends Frame {
private Panel panel;
private Button b1;
private Button b2;
public Voff() {
setSize(200, 50);
panel = new Panel();
b1 = new Button("Tryck här");
add(panel);
panel.add(b1);
panel.add(b2);
}
public static void main(String[] args) {
Voff voff = new Voff();
voff.setVisible(true);
}//main
}
-
FRÅGA: Min kod går igenom kompileringen utan anmärkning, men när jag sedan ska köra mitt program fungerar det inte. Vid prompten skrivs det ut ett felmeddelande men jag förstår inte var i programmet som det blir fel.
SVAR: Slå av just-in-time-kompileringen med:
java -Djava.compiler=NONE FilMedFel.class
och det blir sedan lite lättare att hitta var det går snett.