30.11.20

Java kolekcije

Prethodnim tekstom u kojima su obrađeni nizovi u petljama završen je prvi deo osnovnog nivoa besplatnog kursa „Java za sve”. Ono što sledi su Java kolekcije.

Za potpuno razumevanje Java kolekcija neophodno je poznavanje objektno orijentisanog programiranja u Javi. Objektno orijentisano programiranje (OOP) je jako bitan koncept modernih programskih jezika, ali je i veoma složen. Zbog složenosti objektno orijentisano programiranje će biti obrađeno u nastavku, po završetku osnovnog nivoa kursa.

Zbog činjenice da su Java kolekcije veoma važne i korišćene, kao i da logički spadaju u poslednje poglavlje osnovnog kursa - „Složene vrste podataka”, biće objašnjeno kako raditi sa kolekcijama bez zalaženja u detalje. Neke od kolekcija koje će biti obrađene su:

17.10.20

Java - Nizovi u petljama

Besplatni Java kurs - 43. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Petlje su veoma pogodne za rad sa nizovima. Upotrebom petlji olakšava se i automatizuje pristup članovima niza, njihovo stvaranje i izmena. Koriščenje petlji posebno ima smisla kada se radi sa velikim nizovima koji imaju mnogo članova i/ili više dimenzija. Za početak, biće objašnjeno kako se radi sa jednodimenzionalnim nizovima unutar petlji.

Jednodimenzionalni nizovi u petljama

Za jednostavniji rad sa jednodimenzionalnim nizovima dovoljna je jedna petlja. Sledeći primer služi za ispis brojeva koji su smešteni u jednodimenzionalni niz tipa int:

int loto[] = {21, 37, 22, 30, 18, 39, 12};
String ispis = "";
for(int i = 0; i < 7; i++){
    ispis = ((i+1) + ". broj je: " + loto[i]);
    System.out.println(ispis);
}

Rezultat izvršavanja je:

1. broj je 21
2. broj je 37
3. broj je 22
4. broj je 30
5. broj je 18
6. broj je 39
7. broj je 12

Hajde da analiziramo šta se zapravo dešava u petlji.

14.9.20

Java 15 stiže sutra!

Pročitaj i ostale Java vesti.

Sutra (15. sep. 2020.) bi trebalo da bude objavljena najnovija verzija programskog jezika Java - Java 15. Ova verzija će biti bez dugoročne podrške, ali donosi neka poboljšanja i novine.

Novine koje donosi Java 15:

  • Sealed Classes (Preview) - JEP 360
  • Records (Second Preview) - JEP 384
  • Pattern Matching for instanceof (Second Preview) - JEP 375
  • Text Blocks (Second Preview) - JEP 368
  • Hidden Classes - JEP 371
  • ZGC: A Scalable Low-Latency Garbage Collector (Production) - JEP 377
  • Deprecate RMI Activation for Removal - JEP 385
  • Foreign-Memory Access API (Second Incubator) - JEP 383
  • Disable and Deprecate Biased Locking - JEP 374
  • Reimplement the Legacy DatagramSocket API - JEP 373
  • Remove the Nashorn JavaScript Engine - JEP 372

20.7.20

Java - Višedimenzionalni nizovi

Besplatni Java kurs - 42. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Višedimenzionalni nizovi su nizovi nizova. Ukupan broj nizova određuje dimenzionalnost. Npr. ako postoji samo jedan niz unutar drugog, ukupno ih ima dva i cela struktura se zove dvodimenzionalni niz. Ako se unutar niza nalazi drugi niz u kome se nalazi treći - takav niz se zove trodimenzionalni itd.

Dvodimenzonalni nizovi

Dvodimenzonalni nizovi se deklarišu navođenjem tipa i identifikatora(naziva) i dva para uglastih zagrada [ ][ ]. Sledeći primer predstavlja dvodimenzionalni niz tipa int:

int niz_2d[][];

Drugi način deklarisanja dvodimenzionalnog niza je navođenjem uglastih zagrada pre naziva:

int [][] niz_2d;

Drugi način je pogodniji kada je potrebno deklarisati više od jednog niza istovremeno jer je dovoljno napisati samo jedan par uglastih zagrada:

byte niz_2dA[][], niz_2dB[][], niz_2dC[][];
byte [] niz_2dA, niz_2dB, niz_2dC;

2.6.20

Java - Nizovi

Besplatni Java kurs - 41. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Nizovi su uređena grupa podataka istog tipa kojima se pristupa momoću zajedničkog naziva. Java nizovi mogu sadržati i druge nizove i tada se zovu višedimenzionalni nizovi. U ovom postu biće obrađeni samo jednodimenzionalni nizovi, tj. nizovi koji ne sadrže druge nizove već samo sadrže vrednosti istog tipa.

Jednodimenzonalni nizovi

Nizovi se deklarišu navođenjem tipa podataka koji će sadržati, identifikatora (naziva) niza i uglastih zagrada [ ]. Sledeći primer predstavlja jednodimenzionalni niz tipa int:

int niz_brojeva[];

Alternativno, uglaste zagrade mogu se navesti pre naziva, a posle tipa:

int [] niz_brojeva;

Oba načina su ravnopravna, jedina razlika je što je na drugi način lakše deklarisati više od jednog niza istovremeno jer je u tom slučaju dovoljno napisati samo jedan par uglastih zagrada:

byte nizA[], nizB[], nizC[];
byte [] niz1, niz2, niz3;

1.6.20

Java - Ugnježdene petlje

Besplatni Java kurs - 40. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Petlje se mogu koristiti unutar drugih petlji. Takav način korišćenja petlji naziva se ugnježdavanje petlji. Može se ugnježdavati proizvoljan broj petlji. U svakom krugu spoljne petlje izvršiće se svi krugovi unutrašnje petlje pre nego što se pređe na izvršavanje sledećeg kruga spoljne petlje.

