Programmeren in Java/Klassen: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Infomatisch (overleg | bijdragen)
Infomatisch (overleg | bijdragen)
Regel 143:
Java maakt gebruik van pass by value voor het doorgeven van parameters aan een methode.
De methode gebruikt dus een kopie van de variabele die het meekrijgt van een aanroepende methode. Dit houdt in dat toekenningen die je in de methode doet op deze variabele niet gebeuren op de eigenlijke variabele van de aanroepende methode maar enkel op de kopie. Is de variabele geen primitief type (int, long, double) maar een referentie type (object), en je zou een toekenning doen dan heeft dit ook geen effect op het object dat meegegeven werd. Je kent de referentie immers een andere waarde toe niet het object zelf. de gekopieerde waarde is de referentie en niet het object zelf. Wel kan het object gewijzigd worden met deze referentie die een kopie is van de oorspronkelijke referentie meegegeven met de methode aanroep.
 
Stel nu dat we de volgende code hebben: de class PassByValue met een public attribuut myValue = 10.
 
{{Code|
| Taal=Java
| Titel=PassByValue.java
| Code=<source lang=java>
1: public class PassByValue
2:{
3: public int myValue =10;
4:}
</source>
}}
 
{{Code|
| Taal=Java
| Titel=Program.java
| Code=<source lang=java>
1: public class Program
2: {
3: public void doeIets(int c,int d)
4: {
5: c=20;
6: System.out.println("c:"+c+" d:"+d); //c:20 d:4
7: }
8:
9: public void doSomething(PassByValue pbv)
10: {
11: pbv.myValue =20;
12: pbv=new PassByValue();
13: System.out.println(pbv.myValue);// 10
14: pbv.myValue=30;
15: }
16: public static void main(String[] args)
17: {
18: Program pr=new Program();
19: int a=5;
20: int b=4;
21: pr.doeIets(a,b);
22: System.out.println("a:"+a+" b:"+b);//a:5 b:4
23: PassByValue pbv = new PassByValue();
24: pr.doSomething(pbv);
25: System.out.println(pbv.myValue); //20
26: }
27}
</source>
}}
 
Voor de primitieve typen: We zien op regel 21 dat aan de methode doeIets de waarde 4 aan a en 5 aan b wordt meegegeven.
c is een kopie van variabele a en d één van b. Nu kennen we aan c de waarde 20 toe en we zien dat na terugkeer in main a nog steeds de waarde 5 heeft.
 
Voor de referentie typen: Oorspronkelijk heeft in PassByValue het attribuut myValue de waarde 10. We geven het PassByValue object mee met methode doSomething.
We wijzigen de waarde van myValue via de kopie van de referentie in doSomething naar waarde 20. (We kunnen dus het object wijzigen). Dan in regel 12 laten we pbv naar een nieuw object
wijzen (toekenning) en wijzigen de waarde van myValue naar 30. De laatste regel (25) in main toont nog steeds de waarde 20 voor myValue. De referentie pbv in main na afloop van doSomething wijst nog steeds naar de oorspronkelijke pbv en niet naar het nieuwe PassByValue object aangemaakt in doSomething op regel 12.
 
==public, private, protected==
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.