java eljárás paraméterei

Amikor hívja argumentumokat „az érték”. Más szóval, a paraméterek értéke a módszer teste - egy másolata azokat az objektumokat, amelyek kód kezdeményezője át paraméterként a módszert. Ha például az eljárás veszi argumentum értéke típusú kettős, a szervezetben az eljárás másolatot készít a megfelelő paraméterértékek, és az esetleges módosításokat a másolási működése során az eljárás nem érinti a tartalmát a változók a code-kezdeményező. Tekintsük a következő példát:

osztály PassByValue

public static void main (String [] args)

Sustem.out.println ( "fel: az egyik =" + egy);

Sustem.out.println ( "után: az egyik =" + egy);

public static void halveIt (dupla arg)

Arg / = 2,0; // Osszuk értékének felét arg

sustem.out.println ( "fele: Arg =" + arg);

Az alábbi ábra a program eredményeként - osztás paraméter értékeket arg halveIt eljárás nem befolyásolja a tartalmát egy változó egyik módszer a test fő.

fele: arg = 0,5

osztály PassRef

public static void main (String [] args)

Body venus = new Test ( "Benepa", null);

Sustem.out.rgintln ( "amíg:" + venus);

Sustem.out.rgintln ( "után:" + venus);

public static void commonName (Body bodyRef)

bodyRef.name = "hajnalcsillag";

A program eredményeként a következő:

Következő lehet: 0 (Hajnalcsillag)

Felhívjuk figyelmét, hogy az állam a „külső” kapcsolatos eljárás commonName objektum módosítható „belső” ezt a módszert; Ezen túlmenően, a Vénusz a változó még mindig megmarad a hivatkozás ugyanarra az objektumra Body osztály, és a módszer commonName copy bodyRef referencia változó venus kapott egy érték - null. Mindez természetesen igényel részletesebb magyarázatot.

Az alábbi ábra az állapotváltozók után közvetlenül egy hívást fő SommonName módszer.

Ezen a ponton két változó, venus a fő és bodyRef commonName pont ugyanarra az objektumra. Amikor commonName Eljárás változás bodyRef.name mező által módosított tartalma ugyanaz a tárgy, amely közös a két referencia változó. Amikor commonName rendel bodyRef értéke null, a változó csak a változó tartalmát maga bodyRef; venus referencia állapot ugyanaz marad, mint bodyRef paraméter - egy példányt a változó venus, telt érvként az értéket. Az egyetlen adat, hogy az utóbbi elem van kitéve - a beállítás bodyRef mint olyan (ugyanaz volt megfigyelhető az előző példában, ha az csak a „sértett” fél az eljárásban halveIt módszer bizonyítja arg paraméter). Ha a változás bodyRef befolyásolja venus értéket fő után egy string. jelenik meg a képernyőn, akkor szót tartalmazó null. Ami az első értékadás a szervezetben a módszer commonName (. BodyRef name = ...), meg kell ismételni még egyszer: egy és ugyanazon tárgy ugyanakkor azt mutatják, a két változó, venus fő- és bodyRef a commonName, így változik az állam az objektum hivatkozásként bodyRef, akkor látható, ha a tárgy elérésekor az egyéb meglévő kapcsolatok (különösen venus).

Van sok közös, így az ítélet helytelen, és hogy a Java objektumok állítólag át „való hivatkozással.” Elméletileg, programozási nyelvek, a kifejezés átviteli kapcsolat elegendő upotrebitelny, szigorúan véve, a következőt jelenti: ha az argumentum a funkciót, a hívott függvény kap egy hivatkozás az eredeti érték, de nem egy példányt az értéket. Ha a test a függvény értéke megváltozik, a megfelelő adatokat a kód hívást kezdeményez, az is változhatnak, és a paraméter érvként azt mutatják ugyanazt a memória blokk. Ha a Java ténylegesen használhatja argumentumokat hivatkozással, volt egy módja annak, hogy állapítsa meg a módszer halveIt úgy, hogy a belső kód értékének módosításához külső változóra, és lehetővé teszi az eljárás SommonName értékének módosításához venus null. De ez nem lehetséges. A Java objektumok átadása hivatkozás - referencia PA tárgyak érték szerint adódnak át. Mivel két példányban ugyanazt a referencia változó pont egy tárgy, bármilyen változás az állam egy objektum által termelt egy link lesz „látható” a másikat. Csak egy módja annak, hogy át argumentumokat (értékben), és jelentősen egyszerűsíti az élet.

Kapcsolódó cikkek