Sledeći primer predstavlja dve petlje od kojih je jedna ugnježdena u drugu. Spoljna petlja će se izvršiti tri puta, a unutrašnja tri puta za svaki krug spoljne petlje:

for(int s = 1; s <= 3; s++){
    System.out.println("Spoljni krug: " + s);
    for(int u = 100; u <= 300; u += 100){
        System.out.println("Unutrašnji krug: " + u/100);
        System.out.println("s = " + s + ", u = " + u);
    }
}

Rezultat izvršavanja petlje biće:

Spoljni krug: 1
Unutrašnji krug: 1
s = 1, u = 100
Unutrašnji krug: 2
s = 1, u = 200
Unutrašnji krug: 3
s = 1, u = 300
Spoljni krug: 2
Unutrašnji krug: 1
s = 2, u = 100
Unutrašnji krug: 2
s = 2, u = 200
Unutrašnji krug: 3
s = 2, u = 300
Spoljni krug: 3
Unutrašnji krug: 1
s = 3, u = 100
Unutrašnji krug: 2
s = 3, u = 200
Unutrašnji krug: 3
s = 3, u = 300


Pročitaj i nastavak:

Besplatni Java kurs - 41. deo - Nizovi

24.5.20

25 godina Jave!

Ovog vikenda Java je proslavila svoj 25. rođendan!

Pročitaj i ostale Java vesti.

Tačno 23. maja 1995. god. Java je prvi put ugledala svetlo dana. Pojavila se kao novi, revolucionarni programski jezik koji je po prvi put omogućio pisanje programa jednom i izvršavanje na svim uređajima sa Java virtualnom mašinom.

Danas, Java se smatra jednim od klasičnih jezika i već godinama je jedan od najkorišćenijih programskih jezika na svetu.

U septembru se očekuje izlazak verzije 15.

Srećan rođendan svima koji slave :)

17.5.20

Java - naredbe za izlazak iz petlji

Besplatni Java kurs - 39. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Za izlazak iz petlji koriste se naredbe break i continue.

break

Naredba break koristi se da bi se trajno prekinula petlja.

Sledeća petlja će se izvršiti samo tri puta, uprkos tome što je uslov i < 10, zato što će kada i bude bilo 3 naredba break prekinuti dalje izvršavanje petlje:

for(int i = 1; i <= 10; i++){
    System.out.println("Krug: " + i);
    if(i == 3)
        break;
}

Rezultat izvršavanja petlje biće:

Krug: 1
Krug: 2
Krug: 3

13.5.20

Java - for petlja

Besplatni Java kurs - 38. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

for petlja se ponavlja prema zadatom pravilu, tačno određeni broj puta.

Uslov za izvršavanje for petlje navodi se u zagradi posle naredbe for, kao drugi od tri izraza razdvojenih tačkom-zarezom. Prvi izraz zapravo predstavlja deklaraciju i inicijalizaciju iteracione promenljive koja se najčešće označava sa i. Poslednji, treći izraz služi da bi se promenila vrednost iteracione promenljive, a to najčešće znači uvećanje za 1 (i++).

Sledeća petlja će se izvršiti tri puta:

for(int i = 0; i < 3; i++){
    System.out.println("Krug: " + (i + 1));
}

Rezultat izvršavanja petlje biće tri ispisa:

Krug: 1
Krug: 2
Krug: 3

Navedena petlja radi na sledeći način:

Samo pre prvog izvršavanja biće deklarisana i inicijalizovana iteraciona promenljiva (int i = 0). Zatim, pre prvog kruga, kao i pre svakog sledećeg, proveriće se uslov (i < 3) i samo ako je ispunjen uslov - izvršiće se telo petlje. Prvi put i će imati vrednost 0 što zadovoljava uslov da je manje od 3 i telo petlje će biti izvršeno. Na kraju prvog kruga, kao i na kraju svakog sledećeg, biće izvršeno uvećanje promenljive i za jedan.

Isto se ponavlja za svaki krug.


Pročitaj i nastavak:

Besplatni Java kurs - 39. deo - Naredbe za izlazak iz petlji

12.5.20

Java - do while petlja

Besplatni Java kurs - 37. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

do while petlja jako liči na while petlju, sa bitnom razlikom: uslov izvršavanja se proverava na kraju petlje, a ne na početku.

do while petlja se uvek izvršava bar jednom, a zatim pre sledećeg izvršavanja ispituje da li je uslov zadovoljen. Samo u slučaju da je uslov zadovoljen izvršiće se kôd. Posle svakog izvršavanja uslov će ponovo biti ispitan i opet, samo ako je uslov zadovoljen ponoviće se izvršavanje. To će se ponavljati sve dok god uslov za izvršavanje petlje ostane zadovoljen.

Npr, sledeća petlja će se izvršiti tri puta:

int k = 1;
do {
    System.out.println("Krug: " + k);
    if (k == 3)
        k = 0;
    k++;
} while(k > 1);

Rezultat izvršavanja petlje biće tri ispisa:

Krug: 1
Krug: 2
Krug: 3


Pročitaj i nastavak:

Besplatni Java kurs - 38. deo - for petlja

11.5.20

Java - while petlja

Besplatni Java kurs - 36. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

while petlja uvek pre izvršavanja ispituje da li je uslov zadovoljen. Samo u slučaju da je uslov zadovoljen izvršiće se kôd. Posle svakog izvršavanja uslov će ponovo biti ispitan i opet, samo ako je uslov zadovoljen ponoviće se izvršavanje. To će se ponavljati sve dok uslov za izvršavanje petlje ne bude nezadovoljen.

Npr, sledeća petlja će se izvršiti tri puta:

int k = 1;
while(k <= 3){
    System.out.println("Krug: " + k);
    k++;
}

