06. april 2008 - 15:23Der er
7 kommentarer og 1 løsning
Non-static method (Nybegynder fejl, tror jeg)
Hej Eksperter.
Jeg er i gang med en skole opgave, og har lidt problemer med det her, jeg har de her 2 classes i samme package som hedder (VRS), og jeg bliver ved med at få denne fejl: "non-static method calcLateFees(int) cannot be referenced from a static context"
Ved denne linje i Rental.class: "fee = VRS.Action.calcLateFees(pDaysLate);"
Hvis jeg blot skriver "VRS.Action.", kommer den kun frem og foreslår at jeg kan skrive "class" efter punktumet, og det forstår jeg ikke helt.
Det er et meget almindeligt nybegynder problem. Det du mangler er rigtigt at forstå forskellen på 'static' og 'ikke static'
Du har sikkert til bevidstløshed hørt den der med at når du een har defineret en 'Bil' klasse kan du lave så mange objekter du vil af typen 'Bil'
Det passer, men der er en undtagelse. og den undtagelse er de ting in klassen 'Bil' der bliver erklæret static.
fx: class Bil { public String mærke; public static int antalBiler = 0;
public Bil ( String mærke ) { // constructor metoden this.type = mærke; antalBiler++; }
//... altmulig andet du vil definere i klassen Bil }
Bemærk at variablen 'antalBiler' er static. det er de to andre ikke og det gør en gevaldig forskel i hvordan de virker og hvordan de kan bruges.
Så definere du et par Bil objekter
Bil førsteBil = new Bil( "Ford" ); Bil andenBil = new Bil( "Toyota" );
For hvert Bil objekt du laver bliver der lavet en ny String variabel ved navn mærke, og den variabel tilhører det Bil objekt du laver netop der.
men den statiske variabel antalBiler er anderledes der eksisterer kun een, og den ene bliver oprettet hvis du bare nævner klassen Bil i dit program. Den bliver lavet selvom du måske ikke opretter et eneste Bil objekt.
Så for at adresserere den behøver du bare at angive klassenavnet Bil.antalBiler.
Men for at addresere den ikke statiske variabel mærke er du nødt til at pege på præcis det Bil objelt den ønskede mærke variabel ligger i førsteBil.mærke indeholder "Ford" andenBil.mærke indeholder "Toyota" og hvis du skriver Bil.mærke brokker compileren sig fordi det er jo ikke nok til at forklare hvilken af de oprettede mærke variable du vil have fat i
Og for en sikkerheds skyld brokker den sig også hvis du kalder en ikke-statisk metode, for de kunne jo være at du i den metode refererer til en ikke statisk variabel. Det ville jo gå galt fordi metoden ikke ved hvilken at de oprettede objekter den bliver kaldt i.
Mange tak for forklaringen :) Men ja jeg fandt godt ud af det, bare på den "hårde" måde :P
Synes godt om
Ny brugerNybegynder
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.