05. november 2001 - 20:00Der er
8 kommentarer og 1 løsning
generelt nemt spørgsmål
Dette spørgsmål omhandler static og ikke static variabler
Jeg har følgende meget simple kode
public class hej { int d;
public static void main(String[]args) { d=5; } Når jeg laver dette får jeg følgende fejl :
\"non-static variable d cannot be referenced from a static context\"
Men det virker fint hvis jeg skriver hvis jeg laver d til at være static...altså static int d;
Jeg forstår ikke hvad der er galt. Umiddelbart vil jeg da sige at inde for den samme klasse burde man kunne få fat i de variabler der er erklæret \"globale\" hvadenten de er static eller ej. Jeg ville være glad hvis der ville være en der ville forklare mig dette \"fænomen\" hehe :) Dette synes jeg umiddelbart ikke giver nogen mening
Så dvs. at alle de variabler og metoder jeg opretter i den klasse hvori main befinder sig SKAL jeg erklære static. Alternativt kunne jeg vel også bare oprette variablerne inde i main metoden. Men alle metoder skal altså være static i den klasse hvor main er. Er det korrekt?
Nej da. kun dem du ønsker at anvende direkte fra main eller fra en anden static metode som main kalder. derudover kan der være masser af nonstatic metoder og variable. For at få adgang til dem fra main må du lave en ny instans af klassen, og så adressere dem igennem den instans.
public static void main(String[]args) { hej nr2 = new hej(); // lav en instant af klasse hej nr2.d = 45; // giv den d der ligger i objektet nr2 en værdi System.out.printLn( \"d i nr2 er \" +nr2.d ); // og skriv den.
public static void main(String[]args) { hej nr2 = new hej(); hej nr3 = new hej(); nr2.d = 45; System.out.println( nr2.d ); nr3.d = 35; // med static er nr2.d og nr3.d samme værdi System.out.println( nr2.d ); d=5; // og det er d også System.out.println( nr2.d ); }
idet variabelen d erklæres som static bliver der udlagt plads i memory til een eneste integer. og i alle de instanser af den klasse der bagefter dannes peger variablen d på den plads.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.