Чекор по чекор
Почетни чекори со Java
Објектно оријентирани концепти во Јава - Прв дел
Објектно оријентирани концепти во Јава - Втор дел
Објектно оријентирани концепти во Јава - Трет дел
Јава сервлети - Прв дел
Единствен Јава објект (singleton)
Најчести 10 грешки што ги прават Java програмерите
повеќе...
Што е тоа ...
... IDE
... Tomcat
... објект?
... класа?
... наследување?
... интерфејс?
... наследување? (прашања и одговори)
повеќе...
За загревање
Нов проект во Eclipse?
Примитивни податочни типови
Променливи
Оператори
Доделувачки, аритметички и Unary оператори
Оператори за еднаквост, релации и услови
Изрази, искази и блокови
повеќе...
Како да ...
... конвертирам java.sql.Timestamp во java.util.Date
... зададам формат на датум
... ковертирам „long“ во HEX и обратно
... прочитам датотека и променам стринг
... креирам ZIP датотека
... поврзам Apache и Tomcat користејќи mod_jk
... пратам недефиниран број на атрибути до некоја метода
повеќе...
Java преку примери
new Socket(String addr,int port)
new URL(String address)
new URL(String protocol, String host, int port, String file)
CommPort: getInputStream()
CommPortIdentifier: getPortIdentifiers()
Statement: executeQuery(String sql)
Statement: getMaxRows()
повеќе...
Грешка
Нов напис
Рубрика:
Наслов:
  
  

страна број:123
Објектно оријентирани концепти во Јава - Прв дел
Копирање на објекти

Има разлика како Јава ги обработува примитивните податочни типови како што се „integer“ и „Boolean“ за разлика од тоа како ги обработува објектите. Погледни ги овие два фрагменти од изворен код:

1  int a = 5;
2  int b = a;
3  b = b + 1;
4  System.out.println("a=" + a + " b=" + b);

6  Drvo d1 = new Drvo();
7  d1.visina = 5;
8  Drvo d2 = d1;
9  d2.visina = d2.visina + 1;
10 System.out.println("d1.visina=" + d1.visina +
11                    " d2.visina=" + d2.visina);

Во двата случаи креираме две променливи, задавајќи ја вредноста од првата променлива на втората, но излезто од горенаведениот изворен код е следниов:

a=5 b=6
d1.visina=6 d2.visina=6


Во првиот случај (со примитивниот податочен тип „int“) менувањето на вредноста на втората променлива не влијае на вредноста на првата. Во случајот со класата Drvo промената на особината „visina“ кај првата променлива (d1) ќе се одрази на особината „visina“ на втората променлива (d2). Зависно од тоа како размислуваш, едниот или другиот резултат ти имаат смисла, но очигледно е дека нешто сосема различно се случува во двата случаи.

Во првиот случај (кој на прв поглед на повеќето луѓе им има повеќе смисол), кога вредноста од „a“ е сместена во „b“ (линија 2), Јава всушност креира копија од вредноста 5 за да ја смести во променливата „b“. Така да всушност се работи за две различни копии од бројот 5, еден сместен во „a“, другиот сместен во „b“.

Приказната е сосема различна во вториот случај. Во линијата со број 8 кога вредноста од променливата „d1“ е сместена во променливата „d2“ всушност не се креира копија од објектот Drvo за да се смести во променливата „d2“. туку „d2“ станува референца до инстанцата од класата Drvo во меморијата. Со други зборови, „t2“ и „t1“ покажуваат кон едно исто Drvo! Затоа при промената на висината на „t2“ исто така ја менува висината и на „t1“. Променливите „t1“ и „t2“ не се различни како што се „a“ и „b“.

Добро, но што ако сакам да направам вистинска копија на објектот?
Па, има повеќе решенија за тоа. Првото е всушност да креираш двa објекти, а потоа да ги ископираш особините од едниот во другиот:

