Sib sib zog nqus daim qauv los yog daim ntawv ntiav rau Java – yuav xaiv li cas?

Deep_shallow_copy

Sib sib zog nqus luam thiab daim ntawv ntiav

Txheej txheem cej luam: Nyob rau cov tshooj no peb yuav tham txog txoj kev luam khoom nyob rau hauv java. Lub hom phiaj rau kev luam yuav sib txawv raws li qhov yuav tsum tau ua daim ntawv thov. Tiam sis muaj ntau mas ob hom kev luam muaj, daim ntawv sib sib zog nqus thiab ntiav. Cov qauv rau kev luam nws txawv cov le caag ob.

Taw qhia:
Qhov kev txiav txim rau kev luam tus muab ntawm ib yam twj paj nruas rau lwm hom ntaub ntawv hu ua daim paj nruas. Nyob rau hauv java, peb muaj cov nram qab no le caag rau kev luam ib yam twj paj nruas rau lwm

  • Daim ntawv ntiav: No yog hais tias lub nras uas yuav tsum tau theej ib yam txheej thaum ub, ces tus nqi yog tau theej lwm yog hais tias lub nras uas yuav tsum tau theej yog ib lub chaw nco (los yog ib yam twj paj nruas xwb) ces qhov chaw nyob yog tau theej. Li no yog qhov chaw nyob hloov raws li ib yam twj paj nruas, cov kev hloov twg thiaj li raug reflected zaws.
  • Daim ntawv sib sib zog nqus: Nov cov ntaub ntawv puas tau nyob rau ob lub sijhawm theej. Kauj yog costlier thiab qeeb qeeb.
  • Daim ntawv uas tub nkees: Qhov no yog ob tug le caag saum toj no thaum lawv tseem. Chiv tus ntiav tsab kev siv thiab xyuas ces yog cov ntaub ntawv yuav muab tso tawm los ntawm ntau yam khoom thiab cov kev pab cuam yuav tsum mus hloov ib yam twj paj nruas, lub nqus tsab kev siv.

Li ntawd, peb yuav xaiv tau ntau hom kev luam raws xuaj ob

  • Ntiav luam thaum tsis muaj encapsulation yuav tsum yog siv.
  • Sib sib zog nqus luam thaum encapsulation yog yuav tsum siv.

Daim ntawv ntiav:

Nyob rau hauv daim ntawv ntiav, tus kwv tshiab yog tsim muaj cov daim ntawv pes tsawg rau qhov tseem ceeb nyob rau hauv thawj lub twj paj nruas uas. Daim ntawv ntiav raws li tus bit-wise daim ntawv kev. Nyob rau hauv daim ntawv ntiav yog teb yog ib lub chaw nco, ces qhov chaw nyob yog tau theej. Li no yog qhov chaw nyob hloov raws li ib yam twj paj nruas, cov kev hloov twg thiaj li raug reflected zaws.

Shallow copy

Daim ntawv ntiav

Daim duab 1: Daim chart qhia flow piav ntiav tsab

Nyob hauv daim duab no, tus kwv – mainObj1 muaj ib daim teb uas muaj npe raws li field1 muaj ib yam txheej thaum ub hais rau cov menyuam, thiab ib lub nruas yam hlua thaum peb ua ib daim mainObj1 ntiav, mainObj2 yog tsim rau ntawm yam rau cov menyuam uas muaj tus nqi copied ntawm field1, tiam sis tus tsav haus dejcawv txoj hlua rau mainObj2 field2 – tseem ntsiab lus rau nws tus kheej objStr. Vim field1 yog ib lub hom ntaub ntawv txheej thaum ub, tus nqi ntawm nws yog tau theej rau hauv field2. Tab sis vim objStr yog ib yam twj paj nruas, mainObj2 yog taw rau qhov chaw nyob qub objStr. Li ntawd, cov muaj kev hloov rau objStr ntawm mainObj1 tau reflected nyob mainObj2.

Siv:

[chaws]

Qhia 1: SubjectVO.java kawm piav tus nqi paj nruas rau compound

pob com.home.objectCopy;

pej xeem hoob SubjectVO {

lwm yam Txoj hlua npe;

/**

* @return lub npe

*/

pej xeem Txoj hlua getName() {

rov qab mus lub npe;

}

/**

* @param lub npe

* lub npe teev

*/

pej xeem khoob lug setName(Txoj hlua npe) {

no.lub npe = lub npe;

}

pej xeem SubjectVO(Txoj hlua npe) {

no.lub npe = lub npe;

}

}