Rezultat izvršavanja petlje biće tri ispisa:

Krug: 1
Krug: 2
Krug: 3

U prvom krugu k će imati vrednost 1, u drugom imaće vrednost 2, u trećem vrednost 3. Posle trećeg kruga k će imati vrednost 4 što neće zadovoljiti uslov ponovnog ulaska u petlju - da je k manje ili jednako 3. Zato neće biti četvrtog prolaska kroz petlju, već će se ovaj deo programa završiti. Vrednost k se menja zahvaljujući liniji kôda k++;, kojom se svaki put pri prolasku kroz petlju k uvećava za 1 (k = k + 1).

7.5.20

Java - Petlje

Besplatni Java kurs - 35. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Za uslovno ponavljanje izvršavanja dela programa koriste se petlje.

Postoje tri vrste petlji u programskom jeziku Java:

  • while petlje
  • do-while petlje
  • for petlje

Kada nije poznato koliko puta bi trebalo da se ponovi izvršavanje dela kôda koriste se uglavnom while ili do-while petlje. Kada je unapred poznato koliko puta je potrebno da se ponovi izvršavanje dela kôda koriste se najčešće for petlje.

U narednim postovima biće objašnjene sve tri vrste petlji. U suprotnom bi ovaj post bio preopširan.

Za sada ću samo objasniti kako rade na visokom nivou. Sve petlje ispituju određene uslove na osnovu kojih će se utvrditi koliko puta će se izvršiti. Petlje se i razlikuju upravo po načinu na koji se posmatraju ti uslovi.

6.5.20

Java - Naredbe uslovnog grananja - else

Besplatni Java kurs - 34. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Za uslovno izvršavanje dela programa u slučaju da nije zadovoljen zadati uslov koristi se naredba else.

else naredba

Da bi se deo programa izvršio samo ako nije ispunjen uslov za izvršavanje naredbe if koristi se naredba else. Naredba else se koristi isključivo tako što se navede posle naredbe if na koju se odnosi. Zatim se navede i kôd koji je potrebno izvršiti, npr:

if (false)
    System.out.println("Ovo se ne ispisuje jer je uslov uvek false.");
else
    System.out.println("Ovo se ispisuje!");

Prilikom izvršavanja navedenog kôda biće izvršen ispis "Ovo se ispisuje!" jer je kao uslov stavljen literal false. Primer nema mnogo smisla, jer je uslov uvek neistinit. Pravi primer bi bio sledeći kôd koji će ispisati "Ovo se ispisuje kada je islov istina." samo ako je promenljiva uslov istinita, u suprotnom ispisaće "Ovo se ispisuje kada uslov nije istina.":

if (uslov)
    System.out.println("Ispisuje se kada je uslov istina.");
else
    System.out.println("Ispisuje se kada uslov nije istina.");

5.5.20

Java - Naredbe uslovnog grananja - if

Besplatni Java kurs - 33. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Za uslovno izvršavanje dela programa koristi se if naredba.

if naredba

Da bi se deo programa izvršio pod nekim uslovom, koristi se naredba if. Naredba if se koristi tako što se u zagradi posle naredbe navede uslov, a zatim i kôd koji je potrebno izvršiti, npr:

if (true)
    System.out.println("Uslovni pozdrav!")

Prilikom izvršavanja navedenog kôda biće izvršen ispis "Uslovni pozdrav!" jer je kao uslov stavljen literal true. Ovaj primer nema mnogo smisla, jer je uslov uvek istinit. Pravi primer bi bio sledeći kôd koji će ispisati "Uslovni pozdrav!" samo ako je promenljiva uslov istinita:

if (uslov)
    System.out.println("Uslovni pozdrav!")

4.5.20

Java - blokovi naredbi

Besplatni Java kurs - 32. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Blokovi naredbi služe za grupisanje više naredbi u logičke celine.

Blokovi naredbi se grade pomoću vitičatih zagrada, npr:

{
    System.out.println("Zdravo")
    System.out.println("Svete")
}

Teško je objasniti svrhu blokova naredbi bez pominjanja nekih drugih elemenata programskog jezika Java, ali biće sve jasnije u narednih nekoliko postova.

Blokovi naredbi mogu biti imenovani

Imenovanje blokova naredbi vrši se tako što se pre bloga stavi ime po želji posle koga slede dve tačke. Da bi ime bilo ispravno trebalo bi ga odabrati po istim pravilima kao i za promenljive. Npr:

mojBlok : {
    System.out.println("Pozdrav iz")
    System.out.println("imenovanog bloka")
}

3.5.20

Logički operatori za dodelu uz logičku operaciju

Besplatni Java kurs - 31. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Logički operatori za dodelu uz logičku operaciju služe za istovremeno vršenje logičke operacije i dodelu rezultata te logičke operacije.

Logički operatori za dodelu uz logičku operaciju su:

  • &= logički operator dodele uz konjukciju
  • |= logički operator dodele uz disjunkciju
  • ^= logički operator dodele uz isključivu disjunkciju
  • ?: ternarni operator uslovne dodele

Logički operatori za dodelu uz logičku operaciju rade po istom principu kao i logički operatori, uz razliku što istovremeno vrše i dodelu vrednosti.

2.5.20

Java - Logički operatori

Besplatni Java kurs - 30. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Logički operatori služe za poređenje istinitosti operanada. Ekskluzivno, operatori jednakosti i nejednakosti služe i za poređenje vrednosti.

Logički operatori su:

  • ! unarni logički operator negacije
  • & logički operator konjukcije
  • && logički operator kratkospojene konjukcije
  • | logički operator disjunkcije
  • || logički operator kratkospojene disjunkcije
  • ^ logički operator isključive disjunkcije
  • == logički operator jednakosti
  • != logički operator nejednakosti

