Avatar billede bumle90 Nybegynder
05. november 2001 - 20:00 Der 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
Avatar billede jakoba Nybegynder
05. november 2001 - 20:08 #1
i og med at din main  metode er stativ findes der kun een eneste af den,

men d er ikke static så hvis du skabte 10 instanser af hej ville der være 10 d variable at vælge imellem.

main har ingen mulighed for at vælge hvilken d du mener nå de ikke er static.

mvh JakobA
Avatar billede jakoba Nybegynder
05. november 2001 - 20:10 #2
ups.  stativ -> static
Avatar billede bumle90 Nybegynder
05. november 2001 - 20:19 #3
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?
Avatar billede jakoba Nybegynder
05. november 2001 - 20:45 #4
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.

    d=5;  // men denne linie giver stadig fejl
}

mvh JakobA
Avatar billede jakoba Nybegynder
05. november 2001 - 20:54 #5
Ups.  println er med lille l.

men prøv med:

public class hej {
  int d;

  public static void main(String[]args) {
    hej nr2 = new hej();
    nr2.d = 45;
    System.out.println( nr2.d );
//    d=5;
  }

} //endclass hej
Avatar billede jakoba Nybegynder
05. november 2001 - 20:58 #6
Og prøv så bagefter

public class hej {
  static int d;

  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 );
  }

} //endclass hej
Avatar billede bumle90 Nybegynder
05. november 2001 - 22:04 #7
hvorfor får de samme værdi?
Avatar billede jakoba Nybegynder
05. november 2001 - 22:43 #8
de er den samme variabel allesammen.

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.

mvh JakobA
Avatar billede bumle90 Nybegynder
05. november 2001 - 23:17 #9
ok. tak skal du have
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester