"Hallo Amigo! Ik hoop dat je het leuk vond om taken op te lossen met je eigen methoden, en dat je je realiseert hoe handig het is om methoden te creëren. Laten we het nu hebben over het meest interessante onderwerp van allemaal."
'Je hebt mijn interesse gewekt, Diego... Een nieuw onderwerp?'
"Elk onderwerp is nieuw voor jou, mijn jonge robot! En dit is geen uitzondering. Hoewel het weer over methoden gaat. Je hebt waarschijnlijk al gemerkt dat we bij dergelijke methoden argumenten kunnen doorgeven aan methoden. Als we eenmaal binnen de methode System.out.println()
zijn , noemen we ze parameters."
"Parameters zijn wat we tussen haakjes schrijven?"
"Ja, precies. En in feite vergroten parameters enorm de voordelen die we halen uit het creëren en gebruiken van methoden."
"Ik begrijp wat je zegt over het gebruik ervan, en het blijkt dat ik het al heb gedaan. Hoe declareren we een methode met parameters?"
"Het is eigenlijk heel simpel:
public static void name(parameters)
{
method body
}
"Waar name
is de unieke naam van de methode en method body
vertegenwoordigt de commando's waaruit de methode bestaat. En parameters
is een tijdelijke aanduiding voor de methodeparameters, gescheiden door komma's."
"Hmm... ik denk dat ik het begrijp... Of misschien ook niet..."
"Laat me je wat meer details geven over deze sjabloon, zodat je zeker weet dat je begrijpt dat je begrijpt:
public static void name(Type1 name1, Type2 name2, Type3 name3)
{
method body
}
Hier zijn enkele voorbeelden:
Code | Uitleg |
---|---|
|
De print methode wordt gedeclareerd met een parameter:String str |
|
De print methode wordt gedeclareerd met twee parameters:String str int count |
|
De write methode wordt gedeclareerd met twee parameters:int x int y |
"Ah... Nu is het duidelijk. En als we niet willen dat de methode parameters heeft, dan laten we de haakjes gewoon leeg."
"Precies. In wezen zijn parameters speciale variabelen binnen een methode. Met hun hulp kun je verschillende waarden doorgeven aan de methode wanneer deze wordt aangeroepen. En als je geen waarden hoeft door te geven, laat je de haakjes leeg.
"Laten we bijvoorbeeld een methode schrijven die een bepaalde regel tekst een bepaald aantal keren weergeeft. Heb je enig idee hoe je dit kunt doen?"
"Nou... het lijkt erop dat ik goed weet hoe ik code moet schrijven om een string meerdere keren op het scherm weer te geven..."
"Hoe specificeer je de weer te geven string? En hoe specificeer je het aantal weergegeven regels? Kun je raden?"
"Het begint duidelijk te worden... Waarschijnlijk met behulp van methodeparameters?"
"Precies. Een tekenreeksparameter voor de regel tekst en een numerieke parameter voor het aantal weergegeven regels. De code die dit doet, ziet er als volgt uit:
Code | Uitleg |
---|---|
|
We hebben de printLines methode gedeclareerd met de volgende parameters: String text , int count De methode geeft stringtijden weer text count We noemen de printLines methode met verschillende parameters |
"Elke keer dat een methode wordt aangeroepen, krijgen de parameters de doorgegeven waarden toegewezen en pas dan beginnen we de opdrachten binnen de methode uit te voeren.
Argumenten
"Ik wil dat je speciale aandacht besteedt aan het aanroepen van methoden die parameters hebben. De waarden die aan de methode worden doorgegeven, worden gewoonlijk argumenten genoemd wanneer ze aan de methode worden doorgegeven.
Laten we nog eens naar ons voorbeeld kijken:
Code | Uitleg |
---|---|
|
We hebben de printLines methode gedeclareerd met de volgende parameters: String text , int count De methode geeft String text count tijden weer We noemen de printLines methode met de volgende argumenten:text = "Hi"; count = 10; text = "Bye"; count = 20; |
"Toen de printLines
methode voor het eerst werd aangeroepen, kregen de parameters de volgende waarden toegewezen:
String text = "Hi", int count = 10
.
"Toen de printLines
methode voor de tweede keer werd aangeroepen, kregen de parameters verschillende waarden toegewezen:
String text = "Bye", int count = 20
.
"Parameters zijn niet meer en niet minder dan variabelen waaraan bepaalde waarden worden toegewezen wanneer een methode wordt aangeroepen. De waarden "Hi"
, "Bye"
, 10
, en 20
worden zelf argumenten genoemd."
"Ik zal proberen het verschil te onthouden en deze concepten niet door elkaar te halen."
Conflicterende namen van variabelen bij het aanroepen van een methode
"Als je een methode aanroept, kun je variabelen als argumenten gebruiken.
"Nou, dat is logisch!"
"Het is logisch, maar het kan mogelijk problemen opleveren. Laten we nogmaals teruggaan naar ons voorbeeld, maar deze keer verplaatsen we de argumenten naar afzonderlijke variabelen:
Code | Uitleg |
---|---|
|
We hebben de printLines methode gedeclareerd met de volgende parameters: String text , int count De methode geeft String text count tijden weer We noemen de printLines methode met de volgende argumenten:text = str; count = n; |
"Hmm... ik zie geen problemen. We hebben een str
variabele. De waarde ervan wordt toegewezen aan de text
parameter wanneer de methode wordt aangeroepen. We hebben een n
variabele. De waarde wordt toegewezen aan de count
parameter wanneer de methode wordt aangeroepen." "Tot nu toe is alles duidelijk."
"Goed, goed. Laten we nu onze variabelen hernoemen in de main
methode:
Code | Uitleg |
---|---|
|
We hebben de printLines methode gedeclareerd met de volgende parameters: String text , int count De methode geeft String text count tijden weer We noemen de printLines methode met de volgende argumenten:text = text; count = count; |
"Let op twee dingen
Ten eerste: we hebben variabelen met dezelfde naam in verschillende methoden. Dit zijn verschillende variabelen (we geven ze bewust weer met verschillende kleuren). Alles werkt hetzelfde als in het vorige voorbeeld, waar de variabelen in de methode de naam and main
kregen .str
n
Ten tweede: er gebeurt niets magisch als de methode wordt aangeroepen. Aan de parameters worden eenvoudigweg de argumentwaarden toegewezen. Ongeacht of het getallen, strings, variabelen of uitdrukkingen zijn.
"Nadat we de variabelen in de hoofdmethode een andere naam hebben gegeven, is er niets veranderd. Het waren voorheen verschillende variabelen in verschillende methodentext
, en dat blijven ze. Er is geen magisch verband tussen de twee variabelen."
"Nu weet ik het."
Verwijzingen naar methoden doorgeven
'Ik hoop dat je alles al hebt begrepen wat ik je heb verteld over het doorgeven van argumenten aan methoden. Dat zeg ik, omdat we nu wat dieper op dit onderwerp gaan ingaan. Luister goed.'
"Je weet al dat sommige variabelen in Java niet de waarden zelf opslaan, maar in plaats daarvan een referentie , dat wil zeggen het adres van het geheugenblok waar de waarden zich bevinden. Dit is hoe stringvariabelen en arrayvariabelen werken.
"Wat gebeurt er als een ontwikkelaar een andere arrayvariabele toewijst aan een arrayvariabele?"
"Wijzen ze dan naar hetzelfde adres?"
"Juist. De twee variabelen beginnen te verwijzen naar dezelfde ruimte in het geheugen:
"En wat gebeurt er als een van deze variabelen een methodeparameter is?
Code | Uitleg |
---|---|
|
De sum methode berekent de som van de getallen in de doorgegeven array en geeft deze weer op het scherm |
"Precies hetzelfde gebeurt: de data
parameter bevat een verwijzing naar hetzelfde geheugengebied als de months
variabele. Wanneer de methode wordt aangeroepen, vindt er een eenvoudige toewijzing plaats: .data = months
"En aangezien beide variabelen verwijzen naar hetzelfde geheugengebied waarin een geheel getal is opgeslagen, sum
kan de methode niet alleen waarden uit de array lezen, maar ze ook wijzigen!"
"Ik denk dat ik het begrijp, maar ik heb meer voorbeelden nodig!"
"Nou, we kunnen bijvoorbeeld onze eigen methode schrijven die een tweedimensionale array met dezelfde waarde vult. Zo zou het eruit kunnen zien:
Code | Uitleg |
---|---|
|
De fill methode herhaalt elke cel in de doorgegeven tweedimensionale array en wijst value ze toe. We maken een tweedimensionale array. We vullen de hele array met het getal 8 . |
Methoden met dezelfde naam
"Laten we nu nog eens teruggaan naar de namen van methoden."
'Ik kan me niet voorstellen wat er nog meer over namen zou kunnen worden gezegd!'
"Nou, de Java-taalstandaard vereist dat alle methoden in dezelfde klasse unieke namen hebben.
"Dus het is onmogelijk om twee methoden met dezelfde naam in dezelfde klasse te declareren?"
"Nu - let goed op! Methoden in een klasse kunnen inderdaad identieke namen hebben! Maar in dit geval moeten ze verschillende parameters hebben. Met andere woorden, methoden worden vergeleken op gelijkheid, er wordt niet alleen rekening gehouden met de namen, maar ook de types van de parameters !Merk op dat ik specifiek de types zei.Er wordt geen rekening gehouden met de namen van de parameters.Voorbeelden :
Code | Uitleg |
---|---|
|
Deze drie methoden zijn verschillende methoden. Ze kunnen in dezelfde klasse worden gedeclareerd. |
|
Elk van deze vijf methoden wordt als verschillend beschouwd . Ze kunnen in dezelfde klasse worden gedeclareerd. |
|
"Deze twee methoden worden als hetzelfde beschouwd , wat betekent dat ze niet in dezelfde klasse kunnen worden gedeclareerd." |
"Ik ben helemaal in de war! Waarom hebben we dit allemaal nodig? Waarom worden sommige methoden als hetzelfde beschouwd , terwijl andere anders zijn ? En waarom wordt er geen rekening gehouden met parameternamen bij het bepalen van de uniciteit van een methode? Waarom is uniciteit noodzakelijk bij alle?"
"Het punt is dat wanneer de compiler een programma compileert, hij precies moet weten welke methode je op een bepaalde plaats wilt aanroepen.
"Als je bijvoorbeeld schrijft , is de compiler slim en zal hij gemakkelijk concluderen dat je van plan bent de methode hier aan te roepen met een parameter. Maar als je schrijft , ziet de compiler een aanroep naar de methode met een parameter. Hij heeft geen idee welke naam de programmeur aan de parameter heeft gegeven bij het declareren van de methode."System.out.println("Hi")
println()
String
System.out.println(1.0)
println()
double
Ahh, het lijkt door te dringen!
"Wanneer een methode wordt aangeroepen, zorgt de compiler ervoor dat de typen argumenten overeenkomen met de typen parameters. Er wordt geen aandacht besteed aan de naam van de argumenten. In Java helpen parameternamen de compiler niet om te bepalen welke methode moet worden gebruikt. Programmeurs hebben ze nodig, niet de compiler.
"En ik denk dat ze daarom niet in aanmerking worden genomen bij het bepalen van het unieke karakter van een methode?"
"Ja, dat klopt helemaal. De naam van een methode en de typen van zijn parameters worden de methodehandtekening genoemd . Bijvoorbeeld, sum (int, int)
"
"Dus elke klasse moet methoden hebben met unieke handtekeningen in plaats van methoden met unieke namen."
"Goed gedaan, Amigo! Je hebt deze les perfect samengevat. Als er iets onduidelijk blijft, geen paniek. Dit onderwerp zal na een paar taken duidelijk worden."
GO TO FULL VERSION