Logički operatori rade po istom principu kao i logički operatori za bitove, ali za razliku od njih vrše operacije nad vrednostima, ne nad bitovima. Zato neću detaljno opisivati logiku operatora. Za detalje pogledaj objašnjenje za istoimene operacije na nivou bita.

Java - Relacioni operatori

Besplatni Java kurs - 29. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Relacioni operatori služe za poređenje vredosti operanada.

Relacioni operatori su:

  • == relacioni operator jednakosti
  • != relacioni operator nejednakosti
  • > relacioni operator veće
  • < relacioni operator manje
  • >= relacioni operator veće ili jednako
  • <= relacioni operator manje ili jednako

29.4.20

Java - operatori za dodelu uz operaciju nad bitovima

Besplatni Java kurs - 28. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Operatori za bitove mogu biti spojeni sa operatorom dodele.

Već sam opisao kako rade Java operatori za rad sa bitovima. Kada je potrebno da se istovremeno izvrši operacija nad bitovima i dodeli vrednost, koriste se skraćene verzije:

  • &= dodela uz konjukciju
  • |= dodela uz disjunkciju
  • ^= dodela uz isključivu disjunkciju
  • >>= dodela uz aritmetičko pomeranje udesno
  • >>>= dodela uz logičko pomeranje udesno
  • <<= dodela uz pomeranje ulevo

Pročitaj i nastavak:

Besplatni Java kurs - 29. deo - Relacioni operatori

28.4.20

Operator za logičko pomeranje udesno

Besplatni Java kurs - 27. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Postoji i logičko pomeranje bitova udesno za šta se u Javi koristi operator za logičko pomeranje udesno. Logično.

>>> Operator za logičko pomeranje udesno

Pomoću operatora za logičko pomeranje bitova udesno svi bitovi nekog broja se pomeraju za određeni broj mesta udesno dok se sa leve strane dopisuju nule. Npr:

int broj = -2147483640 >>> 3;

Broj -2147483640 u binarnom obliku izgleda ovako:

1_000000000000000000000000000_1000

Promenljiva broj će posle izvršenja naredbe imati sledeću binarnu vrednost:

0_001000000000000000000000000_0001

Pomoću donjih crta sam vizuelno odvojio krajnji levi bit koji predstavlja znak. Prilikom logičkog pomeranje bitova udesno, svaki bit se pomera za određeni broj mesta udesno, a na mesto krajnjeg levog bita se pri svakom pomeranju upisuje nula.


Pročitaj i nastavak:

Besplatni Java kurs - 28. deo - Operatori za dodelu uz operaciju nad bitovima

27.4.20

Operator za aritmetičko pomeranje udesno

Besplatni Java kurs - 26. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Za aritmetičko pomeranje bitova udesno u Javi se koristi operator za aritmetičko pomeranje udesno.

>> Operator za aritmetičko pomeranje udesno

Operator za aritmetičko pomeranje bitova udesno služi za pomeranje svih bitova nekog broja za određeni broj mesta udesno. Npr:

int broj = 8 >> 3;

Promenljiva broj će posle izvršenja naredbe imati vrednost 1. To je zato što u binarnom obliku broj 8 izgleda ovako:

0_000000000000000000000000000_1000

Pomoću donjih crta sam vizuelno odvojio krajnji levi bit jer je prilikom rada sa označenim brojevima u Javi bitan upravo krajnji levi bit jer on predstavlja znak. Zbog toga nije isto ako tokom pomeranja udesno na mesto tog bita ubacimo nulu ili jedinicu. Zato se prilikom aritmetičkog pomeranje bitova udesno, svaki bit pomera za određeni broj mesta udesno, a na mesto krajnjeg levog bita se pri svakom pomeranju ponovo upisuje ista vrednost.

Zbog toga će promenljiva broj posle izvršenja navedene naredbe imati vrednost 1. To je zato što u binarnom obliku broj 1 izgleda ovako:

0_000000000000000000000000000_0001

Uskoro: veb-sajt posvećen učenju Jave

Pročitaj i ostale Java vesti.

Kao što sam nagovestio ranije, pripremam veb-sajt čija tema će biti proučavanje programskog jezika Java.

Šta će biti različito u odnosu na blog?

Veb-sajt i blog razlikovaće se u nekoliko bitnih stvari.

Način proučavanja programskog jezika Java

Blog predstavlja Javu na takav način da može biti koristan i početnicima, ali i onima koji već imaju iskustva sa Javom. Veb-sajt će imati odvojene tutorijale prilagođene iskustvu ljudi kojima je namenjen. Blog sam isto zamislio tako da ima nekoliko nivoa težine, ali su te celine podeljene prema kompleksnosti sadržaja. Na veb-sajtu će biti akcenat na nivou predznanja, a zatim i na težini gradiva.

Teško je pisati blog za ljude sa različitim predznanjem. Veb-sajt će mi omogućiti da lakše objasnim Java programiranje i da priču prilagodim nivou iskustva ljudi.

Java verzija

Veb-sajt će obrađivati najnovije verzije programskog jezika Java, dok se ovde na blogu proučava Java 8 SE.

Već sam pričao zašto je dobro da blog bude namenjen upravo Java 8 SE verziji Jave. Mislim da je dobro da postoje i blog i veb-sajt. To samo može da bude prednost za tebe jer ćeš imati izvor znanja i za verziju 8 i za novije verzije Jave.

Novi sajt namenjen učenju programiranja

Imam još jednu lepu vest za sve koji žele da uče programiranje: ovog vikenda sam pustio u rad i prototip veb-sajta koji je namenjen učenju programskog jezika Python.

