"Hei Amigo! Jeg håper du likte å løse oppgaver ved hjelp av dine egne metoder, og at du innser hvor praktisk det er å lage metoder. La oss nå snakke om det mest interessante emnet av alle."
"Du har vakt min interesse, Diego... Et nytt emne?"
"Hvert emne er nytt for deg, min unge robot! Og denne er intet unntak. Selv om det nok en gang handler om metoder. Du har sikkert allerede lagt merke til fra metoder som at vi kan overføre argumenter til metoder. Når vi først er inne i System.out.println()
metoden , refererer vi til dem som parametere."
"Parametere er det vi skriver innenfor parentesen?"
"Ja, akkurat. Og faktisk øker parametere i stor grad fordelene vi får ved å lage og bruke metoder."
"Jeg forstår hva du sier om å bruke dem, og det viser seg at jeg allerede har gjort det. Hvordan deklarerer vi en metode med parametere?"
"Det er faktisk ganske enkelt:
public static void name(parameters)
{
method body
}
"Hvor name
er det unike navnet på metoden og method body
representerer kommandoene som utgjør metoden. Og parameters
er en plassholder for metodeparametrene, atskilt med komma."
"Hmm... jeg tror jeg forstår... Eller kanskje ikke..."
"La meg gi deg noen flere detaljer om denne malen slik at du er sikker på at du forstår at du forstår:
public static void name(Type1 name1, Type2 name2, Type3 name3)
{
method body
}
Her er noen eksempler:
Kode | Forklaring |
---|---|
|
Metoden print er deklarert med en parameter:String str |
|
Metoden print er deklarert med to parametere:String str int count |
|
Metoden write er deklarert med to parametere:int x int y |
"Ah... Nå er det klart. Og hvis vi ikke vil at metoden skal ha parametere, så lar vi bare parentesen stå tom."
"Nettopp. I utgangspunktet er parametere spesielle variabler innenfor en metode. Med deres hjelp kan du sende ulike verdier til metoden når den kalles. Og hvis du ikke trenger å sende verdier, lar du parentesene stå tomme.
"La oss for eksempel skrive en metode som viser en gitt tekstlinje et gitt antall ganger. Noen tanker om hvordan dette gjøres?"
"Vel... Det virker som om jeg er godt klar over hvordan man skriver kode for å vise en streng på skjermen flere ganger..."
"Hvordan angir du strengen som skal vises? Og hvordan angir du antall viste linjer? Kan du gjette?"
"Ting begynner å bli klart... Trolig ved hjelp av metodeparametere?"
"Nøyaktig. En strengparameter for tekstlinjen, og en numerisk parameter for antall viste linjer. Koden som gjør dette vil se slik ut:
Kode | Forklaring |
---|---|
|
Vi erklærte printLines metoden med følgende parametere: String text , int count Metoden viser strengtider text count Vi kaller printLines metoden med ulike parametere |
"Hver gang en metode kalles, blir dens parametere tildelt de beståtte verdiene, og først da begynner vi å utføre kommandoene inne i metoden.
Argumenter
"Jeg vil at du skal være spesielt oppmerksom på å kalle metoder som har parametere. Verdiene som sendes til metoden kalles vanligvis argumenter når de sendes til metoden.
La oss ta en ny titt på eksemplet vårt:
Kode | Forklaring |
---|---|
|
Vi erklærte printLines metoden med følgende parametere: String text , int count Metoden viser strengtider. text count Vi kaller printLines metoden med følgende argumenter:text = "Hi"; count = 10; text = "Bye"; count = 20; |
"Da printLines
metoden ble kalt for første gang, ble dens parametere tildelt følgende verdier:
String text = "Hi", int count = 10
.
"Da printLines
metoden ble kalt andre gang, ble dens parametere tildelt forskjellige verdier:
String text = "Bye", int count = 20
.
"Parametere er hverken mer eller mindre enn variabler som tildeles bestemte verdier når en metode kalles. Verdiene "Hi"
, "Bye"
, 10
, og 20
kalles i seg selv argumenter."
"Jeg skal prøve å huske forskjellen og ikke forveksle disse konseptene."
Motstridende variabelnavn når du kaller en metode
"Når du kaller en metode, kan du bruke variabler som argumenter.
"Vel, det gir mening!"
"Det er fornuftig, men det kan potensielt skape noen vanskeligheter. La oss gå tilbake til eksemplet vårt igjen, men denne gangen flytter vi argumentene inn i separate variabler:
Kode | Forklaring |
---|---|
|
Vi erklærte printLines metoden med følgende parametere: String text , int count Metoden viser strengtider. text count Vi kaller printLines metoden med følgende argumenter:text = str; count = n; |
"Hmm... Jeg ser ingen vanskeligheter. Vi har en str
variabel. Dens verdi tildeles parameteren text
når metoden kalles. Vi har en n
variabel. Dens verdi tilordnes parameteren count
når metoden kalles." — Så langt er alt klart.
"Bra, bra. La oss nå gi nytt navn til variablene våre i main
metoden:
Kode | Forklaring |
---|---|
|
Vi erklærte printLines metoden med følgende parametere: String text , int count Metoden viser strengtider. text count Vi kaller printLines metoden med følgende argumenter:text = text; count = count; |
"Vær oppmerksom på to ting
For det første: vi har variabler med samme navn i forskjellige metoder. Dette er forskjellige variabler (vi viser dem bevisst med forskjellige farger). Alt fungerer på samme måte som i forrige eksempel, hvor variablene i main
metoden ble navngitt str
og n
.
For det andre: Ingenting magisk skjer når metoden kalles. Parametrene blir ganske enkelt tildelt argumentverdiene. Uansett om de er tall, strenger, variabler eller uttrykk.
"Etter at vi har gitt nytt navn til variablene i hovedmetoden, har ingenting endret seg. De var forskjellige variabler i forskjellige metoder tidligere, og slik forblir de. Det er ingen magisk sammenheng mellom de to text
variablene."
"Nå vet jeg det."
Sende referanser til metoder
"Jeg håper du allerede har assimilert alt jeg har fortalt deg om å overføre argumenter til metoder. Jeg sier det, fordi vi nå skal dykke litt dypere inn i dette emnet. Hør nøye."
"Du vet allerede at noen variabler i Java ikke lagrer verdiene i seg selv, men i stedet en referanse , dvs. adressen til minneblokken der verdiene er plassert. Slik fungerer strengvariabler og arrayvariabler.
"Når en utvikler tildeler en annen matrisevariabel til en matrisevariabel, hva skjer?"
— Peker de da på samme adresse?
"Riktig. De to variablene begynner å referere til samme plass i minnet:

