1. Förbigående argument
Och nu börjar det roliga. Du vet säkert redan från sådana metoder System.out.println()
att vi kan överföra argument till metoder. När vi väl är inne i metoden hänvisar vi till dem som parametrar. Faktum är att parametrar avsevärt förbättrar fördelarna vi får av att skapa och använda metoder.
Hur deklarerar vi en metod med parametrar? Det är faktiskt ganska enkelt:
public static void name(parameters)
{
method body
}
Var name
är det unika namnet på metoden och method body
representerar de kommandon som utgör metoden. Och parameters
är en platshållare för metodparametrarna, separerade med kommatecken. Låt oss beskriva denna mall mer detaljerat:
public static void name(Type1 name1, Type2 name2, Type3 name3)
{
method body
}
Exempel:
Koda | Förklaring |
---|---|
|
Metoden print deklareras med en parameter:String str |
|
Metoden print deklareras med två parametrar:String str int count |
|
Metoden write deklareras med två parametrar:int x int y |
Om vi inte vill att metoden ska ha parametrar så lämnar vi bara parenteserna tomma.
Parametrar är speciella variabler inom en metod. Med deras hjälp kan du skicka olika värden till metoden när den anropas.
Låt oss till exempel skriva en metod som visar en textsträng ett givet antal gånger.
Du vet redan hur man skriver kod för att visa en sträng på skärmen flera gånger. Men vilken sträng ska du skriva ut? Och hur många gånger? Det är vad vi behöver parametrarna för.
Koden som gör detta skulle se ut så här:
Koda | Förklaring |
---|---|
|
Vi deklarerade printLines metoden med följande parametrar: String text , int count Metoden visar strängtider text count Vi anropar printLines metoden med olika parametrar |
Varje gång en metod anropas tilldelas dess parametrar de godkända värdena, och först då börjar vi utföra kommandona i metoden.
2. Argument
Jag skulle vilja uppmärksamma er lite mer på att kalla en metod med parametrar.
De värden som skickas till metoden brukar kallas argument när de skickas till metoden.
Låt oss titta på ett annat exempel:
Koda | Förklaring |
---|---|
|
Vi deklarerade printLines metoden med följande parametrar: String text , int count Metoden visar strängtider. text count Vi anropar printLines metoden med följande argument:text = "Hi"; count = 10; text = "Bye"; count = 20; |
När printLines
metoden anropades för första gången tilldelades dess parametrar följande värden: String text = "Hi", int count = 10
.
När printLines
metoden anropades andra gången tilldelades dess parametrar olika värden: String text = "Bye", int count = 20
.
Parametrar är varken mer eller mindre än variabler som tilldelas vissa värden när en metod anropas. Värdena "Hi"
, "Bye"
, 10
och 20
kallas själva argument."
3. Variabelnamn som står i konflikt när en metod anropas
Variabler kan användas som metodargument. Detta är enkelt och förståeligt, men det kan potentiellt orsaka vissa svårigheter. Låt oss gå tillbaka till samma exempel, men den här gången flyttar vi argumenten till separata variabler:
Koda | Förklaring |
---|---|
|
Vi deklarerade printLines metoden med följande parametrar: String text , int count Metoden visar strängtider. text count Vi anropar printLines metoden med följande argument:text = str; count = n; |
Så långt, så bra: vi har en str
variabel. Dess värde tilldelas parametern text
när metoden anropas. Vi har en n
variabel. Dess värde tilldelas parametern count
när metoden anropas." Hittills är allt klart.
Låt oss nu döpa om våra variabler i main
metoden:
Koda | Förklaring |
---|---|
|
Vi deklarerade printLines metoden med följande parametrar: String text , int count Metoden visar strängtider. text count Vi anropar printLines metoden med följande argument:text = text; count = count; |
Var uppmärksam på två saker
För det första: vi har variabler med samma namn i olika metoder. Det här är olika variabler (vi avbildar dem medvetet med olika färger). Allt fungerar på samma sätt som i föregående exempel, där variablerna i main
metoden hette str
och n
.
För det andra: Inget magiskt händer när metoden anropas. Parametrarna tilldelas helt enkelt argumentvärdena. Oavsett om de är tal, strängar, variabler eller uttryck.
Efter att vi bytt namn på variablerna i huvudmetoden har ingenting förändrats. De var olika variabler i olika metoder tidigare, och så förblir de. Det finns ingen magisk koppling mellan variablerna text
och .text
4. Skicka referenser till metoder
Jag hoppas att du förstod allt från förra lektionen, för nu ska vi återkomma till övergående argument till metoder, bara vi kommer att dyka djupare.
Som du redan vet lagrar vissa Java-variabler inte själva värdena, utan istället en referens, dvs adressen till minnesblocket där värdena finns. Så här fungerar strängvariabler och arrayvariabler.
Vad händer när du tilldelar en annan arrayvariabel till en arrayvariabel? Det är rätt. De två variablerna börjar hänvisa till samma utrymme i minnet:
Och vad händer om en av dessa variabler är en metodparameter?
Koda | Förklaring |
---|---|
|
Metoden printArraySum beräknar summan av siffrorna i den passerade arrayen och visar den på skärmen |
Exakt samma sak händer: data
parametern kommer att innehålla en referens till samma minnesområde som variabeln months
. När metoden anropas uppstår en enkel uppgift: .data = months
Och eftersom båda variablerna hänvisar till samma område i minnet som lagrar ett heltal, printArraySum
kan metoden inte bara läsa värden från arrayen, utan också ändra dem!
Till exempel kan vi skriva en egen metod som fyller en tvådimensionell array med samma värde. Så här kan det se ut:
Koda | Förklaring |
---|---|
|
Metoden fill itererar över varje cell i den passerade tvådimensionella arrayen och tilldelar value dem. Vi skapar en tvådimensionell array. Vi fyller hela arrayen med numret 8 . |
5. Metoder med samma namn
Låt oss nu återgå till metodnamnen igen.
Java-standarder kräver att alla metoder i samma klass har unika namn. Med andra ord är det omöjligt att deklarera två identiskt namngivna metoder i samma klass.
När metoder jämförs med avseende på likhet beaktas inte bara namnen utan även parametrarnas typer ! Observera att namnen på parametrarna inte tas med i beräkningen . Exempel:
Koda | Förklaring |
---|---|
|
Dessa tre metoder är olika metoder. De kan deklareras i samma klass. |
|
Var och en av dessa fem metoder anses vara olika . De kan deklareras i samma klass. |
|
Dessa två metoder anses vara samma , vilket innebär att de inte kan deklareras i samma klass. |
Varför anses vissa metoder vara lika , medan andra är olika ? Och varför beaktas inte parameternamn när man bestämmer en metods unika karaktär?
Varför behövs det unika överhuvudtaget? Saken är den att när kompilatorn kompilerar ett program måste den veta exakt vilken metod du tänker anropa på vilken plats som helst.
Om du till exempel skriver , är kompilatorn smart och kommer lätt att dra slutsatsen att du tänker anropa metoden här med en parameter.System.out.println("Hi")
println()
String
Men om du skriver kommer kompilatorn att se ett anrop till metoden med en parameter.System.out.println(1.0)
println()
double
När en metod anropas ser kompilatorn till att typerna av argument matchar parametrarnas typer. Det ägnar ingen uppmärksamhet åt namnet på argumenten. I Java hjälper inte parameternamn kompilatorn att avgöra vilken metod som ska anropas. Och det är därför de inte tas med i beräkningen när man bestämmer unikheten hos en metod.
Namnet på en metod och typerna av dess parametrar kallas metodsignaturen . Till exempel,sum(int, int)
Varje klass måste ha metoder med unika signaturer snarare än metoder med unika namn.
GO TO FULL VERSION