Veb-sajt je u veoma ranoj fazi razvoja. Za sada postoji samo nekoliko tekstova o programiranju u programskom jeziku Pajton koji su namenjeni potpunim početnicima. Ali već spremam nove tekstove i polako ali sigurno razvijam veb-sajt. Verujem da ti može biti od koristi, jer Pajton je lep jezik, lak za učenje i veoma tražen u struci. Baci pogled:

Vijugavi put .rs

Toliko za sada, čim bude novih vesti u vezi Java veb-sajta oglasiću se ponovo povodom toga.

26.4.20

Operatori za pomeranje bitova udesno

Besplatni Java kurs - 25. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Postoje dva operatora za pomeranje udesno

Za pomeranje bitova udesno u Javi se koriste dva operatora. Jedan od njih pri pomeranju udesno u krajnje levi bit upisuje nule, a drugi upisuje prethodnu vrednost.

Zašto postoje dva operatora za pomeranje udesno, a samo jedan za pomeranje ulevo?

Razlog je taj što je prilikom rada sa označenim brojevima u Javi bitan krajnji levi bit. Pri pomeranju ulevo se sa desne strance uvek ubacuju nule jer krajnje desni bit nema posebnu važnost u odnosu na ostale. Ali pošto je kod označenih brojeva bitno koji je krajnji levi bit, nije isto ako ubacimo nulu ili jedinicu tokom pomeranja. Zato postoje dve verzija pomeranja udesno.

Operator za pomeranje bitova udesno koji uvek dodaje nule sa leve strane naziva se logički operator za pomeranje bitova udesno.

Operator za pomeranje bitova udesno koji prvo analizira koja je vrednost krajnjeg levog bita pa zatim tu istu vrednost doda sa leve strane naziva se aritmetički operator za pomeranje bitova udesno.

Svaki od navedenih operatora opisaću u zasebnim postovima.


Pročitaj i nastavak:

Besplatni Java kurs - 26. deo - Operator za aritmetičko pomeranje udesno

24.4.20

Operator za pomeranje bitova ulevo

Besplatni Java kurs - 24. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Za pomeranje bitova ulevo u Javi se koristi operator za pomeranje bitova ulevo.

<< Operator za pomeranje bitova ulevo

Operator za pomeranje bitova ulevo služi za pomeranje svih bitova nekog broja za određeni broj mesta ulevo. Npr:

int broj = 1 << 3;

Promenljiva broj će posle izvršenja naredbe imati vrednost 8. To je zato što u binarnom obliku, ako zanemarimo prve 24 nule, broj 1 izgleda ovako:

0000_0001

Pošto je broj 1 celobrojni literal tipa int, u stvari ima 32 bita, ali sam zbog čitljivosti ostavio samo krajnjih osam bitova. Jer 0000_0001 je mnogo preglednije nego 00000000000000000000000000000001. A za ovaj primer nam prva 24 bita nije bitno.

Dalje, deklarisao sam promenljivu tipa int kojoj sam dodelio vrednost broja 1 kod kog su bitovi pomereni za 3 mesta ulevo pomoću operatora <<. Posle pomeranja rezultat izgleda ovako:

0000_1000

Ponovo sam zanemario prva 24 bita. Kao što se vidi, jedinica se pomerila za 3 mesta ulevo, a sa desne strane su dopisane nule. Upravo tako radi operator za pomeranje bitova ulevo.

23.4.20

Operator ekskluzivno ILI - isključiva disjunkcija

Besplatni Java kurs - 23. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Matematička operacija isključive disjunkcije, tj. ekskluzivno ILI(⊕) se u Javi predstavlja operatorom ekskluzivno ILI^.

^ ekskluzivno ILI - isključiva disjunkcija (XOR)

Operator isključive disjunkcije radi nad bitovima dva operanda u binarnom obliku. Radi tako što poredi odgovarajuće bitove oba operanda na sledeći način: samo ako su kod oba operanda bitovi na istoj poziciji različiti, rezultujući bit na toj poziciji imaće vrednost 1. U svim ostalim slučajevima, odgovarajući rezultujući bit će imati vrednost 0.

22.4.20

Operator za logičko sabiranje - disjunkciju

Besplatni Java kurs - 22. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Matematička operacija disjunkcije, tj. logičkog sabiranja(∨) se u Javi predstavlja operatorom za logičko sabiranje - disjunkciju&.

| logičko sabiranje - disjunkcija (OR)

Operator disjunkcije deluje nad bitovima dva operanda u binarnom obliku. Ovaj operator poredi odgovarajuće bitove oba operanda na sledeći način: samo ako su kod oba operanda bitovi na istoj poziciji nule, rezultujući bit na toj poziciji takođe će imati vrednost 0. U svim ostalim slučajevima, odgovarajući rezultujući bit će imati vrednost 1.

21.4.20

Operator za logičko množenje - konjukciju

Besplatni Java kurs - 21. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Matematička operacija konjukcije, tj. logičkog množenja(∧) se u Javi predstavlja operatorom za logičko množenje - konjukciju &.

& logičko množenje - konjukcija (AND)

Operator konjukcije radi nad bitovima dva operanda u binarnom obliku. Radi tako što poredi odgovarajuće bitove oba operanda na sledeći način: samo ako su kod oba operanda bitovi na istoj poziciji jedinice, rezultujući bit na toj poziciji imaće vrednost 1. U svim ostalim slučajevima, odgovarajući rezultujući bit će imati vrednost 0.

20.4.20

Unarni operator za invertovanje bitova

Besplatni Java kurs - 20. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Matematička logička operacija negacije(¬) se u Javi predstavlja unarnim operatorom za invertovanje bitova ~. Bito je naglasiti da se negacija odnosi na bitove, a ne na celobrojnu vrednost!

~ Unarni operator za invertovanje bitova - negacija (NOT)

