Avatar billede janus_007 Nybegynder
07. oktober 2002 - 00:48 Der er 9 kommentarer og
2 løsninger

non-static method ... cannot

Som den nybegynder jer er i Java, er jeg rendt ind i et lille simpelt spørgsmål!

jeg har flg.

public static void main(String args[]){

System.out.println("Starting...")
Go();
}

public void Go(){
System.out.println("Go Go Go")
}

Jeg får at vide "non-static method Go() cannot be referenced from a static context" Jeg er ikke int. i at lave alle mine metoder statiske for at få det til at funke. Hvordan kalder jeg en normal metode fra en static, eller rettere hvordan starter jeg mit program?, da main er den eneste metode der bliver kaldt ved start og jeg vil jo gerne kunne fortsætte programløbet i andre metoder??

Med venlig hilsen
Janus
Avatar billede erikjacobsen Ekspert
07. oktober 2002 - 00:56 #1
Du kan lave Go() statisk, eller oprette et objekt med "new" - hvorefter
du kan kalde normale funktioner (som Go()) i dette objekt.
Avatar billede =maddog= Nybegynder
07. oktober 2002 - 01:01 #2
du kan ikke kalde en normal metode fra en statisk. En normal metode er tilknyttet en INSTANS af klasse mens en ststisk metode er GENEREL for klassen.
Du laver main metoden statisk, fordi du jo ikke skal oprette et objekt for at køre den, men skal køre den seperat af klassen.
Du kan derimod godt køre en ikke statisk metode fra en statisk, hvis og kun hvis du anvender en instans.
public class Test
{
    public Test() {    } // en konstruktoy
    public static void main(String args[]){
        System.out.println("Starting...");
        Test test = new Test(); // vi laver en instans af Test så vi kan bruge metoden go
        test.go();
    }

    public void go() {
        System.out.println("Go Go Go");
    }
}
Avatar billede disky Nybegynder
07. oktober 2002 - 06:56 #3
Det bedste er at kalde din klasses Constructor direkte fra din main metode:
class Test
{
public static void main(String args[])
{
  System.out.println("Starting...")
  new Test();
}

public Test()
{
  Go();
}

public void Go()
{
  System.out.println("Go Go Go")
}
}
Avatar billede =maddog= Nybegynder
07. oktober 2002 - 07:16 #4
Tjoe, det afhænger jo af situationen. Det kan være han vil kalde metoden Go flere gange. Lidt svært med så spinkelt et eksempel.
Avatar billede disky Nybegynder
07. oktober 2002 - 08:14 #5
Smag og behag.
Avatar billede cybermazedk Nybegynder
07. oktober 2002 - 17:36 #6
Man må selv bestemme. Begge løsninger er acceptable.

Den måde go() skal bruges på, kan påvirke hvilken løsning man vælger ...
Avatar billede janus_007 Nybegynder
07. oktober 2002 - 19:58 #7
Tak for hjælpen!!
Avatar billede cybershah Nybegynder
17. januar 2005 - 00:34 #8
ved godt det er et gammelt spm..

du kan faktisk også gøre følgende:

public static void main(String args[])
{
System.out.println("Starting...")
Go();
}

public static void go()
{
System.out.println("Go Go Go")
}
Avatar billede cybershah Nybegynder
17. januar 2005 - 00:34 #9
ved godt det er et gammelt spm..

du kan faktisk også gøre følgende:

public static void main(String args[])
{
System.out.println("Starting...")
Go();
}

public static void Go()
{
System.out.println("Go Go Go")
}
Avatar billede erikjacobsen Ekspert
17. januar 2005 - 00:36 #10
Var det ikke det jeg skrev: 07/10-2002 00:56:46  ? ;))
Avatar billede cybershah Nybegynder
19. januar 2005 - 09:04 #11
erikjacobsen>> jo det var det vel! havde ik lige set den.. kiggede kun koderne igennem! men han er nok selv blevet meget klogere på området siden. ;-)
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