[/chaws]

Qhia 2: PupilVO.java txog tus nqi paj nruas rau menyuam kawm ntawv rau hoob kawm

[chaws]

pob com.home.objectCopy;

pej xeem hoob PupilVO qiv Cloneable {

// Contained nruas

lwm yam SubjectVO subj;

lwm yam Txoj hlua npe;

/**

* @return tus subj

*/

pej xeem SubjectVO getSubj() {

rov qab mus subj;

}

/**

* @param subj

* tus subj teev

*/

pej xeem khoob lug setSubj(SubjectVO subj) {

no.subj = subj;

}

/**

* @return lub npe

*/

pej xeem Txoj hlua getName() {

rov qab mus lub npe;

}

/**

* @param lub npe

* lub npe teev

*/

pej xeem khoob lug setName(Txoj hlua npe) {

no.lub npe = lub npe;

}

pej xeem PupilVO(Txoj hlua npe, Sub txoj hlua) {

no.lub npe = lub npe;

no.subj = tshiab SubjectVO(sub);

}

pej xeem Kwv clone() {

// daim ntawv ntiav

sim {

rov qab mus super.clone();

} ntes (CloneNotSupportedException e) {

rov qab mus thov;

}

}

}

[/chaws]

Listing3: ShallowCopyTest.java txog tsab ntawv taug qhov kev kawm

[chaws]
pob com.home.objectCopy;

pej xeem hoob ShallowCopyTest {

pej xeem zoo li qub khoob lug ntsiab(Txoj hlua[] args) {

// Daim tseem paj nruas

PupilVO NQHAJ = tshiab PupilVO(“Johnathan”, “Leb”);

Tsim.tawm.println(“Daim tseem paj nruas: ” + stud.getName() + ” – ”

+ stud.getSubj().getName());

// Kwv clone

PupilVO clonedStud = (PupilVO) stud.clone();

Tsim.tawm.println(“Kwv cloned: ” + clonedStud.getName() + ” – ”

+ clonedStud.getSubj().getName());

stud.setName(“Daniel”);

stud.getSubj().setName(“Physics”);

Tsim.tawm.println(“Daim tseem paj nruas tom qab nws muab kho: ”

+ stud.getName() + ” – ” + stud.getSubj().getName());

Tsim.tawm.println(“Cloned kwv tom qab muab kho dua daim tseem paj nruas: ”

+ clonedStud.getName() + ” – ”

+ clonedStud.getSubj().getName());

}

}

[/chaws]

Tso zis: Cov kev pab cuam no tso zis li tsis yog

Daim tseem paj nruas: Johnathan – Leb

Kwv cloned: Johnathan – Leb

Daim tseem paj nruas tom qab nws muab kho: Daniel – Physics

Cloned kwv tom qab muab kho dua daim tseem paj nruas: Johnathan – Physics

Ntawm no peb pom hais tias tus nqi ntawm lub teb lub npe twg thiaj li raug hloov tom qab lub sijhawm ua haujlwm daim ntawv tiam sis tus nqi ntawm lub nruas kawm tshua ib yam li nws yog taw rau tib qho chaw cim xeeb nyob. Li no hais rau Yaunathas sunburn ' Physics’ qhov twg li nws yuav tsum ' leb’ raws li lub nruas rau SubjectVO hauv cov seem unchanged kwv cloned.

Daim ntawv sib sib zog nqus:

Nyob rau hauv daim ntawv sib sib zog nqus, xwb tsis tas nrho lub teb uas muaj ib yam twj paj nruas uas tau theej, txhua tus nco dynamically tseg qhov chaw nyob uas taw tes qhia los ntawm tus kwv no kuj tau theej.

Deep Cpoy

Daim ntawv sib sib zog nqus

Daim duab 2: Daim duab piav cov txheej txheem tsab ntawv sib sib zog nqus

Nyob hauv daim duab no, tus kwv mainObj1 muaj liaj teb field1 ib txheej thaum ub tej ntaub ntawv yam hais rau cov menyuam, thiab ib lub nruas yam hlua thaum peb ua ib daim ntawv sib sib zog nqus mainObj1, mainObj2 yog tsim muaj field2 uas muaj tus nqi copied field1 thiab objStr2 yog tsim uas muaj tus nqi uas objStr1 copied thiaj li hloov mus objStr1 rau mainObj1 yuav tsis muaj kev cuam tshuam hauv mainObj2.