Operator negacije radi nad bitovima brojeva u binarnom obliku, a ne kao negacija brojeva u matematici. Npr. negacijom broja 3 u matematici se dobija -3, ali u Java programiranju negacijom pomoću unarnog operatora za invertovanje bitova se uvek dobiju brojevi za jedan manji od matematičke negacije. Zato je negirano 3 u Javi -4. Suprotna negacija bi bila: -4 negirano matematički je 4, a u Javi negacijom broja -4 dobija se broj 3.

Naravno, sve vreme pričam o unarnom operatoru za invertovanje bitova (~), a ne o unarnom operatoru minus (-). Unarni operator minus se pri negaciji ponaša „normalno”, kao minus u matematici.

Ova „čudna stvar” se dešava jer unarni operator za invertovanje bitova binarne brojeve transformiše u prvi komplement, a Java predstavlja negativne brojeve drugim komplementom. Razlika između prvog i drugog komplementa je upravo ta da je prvi komplement za 1 manji od drugog komplementa. Tačnije, drugi komplement se dobije tako što se prvo binarni broj invertuje (inverzni binarni broj se zove prvi komplement), a zatim mu se doda 1.

19.4.20

Java operatori za bitove

Besplatni Java kurs - 19. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Java operatori za bitove vrše operacije na nivou bitova. Ovi operatori posmatraju celobrojne tipove „ispod haube”, tj. kao nizove nula i jedinica. Tipovi sa kojima mogu da rade su byte, short, int, long i char. Java operatori za bitove su:

  • ~ unarni operator za invertovanje bitova - negacija (NOT)
  • & logičko množenje - konjukcija (AND)
  • | logičko sabiranje - disjunkcija (OR)
  • ^ ekskluzivno ILI - isključiva disjunkcija (XOR)
  • >> aritmetičko pomeranje udesno, čuva predznak
  • >>> logičko pomeranje udesno, dopisuje nule sa leve strane
  • << pomeranje ulevo, dopisuje nule sa desne strane

Java - Rad sa bitovima

Besplatni Java kurs - 18. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Pre nego što nastaviš da čitaš ovaj članak bilo bi dobro da se podsetiš šta je bit, šta je bajt i kakve to ima veze sa Java tipovima podataka. Takođe, korisno bi bilo da imaš predznanje iz matematičke logike. Ali ako nemaš, ne brini; objasniću ukratko osnove matematičke logike primenjene na Java programiranje.

Rad sa bitovima se odnosi na rad sa celobrojnim tipovima. Postoji pet celobrojnih tipova u Javi: byte, short, int, long i char. Tip char je, da podsetim, znakovni tip ali „ispod haube” je zapravo broj koji predstavlja redni broj karaktera iz tabele znakova. Taj redni broj je pozitivan ceo broj (ili nula). Npr. veliko latinično slovo A ima redni broj 65. Ostala četri celobrojna tipa mogu biti pozitivni, ali i negativni.

U programiranju se celobrojni tipovi kojima su predstavljeni samo pozitivni brojevi nazivaju neoznačeni, a tipovi kojima se predstavljaju i pozitivni i negativni brojevi se nazivaju označeni. Kod označenih je bitno da se sačuva informacija o znaku, tj. da li je broj pozitivan ili negativan. Kako je u kompjuterima sve predstavljeno nulama i jedinicama, tako se i znak predstavlja nulom ako je broj pozitivan, odnosno jedinicom ako je negativan.

Znak se, kao i kad koristimo „normalne” brojeve u matematici, piše „skroz levo”, npr pozitivan broj 3 se može napisati:

  • +3 u svetu matematike - naravno, plus se može izostaviti, podrazumeva se
  • 0_0000011 u Java svetu „ispod haube” - prva nula predstavlja znak „plus”

Podsetiću, binarni brojevi se mogu vizuelno razdvajati donjom crtom kako bi ljudima bili čitljiviji. Donja crta nema nikakve veze sa znakom broja. Navedeni broj 0_0000011 je isto što i 00000011, samo sam želeo da istaknem da krajnja leva nula predstavlja znak plus.

18.4.20

Java - Aritmetički operatori za dodelu uz aritmetičku operaciju

Besplatni Java kurs - 17. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Iza možda zastrašujućeg naslova krije se skup izuzetno korisnih operatora koji skraćuju izraze i čine kôd čitljivijim. Postoji pet operatora za dodelu uz aritmetičku operaciju:

  • += aritmetički operator za dodelu uz sabiranje
  • -= aritmetički operator za dodelu uz oduzimanje
  • *= aritmetički operator za dodelu uz množenje
  • /= aritmetički operator za dodelu uz deljenje
  • %= aritmetički operator za dodelu uz ostatak pri deljenju

16.4.20

Java - Aritmetički operatori

Besplatni Java kurs - 16. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Aritmetički operatori služe za izvršavanje aritmetičkih operacija kao što su sabiranje, oduzimanje, množenje itd.

Aritmetički operatori su:

  • + aritmetički operator za sabiranje
  • - aritmetički operator za oduzimanje / unarni minus
  • * aritmetički operator za množenje
  • / aritmetički operator za deljenje
  • % aritmetički operator za ostatak pri deljenju (moduo)
  • ++ unarni aritmetički operator za uvećanje za jedan (inkrement)
  • -- unarni aritmetički operator za umanjenje za jedan (dekrement)

15.4.20

Privatni časovi programiranja u Javi - novosti

Pročitaj i ostale novosti u vezi sa blogom.

Više od tri godine nisam menjao cene privatnih časova. U međuvremenu se broj mojih obaveza bitno uvećao. Imam mnogo više posla i jednostavno mi se ne isplati da držim časove jer vreme koje odvojim za držanje časova mogu mnogo bolje da naplatim programirajući.

Sa druge strane, volim da prenosim znanje, da pomažem drugima i da pričam o programiranju.

Java operator dodele

