[Java] Statiska metoder och main
(Fick ett privat mail, men svar får inte vara längre än 2000 tecken. Hoppas du inte känner dig uthängd Seb74 8-) )
Seb74 wrote on Igår 17:29:
Sorry, men det slog mig nyss, som en mardröm som dök upp från ingenstans, att main-metoden är ju static.
Vi gick ju igenom på forumet att statiska metoder kan bara komma åt statiska objekt, men main-metoden fungerar ju som vanligt utan sådana begränsningar (väl?).
Nej ditt påstående är fel. Mainmetoden är inte magisk på något sätt, utan beter sig och har precis samma rättigheter som vilken statisk metod som helst.
Antag att vi till exempel hade en mainmetod i klassen Punkt. Däri fanns ju två variabler, x och y. Vad skulle main anse det vara för värden på den?
Den kan inte anta någonting, och därför fungerar det inte heller.
Statiska metoder är metoder som bara är associerade med en klass, men inte individuella objekt av klassen.
Skulle main i Punkt vilja ha ett Punktobjekt så att den kan komma åt de icke statiska variablerna så får metoden helt enkelt instantiera upp en.
public static void main(String[] args) {
Punkt punkt = new Punkt(1,2);
System.out.println("X är: "+punkt.x);
}
Är det undantag för main, eller är det så att denna åtkomstregel endast gäller internt i varje klass? Så att om main-metoden vill komma åt för den egna klassen globala variabler så måste dessa vara deklarerade som static?
Medans vill den komma åt saker från andra klasser så är det sak samma om den själv är statisk eller ej.
Som sagt mainmetoden är inte annorlunda än någon annan statisk metod.
När JVMen startar så anger man ju en klass. JVMen går då till klassen och kollar om det finns en statisk metod som heter main(String[] ...) och sedan kör den. Det kan egentligen inte vara på annat sätt, för om mainklasen låg i Punkt till exempel så hade inte JVMen kunnat skapa en instans av Punkt eftersom konstruktorn tar två argument. Däremot går ju statiska metoder bra att köra, för de tillhör själva klassen och inte objektinstaner i sig.
Åtkomsträttigheter är inte annorlunda mellan klasser. Det är viktigt att förstå skilnaden mellan en statisk metod och icke statiska metoder, för att de är ju fundamentellt väldigt olika (och kan resultera i totalt kaos ifall man inte förstår dem rätt).
En statisk metod kan ALDRIG komma åt variabler som inte är statiska, för att de finns inte ifrån det statiska "namespacet". Icke statiska variabler finns bara i objekt (dvs instanser av en klass skapad med new) och statiska metoder kan därför inte komma åt dem utan att veta vilket object det är frågan om (de har fått ett objekt som argument till metoden till exempel).
Mycket tacksam för svar....tror jag tänkt för mycket på detta nu
Nejdå, tror det finns lite mer att tänka på det, eftersom allt inte är helt på plats än 8-)
//C