"Og hva skjer hvis en av disse variablene er en metodeparameter?
Kode | Forklaring |
---|---|
|
Metoden sum beregner summen av tallene i den beståtte matrisen og viser den på skjermen |
"Nøyaktig det samme skjer: data
parameteren vil inneholde en referanse til samme minneområde som months
variabelen. Når metoden kalles oppstår en enkel tilordning: .data = months
"Og siden begge variablene refererer til det samme området av minnet som lagrer et heltall, sum
kan metoden ikke bare lese verdier fra matrisen, men også endre dem!"
"Jeg skjønner vel, men jeg trenger flere eksempler!"
"Vel, for eksempel, vi kan skrive vår egen metode som fyller en todimensjonal matrise med samme verdi. Slik kan det se ut:
Kode | Forklaring |
---|---|
|
Metoden fill itererer over hver celle i den passerte todimensjonale matrisen og tildeler value dem. Vi lager en todimensjonal matrise. Vi fyller hele matrisen med nummeret 8 . |
Metoder med samme navn
"La oss nå gå tilbake til metodenavn igjen."
"Jeg kan ikke forestille meg hva annet som kan sies om navn!"
"Vel, Java-språkstandarden krever at alle metoder i samme klasse har unike navn.
"Så, det er umulig å erklære to identisk navngitte metoder i samme klasse?"
"Nå - følg godt med! Metoder i en klasse kan faktisk ha identiske navn! Men i dette tilfellet må de ha forskjellige parametere. Med andre ord, metoder sammenlignes for likhet, ikke bare blir navnene tatt i betraktning, men også typene av parametere ! Merk at jeg spesifikt sa typer. Navnene på parameterne er ikke tatt i betraktning . Eksempler:
Kode | Forklaring |
---|---|
|
Disse tre metodene er forskjellige metoder. De kan deklareres i samme klasse. |
|
Hver av disse fem metodene anses som forskjellige . De kan deklareres i samme klasse. |
|
"Disse to metodene anses som de samme , noe som betyr at de ikke kan deklareres i samme klasse." |
"Jeg er helt forvirret! Hvorfor trenger vi alt dette? Hvorfor regnes noen metoder som like , mens andre er forskjellige ? Og hvorfor tas det ikke hensyn til parameternavn når man bestemmer en metodes unikhet? Hvorfor er unikhet nødvendig ved alle?"
"Tingen er at når kompilatoren kompilerer et program, må den vite nøyaktig hvilken metode du har tenkt å kalle på et gitt sted.
"For eksempel, hvis du skriver , er kompilatoren smart og vil lett konkludere med at du har tenkt å kalle metoden her med en parameter. Men hvis du skriver , vil kompilatoren se et kall til metoden med en parameter. Den har ingen anelse om hvilket navn programmereren ga til parameteren da han erklærte metoden."System.out.println("Hi")
println()
String
System.out.println(1.0)
println()
double
Ahh, det ser ut til å begynne å komme igjennom!
"Når en metode kalles, sørger kompilatoren for at typene av argumentene samsvarer med typene av parameterne. Den tar ikke hensyn til navnet på argumentene. I Java hjelper ikke parameternavn kompilatoren med å bestemme hvilken metode som skal Programmerere trenger dem, ikke kompilatoren.
"Og jeg antar at det er derfor de ikke blir tatt i betraktning når man skal bestemme det unike ved en metode?"
"Ja, det er helt riktig. Navnet på en metode og typene av dens parametere kalles metodesignaturen . For eksempel sum (int, int)
"
"Så hver klasse må ha metoder med unike signaturer i stedet for metoder med unike navn."
"Godt gjort, Amigo! Du oppsummerte denne leksjonen perfekt. Hvis noe forblir uklart, ikke få panikk. Dette emnet vil bli klart etter et par oppgaver."
GO TO FULL VERSION