Besplatni Java kurs - 15. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Operator dodele, kako mu i samo ime govori, služi za dodelu vrednosti ili objekata. O objektima će biti više reči u budućim tekstovima. U Javi, kao i u mnogim drugim programskim jezicima, operator za dodeku je znak jednako.

=

Vrednosti se dodeljuju promenljivama, korišćenjem iskaza dodele u sledećem obliku:

promenljiva = vrednost;

Vrednost koja se dodeljuje može biti literal, druga promenljiva ili izraz, npr:

  • broj = 3; // 3 je literal
  • broj = drugiBroj; // drugiBroj je literal
  • broj = drugiBroj + 3; // drugiBroj + 3 je izraz

Umesto promenljivoj, vrednost može biti dodeljena i članu niza ili neke složenije konstrukcije, ali o više o tome kada budu obrađivane neke naprednije teme programiranja u Javi.


Pročitaj i nastavak:

Besplatni Java kurs - 16. deo - Java - Aritmetički operatori

Java operatori

Besplatni Java kurs - 14. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Operatori vrše sve potrebne operacije kao što su sabiranje, oduzimanje, množenje, deljenje, operacije nad bitovima, poređenje itd.

Java operatori poređani prema prioritetu izvršavanja (operators precedence):

  • izraz++    izraz--
  • ++izraz    --izraz    +izraz    -izraz    ~    !
  • *    /    %
  • +    -
  • <<    >>    >>>
  • <    >    <=    >=    instanceof
  • ==    !=
  • &
  • ^
  • |
  • &&
  • ||
  • ?:
  • = += -= *= /= %= &= ^= |= <<= >>= >>>=
  • ->

Svi navedeni operatori će biti detaljno objašnjeni u budućim tekstovima i još uvek nema potrebe da ih pamtiš. Samo pročitaj spisak da bi stekao osećaj kako operatori izgledaju.

U naslovu sam pomenuo prioritet izvršavanja operatora. U složenijim izrazima neki operatori će imati prednost i biti izvršeni pre drugih. Ako obratiš pažnju na spisak, primetićeš da postoji petnaest različitih stepena prioriteta operatora. Svaka stavka, tj. svaki red spiska, predstavlja skup operatora sa istim stepenom prioriteta. Za sada je najbitnije da zapamtiš da postoji prioritet izvršavanja operatora, da nisu svi ravnopravni u složenijim izrazima.


Pročitaj i nastavak:

Besplatni Java kurs - 15. deo - Java operator dodele

14.4.20

Java separatori

Besplatni Java kurs - 13. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Separatori su elementi koji služe za razdvajanje, završavanje naredbi, grupisanje, definisanje i sl. U Javi ih zovu i punktuatori, mada se češće koristi reč separatori.

Java separatori su:

  • ( ) obične zagrade
  • { } vitičaste zagrade
  • [ ] uglaste zagrade
  • ; tačka-zarez
  • , zarez
  • . tačka
  • ... tri tačke (ellipsis)
  • :: dve dvotačke
  • @ majmunsko a

13.4.20

Java komentari i beline

Besplatni Java kurs - 12. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Postoje neki elementi koje programski jezik Java ignoriše, a to su komentari i beline. Ovi elementi imaju svrhu da programerima olakšaju čitljivost i razumevanje kôda, ali računarima nisu od koristi i zato neće biti prevedeni u Javin bajtkôd, a samim tim na kraju ni u mašinski jezik. Java kompajler koristi beline samo da bi jasno razdvojio delove kôda pri tzv. parsiranju.

Java komentari

Komentari u Javi se mogu pisati na tri načina, ali bitnije je da imaju dve uloge:

  • obični komentari - služe za pojašnjenje delova kôda
  • dokumentacioni komentari - služe za pisanje dokumentacije

Ažuriranje bloga za verziju Java 8 SE

Pročitaj i ostale novosti u vezi sa blogom.

Programski jezik Java doživeo je bitne promene u prethodnih nekoliko godina. U vreme nastanka bloga „Java za sve”, doneo sam odluku da tekstovi budu prilagođeni za Java 7 SE verziju koja je tada bila najšire korišćena verzija Jave. U međuvremenu se dosta toga promenilo u svetu Jave i logično bi bilo da ažuriram blog.

S obzirom na to da je učestalost objavljivanja novih verzija Jave bitno uvećana od verzije 9 i da nemaju sve verzije dugoročnu podršku, o čemu sam pisao ranije, ne bi imalo smisla da se blog ažurira kad kod se pojavi nova verzija Jave. Takođe, zbog činjenice da trenutno postoje zvanični Oracle sertifikati za samo dve SE verzije Jave (Java 8 SE i Java 11 SE) bilo bi pogodno izabrati jednu od te dve verzije za ažuriranje bloga.

Java 8 SE je sa sobom donela neke jako bitne promene koje su po mom mišljenju bitnije od promena koje je uvela Java 11 SE. Zbog toga i zbog činjenice da je Java 8 SE bliža verziji Jave o kojoj je do sada pisano na blogu, doneo sam odluku da ažuriram blog tako da prati upravo verziju Java 8 SE.

12.4.20

Java - Konverzija tipova

Besplatni Java kurs - 11. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Nekada je potrebno da se podaci jednog tipa prevedu u drugi tip podataka. Npr. Java aplikacija se može koristiti u administrativne svrhe na nekom fakultetu. Za uspeh studenata na fakultetu nekada je potrebno koristiti prosek, što može biti float tip (npr. 9.72F), ali nekada je praktičnije koristiti cele brojeve, npr. u slučaju prikazivanja ocene (10) za šta je dovoljno koristiti tip int ili čak, zbog uštede memorije, tip byte. Moguće je izvršiti preobražaj podataka iz jednog tipa u drugi. Postupak preobražaja iz jednog tipa u drugi naziva se konverzija tipova.