Siv:

Listing4: Kawm txog daim ntawv sib sib zog nqus

[Chaws]

pob com.home.DeepCopy;

pej xeem hoob PupilVO qiv Cloneable {

// Contained nruas

lwm yam SubjectVO subj;

lwm yam Txoj hlua npe;

/**

* @return tus subj

*/

pej xeem SubjectVO getSubj() {

rov qab mus subj;

}

/**

* @param subj

* tus subj teev

*/

pej xeem khoob lug setSubj(SubjectVO subj) {

no.subj = subj;

}

/**

* @return lub npe

*/

pej xeem Txoj hlua getName() {

rov qab mus lub npe;

}

/**

* @param lub npe

* lub npe teev

*/

pej xeem khoob lug setName(Txoj hlua npe) {

no.lub npe = lub npe;

}

pej xeem PupilVO(Txoj hlua npe, Sub txoj hlua) {

no.lub npe = lub npe;

no.subj = tshiab SubjectVO(sub);

}

pej xeem Kwv clone() {

// daim ntawv sib sib zog nqus

PupilVO hlub = tshiab PupilVO(lub npe, subj.getName());

rov qab mus ntsiab muag;

}

}

[/chaws]

Tsuas sib txawv kauj thiab cov kev ua ntej lawm yog tias txoj kev clone nyob hauv lub PupilVO rov ib PupilVO created tshiab khiv nruas. Qhov no saib kuas tias tav twg mechanism daim qauv hauv tab tom, SubjectVO kuj tau hloov cov kwv. Daim ntawv sib sib zog nqus tau ib qho kev qhia ntawv – serialization. Nyob rau hauv serialization, tus kwv tseem teeb yog sau ntawv mus rau hauv khw pheej thiab nyeem rov qab thaum twg txoj kev. Hais thaum twg peb nyeem tus tsav haus dejcawv ntawm lub khw pheej, tus tsav haus dejcawv daim tseem xa mus.

Pab ntiav luam thiab daim ntawv sib sib zog nqus:

Muaj yog ib qho tsis nyuaj thiab ceev txoj cai hais tseg rau xaiv ntawm ndlav luam thiab daim ntawv sib sib zog nqus nquag, tab sis peb yuav tsum nco ntsoov tias tau kwv muaj txheej thaum ub tsuas teb, ces obviously yuav mus rau luam ntiav, tab sis, yog tus tsav haus dejcawv muaj neeg ua tim khawv rau lwm yam khoom, ces nyob rau lub, ntiav daim qauv los yog daim ntawv sib sib zog nqus yuav tau rov. Yog hais tias tus xov tooj yog tsis tshiab ces yog tsis muaj taw tes yuav tau pib daim ntawv sib sib zog nqus.

Piav tubnkeeg tsab:

Ib daim ntawv uas tub nkees yuav tau txhais tias yog thaum lawv tseem ntiav luam thiab daim ntawv sib sib zog nqus. Tus mechanism raws ib cov kev yooj yim – nyob rau lub xeev pib, siv daim ntawv ntiav mus kom ze. Lub txee tseem siv kom txhob muaj ib tug khiav rau khoom ntau npaum li cas muab tau cov ntaub ntawv. Thaum cov kev pab cuam xav hloov lub nruas thawj, nws nug saib seb tus tsav haus dejcawv yuav muab tso tawm los yog tsis. Yog tus tsav haus dejcawv yuav muab tso tawm, ces cov daim ntawv sib sib zog nqus mechanism no tshwmsim.

Txoj kev:

Nyob rau hauv daim ntawv ntiav, tsuas teb yam ntaub ntawv txheej thaum ub yeej tau theej thaum cov neeg ua tim khawv cov khoom no tsis tau theej. Daim ntawv sib sib zog nqus yuav rau daim hom ntaub ntawv txheej thaum ub, thiab cov objet chiv keeb. Yog tsis muaj zog thiab ceev txoj cai raws li thaum twg mam ntiav luam thiab thaum twg thiaj yuav ua tau ib daim qauv uas sib sib zog nqus. Tubnkeeg daim ntawv no thaum lawv tseem ob leeg tsim muaj cov le caag.

Tagged:
============================================= ============================================== Yuav zoo TechAlpine phau ntawv rau Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Txaus siab rau qhov blog? Tshaj tawm lus thov :)

Follow by Email
LinkedIn
LinkedIn
Share