You are on page 1of 21

Објектно Ориентирано

Програмирање
предавањe 3 (02.10.2015)
Референци во Јава
•  Во C и C++ се викаат покажувачи
•  Во Јава се викаат референци
•  Референците покажуваат на објекти во
меморијата, всушност
•  Референцата покажува на одредена
инстанца на дадена класа

декларирање на референца

integer x;
Референцирање на објекти
Со класите дефинираме објекти
еден објект е инстанца на "својата" Класа.
го повикуваме конструкторот (методот за
конструирање) за да се креира нов објект

new Integer(3);
public class Dodeluvanje {

public static void main(String[] args) {

Integer broj;
broj = new Integer(3);
Integer x = broj;
Integer y = new Integer(3);
Integer z;

} }
Java Heap
Јава Heap (се чита ХИП) покажува кои
референци и кои објекти постојат додека
(за време) на извршувањето на Java
програмот (во runtime)

x broj y z

Integer: 3 Integer: 3 null


Null референци
•  Недоделени референци покажуваат кон
null
•  null не е објект
o  нема атрибути
o  нема методи
•  во претхoдниот пример
z.intValue()

резултира со грешка
поточно NullPointerException
Garbage Collection
Објект кој нема референца до него не
може да се користи

•  тој објект станува кандидат за автоматско


собирање на ѓубре (automatic garbage
collection)
•  „Јава-та автоматски го "собира" ѓубрето
одвреме-навреме и ја ослободва
меморијата за да може да се користи во
иднина.
Клучниот збор this
this може да се користи за објектот да се
референцира самиот себе си

Најчесто се користи за пристапување до


членовите на класата (атрибути и методи)
од своите методи кога тие имаат исто име
со параметрите до дадениот метод
пример за this
public class Circle {
public double x,y,r;
// Constructor
public Circle (double x, double y, double r)
{
this.x = x;
this.y = y;
this.r = r;
}
//ostanati metodi nadolu
}
Доделување и мутација
•  Со користење на “=” се доделува објект
на дадена референца
o  т.е. Референцата сега ПОКАЖУВА кон тој објект
во меморијата
•  Некои методи ги мутираат нивните
објекти
•  Со референцирање може и да се
споделува еден објект
public class MutacijaPrimer {
public static void main(String[] args) {

List<String> a = new ArrayList<String>();

List<String> b = a;
// b i a ja spodeluvaat listata

a.add("Hello, world!");
System.out.println(b);
// pecati “Hello, world!”

} }
Спектар на референци
•  Големи загради {...} дефинираат региони
на спектар (scope)
•  Референците постојат од времето кога се
декларирани се додека не излезат
„надвор од спектарот“
•  Атрибутот може да се референцираат во
класата
•  Параметри можат да се референцираат
во методот
public class ScopePrimer {
private int globalnoPole;
public int metod(int parametar)
{
int lokalnaPromenliva1;
if (globalnoPole > 0) {
int x; }
int lokalnaPromenliva2;
}
}
public class ScopePrimer {
private int globalnoPole;

public int metod(int parametar) {


int globalnoPole; // ОК, но го сокрива атрибутот!
int lokalnaPromenliva;
if (this.globalnoPole > 0) {
int x; // пристапува до полето

}
int lokalnaPromenliva;
// грешка: во ист спектар
Статички и нестатички
Атрибутите и методите може да се
декларираат како "статички"

Се вели дека СТАТИЧКИТЕ членови и


припаѓаат на класата

НЕСТАТИЧКИТЕ членови им припаѓаат на


инстанците на класата
•  Во Јава може да се дефинираат глобални
методи и атрибути-променливи кои можат да се
пристапат без претходно да се креираат објекти
од класата.
•  Таквите членови се викаат статички членови.Се
дефинираат со додавање на static
•  Кога дефинираме променлива заедничка за сите
инстанци на класата ја дефинираме како
статичка.
•  Јава креира само една копија за статичката
променлива која може да се користи дури и ако
нема инстанца (објект) од таа класа
Нестатички атрибути
public class Bean {
public int beanCounter = 0;
public Bean() {
beanCounter++;
}

public static void main(String[] args) {


new Bean(); new Bean();
Bean bean = new Bean();

System.out.println(bean.beanCounter);
// pecati “1”
Статички атрибути
public class Bean {
public static int beanCounter = 0;

public Bean() {
beanCounter++; }

public static void main(String[] args) {


new Bean(); new Bean(); new Bean();
System.out.println(Bean.beanCounter);
// Pecati “3”

} }
Нестатички методи
public class Bean {
private boolean planted = false;
public void plantBean() {
planted = true;
}

public static void main(String[] args) {


Bean gravce = new Bean();
gravce.plantBean();
// се повикува plantBean() на инстанцата

} }
Статички методи
public class Bean {
private boolean planted = false;
public static void plantBean(Bean bean) {

bean.planted = true; }

public static void main(String[] args) {


Bean gravce = new Bean();
Bean.plantBean(gravce);
// se povikuva metodot na klasata
}}
Ограничувања на статичките
методи

Можат да повикаат само други статички


методи.
Можат да пристапат само до статички
податоци (атрибути)
Не можат да се референцираат до “this”
или “super”

You might also like