Moguće je vršiti konverziju kako primitivnih, tako i referentnih tipova. U ovom postu biće objašnjena konverzija primitivnih tipova, a konverzija referentnih tipova biće objašnjena u nekom od narednih postova,

Postoji dve vrste konverzije tipova:

  • automatksa (implicitna) konverzija tipova
  • ručna (eksplicitna) konverzija tipova

10.4.20

Java promenljive (Java varijable)

Besplatni Java kurs - 10. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Promenljive predstavljaju imenovana mesta u memoriji u kojima se čuvaju vrednosti. Promenljive mogu biti primitivnog ili referentnog tipa. Promenljive referentnog tipa će biti obrađene u nekom od narednih postova.

Promenljive primitivnog tipa

Varijable primitivnog tipa uvek sadrže primitivne vrednosti tačno određenog tipa. Svaka promenljiva mora imati i naziv pomoću kojeg će biti korišćena.

Nazivi promenljivih

Promenljive se identifikuju pomoću naziva. Nazivi promenljivih su proizvoljni i mogu sadržati slova, brojeve, znakove za dolar i donje crte. Iako mogu sadržati brojeve, nazivi promenljivih ne smeju počinjati sa brojem, npr:

  • promenljiva1 ispravan naziv
  • 1promenljiva neispravan naziv

9.4.20

Java - Logički, znakovni i tekstualni literali

Besplatni Java kurs - 9. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Osim literala kojima se predstavljaju brojevne vrednosti prjogramski jezik Java koristi još tri vrste literala:

  • logički literali
  • znakovni literali
  • tekstualni literali

Java - Literali za brojeve u pokretnom zarezu tipa float

Besplatni Java kurs - 8. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Osim literala za brojeve u pokretnom zarezu tipa double u programskom jeziku Java se koriste i literali za brojeve u pokretnom zarezu tipa float. Literali tipa float imaju manji opseg vrednosti od literala tipa double, ali zauzimaju manje mesta u memoriji. Podrazumevani tip literala za brojeve u pokretnom zarezu u Javi je double i zato je u slučaju da se žele koristiti literali tipa float neophodno da se na kraju literala stavi slovo F. Postoji nekoliko oblika literala tipa float.

Pikazivanje literala tipa float pomoću decimalnih brojeva

Najčešće korišćen oblik literala tipa flaot je decimalni zapis. Npr:

2.73F

Navedeni broj predstavlja broj 2,73.

8.4.20

Java - Literali za brojeve u pokretnom zarezu

Besplatni Java kurs - 7. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Sem celobrojnih literala u programskom jeziku Java se koriste i literali za brojeve u pokretnom zarezu koji služe za prikazivanje realnih brojeva. Postoje dva tipa literala za brojeve u pokretnom zarezu koji imaju različite opsege vrednosti: double i float. I double i float literali koriste tačku za razdvajanje celobrojnog od decimalnog dela. Podrazumevani tip literala za brojeve u pokretnom zarezu u Javi je double.

Literali za brojeve u pokretnom zarezu tipa double

Literali za brojeve u pokretnom zarezu tipa double imaju najveći opseg koji je veći nego kod svih ostalih literala. Postoji više oblika literala tipa double.

Pikazivanje literala tipa double pomoću decimalnih brojeva

Osnovni, najčešće korišćen oblik literala tipa double je decimalni zapis. Npr:

2.73

Navedeni broj predstavlja broj 2,73.

7.4.20

Java - Celobrojni literali tipa long

Besplatni Java kurs - 6. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Celobrojni literali u programskom jeziku Java su podrazumevano tipa int, što omogućava dovoljan opseg za najčešće slučajeve korišćenja. U slučaju potrebe za korišćenjem većeg opsega, Java pruža mogućnost rada sa celobrojnim literalima tipa long.

Celobrojni literali tipa long

Celobrojni literali tipa long služe za prikazivanje celih brojeva većeg opsega. Kao i kod celobrojnih literala tipa int, postoji nekoliko oblika celobrojnih literala tipa long.

Pikazivanje celobrojnih literala tipa long pomoću decimalnih brojeva

Kao i kod celobrojnih literala tipa int, najpoznatiji oblik je decimalni zapis. Decimalni zapis je isti kao i kod decimalnog zapisa tipa int sa jednom bitnom razlikom: na kraju broja mora se staviti slovo L, veliko ili malo. To je veoma bitno jer bez slova L na kraju kompajler će misliti da se radi o tipu int. Primer celobrojnog literala tipa long:

3000000000L

Navedeni broj od tri milijarde je prevelik da bi se prikazao pomoću tipa int. Zato će kompajler prijaviti grešku ako se ukloni slovo L sa kraja, jer bi to značilo da je broj tipa int.

18.3.20

Stigla je Java 14

Pročitaj i ostale Java vesti.

Upravo je objavljena najnovija verzija programskog jezika Java - Java 14. Kao što sam pisao ranije, nemaju sve Java verzije istu "težinu" ni dugoročnu podršku, ali svaka verzija donosi neka poboljšanja i korisne novine.

Java 14 je donela 16 novina i promena:

  • Pattern Matching for instanceof (Preview)
  • Packaging Tool (Incubator)
  • NUMA-Aware Memory Allocation for G1
  • JFR Event Streaming
  • Non-Volatile Mapped Byte Buffers
  • Helpful NullPointerExceptions
  • Records (Preview)
  • Switch Expressions
  • Deprecate the Solaris and SPARC Ports
  • Remove the Concurrent Mark Sweep (CMS) Garbage Collector
  • ZGC on macOS
  • ZGC on Windows
  • Deprecate the ParallelScavenge + SerialOld GC Combination
  • Remove the Pack200 Tools and API
  • Text Blocks (Second Preview)
  • Foreign-Memory Access API (Incubator)