1  Drvo d1 = new Drvo();
2  d1.visina = 5;
3  Drvo d2 = new Drvo();
4  d2.visina = d1.visina;
5  d2.visina = d2.visina + 1;
6  System.out.println("d1.visina=" + d1.visina +
7                    " d2.visina=" + d2.visina);

Од ова ќе произлезе посакуваниот резултат „d1.visina=5 d2.visina=6“ бидејќи висините на двата објекти  всушност се примитивни податочни типови (int), а не објекти, така да сетирањето на вредноста d1.visina креира посебна копија на целобројната вредност (int) за да t2 ја искористи.

Друга опција е да се имплементира посебен метод во твојата класа кој ќе креира копии.
Овој метод треба да обезбеди директна копија од објектот за одвоена употреба. Еве како би изгледала класата „Drvo“ со методот „copy“:

1  class Drvo {
2    public int visina = 0;
3    public void rastenje() {
4      visina = visina + 1;
5    }
6    public Drvo copy() {
7      Drvo copy = new Drvo();
8      copy.visina = visina;
9      return copy;
10   }
11 }


А еве како да би го користел овој нов метод:

1  Drvo d1 = new Drvo();
2  d1.visina = 5;
3  Drvo d2 = d1.copy(); // Kreiraj kopija od d1
4  d2.visina = d2.visina + 1;
5  System.out.println("d1.visina=" + d1.visina +
6                    " d2.visina=" + d2.visina);

И ова решение ќе ни го даде саканиот резултат.
страна број: 1 2 3 4 5 6 7 << претходна страна : : следна страна >> 
 
Коментирај
автор: Анонимус
Анонимните коментари ќе бидат објавувани веднаш после нивната проверка.
За да вашиот коментар биде веднаш валиден претходно пријавете се или креирајте свој профил


напишал: Анонимус (08.01.2008 15:30:28)
супер е
напишал: igor (08.01.2008 18:48:29)
благодарам, се трудиме да биде супер ;)
напишал: Анонимус (31.01.2008 23:46:34)
mesto hight vo 16.25.26.27 red treba da stoi visina
напишал: igor (01.02.2008 22:43:44)
благодарам за забелешката, корегирано!
напишал: jassum (10.02.2008 19:53:32)
Drvo d1 = new Drvo();
d1.visina = 5;
Visina d2 = new Drvo();
d2.height = 5;
if (d1 == d2) System.out.println("'d1' i 'd2' se ednakvi!");

}
Se ivinuvam ama ova kajmene vaka ne go bidva :) a neznam oti.
a vaka da:
Drvo d1 = new Drvo();
d1.visina = 5;
Drvo d2 = new Drvo();
d2.visina = 5;
if (d1.visina == d2.visina) System.out.println("'d1' i 'd2' se ednakvi!");

}
напишал: igor (12.02.2008 00:08:45)
фала на зебелешките, корегирано.

За другото гледам примети ;)
напишал: jassum (10.02.2008 19:57:45)
Treba izgleda poke da citam heheheh pozdrav pa poslem da se bunam :)
напишал: Анонимус (27.02.2008 14:38:48)
Bravo za avtorite . Dobro sto postoi vakva web strana
напишал: iarsov (27.06.2008 23:50:28)
сега сватив
во сто е штосот и кое од каде зима.
Браво одлична лекција.
Keep doing
напишал: Анонимус (09.11.2011 00:23:08)
Браво супер е странава,многу ми помогна ви благодарам.
пребарување
најди
 
Форум
 
JugMK
GetJava Download Button
http://www.eclipse.org
 
 
 
 
Copyrights © 2006 - 2017 by Java.com.mk
Права и правила за користење на java.com.mk
Контакт адреса:
contact AT java.com.mk
Powered by Supernova v.0.70 beta
JavaTM и Java-базираните ознаки се трговски марки или регистрирани трговски марки на Sun Microsystems, Inc. во САД и други држави. Java.com.mk никако не соработува со Sun Microsystems, Inc.
Сите други трговски марки се сопственост на нивните сопственици.