Leksionet Java 1
Leksionet Java 1
Leksioni 1
Java eshte nje gjuhe programimi e orientuar nga objektet (object oriented). E modeluar pas C++ java u
projektua te jete e thjeshte dhe e pranueshme ne plat!ormat dhe ne sistemet e sh!r"te#imit.
Java u #hvillua ne Sun $icros"stems ne vitin %&&% si pjese e projekteve kerkimore per #hvillimin e so!teve
per paisje elektronike. S"nimet ishin te krijonin nje gjuhe e!iciente dhe te shpejte dhe 'e mbahet
lehtesisht ne shume paisje hard(are. Jane keto avanta#he 'e e bejne kete gjuhe dhe sot ideale per te
reali#uar programe nepermjet )orld )ide )eb.
Java eshte e panvarur nga plat!orma'e do te thote 'e ka mundesi 'e te levi#e lehte nga nje sistem
kompjuteri ne nje tjeter. Java eshte e panvarur nga plat!orma ne nivel te burimit dhe ne nivel binar.
*e nivelin e burimit (source level) tipet primitiv te te dhenave te Java+s kane madhesi te njejta ne te
gjitha plat!ormat ku ajo #hvillohet. ,lasat dhe librarite e themeluara na Java bejne te mundur 'e te
shkruajne kod 'e mund te #hvendoset lehte ne plat!orma te ndr"shmepa pase nevojen 'e te rishkruhet
k" kod. Skedaret binare te java jane gjithashtu te panvarur nga plat!orma dhe mund te ek#ekutohen ne
disa plat!orma te ndr"shme pa pase nevoje 'e te rikompilohet burimi.
,odet e biteve (b"tecodes) jane nje bashkesi instruksionesh 'e ngjasojne me kodet e makines por nuk
jane speci!ike te nje procesori. ,ur kompilojme nje program te shkruar ne shumicen e gjuheve te
programimitkompilatori perkthen programin nje kode te makines ose ne instruksione te procesorit.
*e keto gjuhe nese do te perdoresh te njetin program ne nje sistem tjeter duhet me pare te shkohet te
kodi origjinal te gjesh nje kompilator per ate sistemdhe te rikompilosh kodin. ,jo nuk ndodh ne Java .
-ig %. ne kompilatore tjere -ig / . me interpretuesin e Java+s
$jedisi ku #hvillohet Java ka d" pjese. ,ompilatorin dhe Interpretuesin. ,ompilatori e gjeneron
programin ne Java jo ne nje kod makine por ne kode bitesh (b"tecodes). Disavanta#hi i kesaj teknike
eshte shpejtesia ne ek#ekutim. 0rogramet speci!ike per sistemin ek#ekutohen direkt ne hard(are per te
cilat jane kompiluar.per kete ata ek#ekutohen me shpejt se kodet e biteve ne Java.
Java eshte nje gjuhe e orientuar nga objektet 'e do te thote 'e gjate programimit cdo gje konceptohet si
nje objekt me vete. Java permban nje bashkesi librarish 'e sigurojne tipet ba#e te te dhenavea!tesite e
inputit dhe te outputit te sistemit si dhe !unksionet ba#e.
Java eshte nje gjuhe e thjeshte per tu mesuar. S"nimet kr"esore kane 'ene thjeshtesia ne te shkruar ne
kompilim dhe ne mesim. *e Java mungojne shenjuesit stringjet dhe tabelat jane objekte.
Programi i pare ne Java
*je aplikacion ne Java eshte nje program kompjuteri i cili ek#ekutohet kur ju jepni komanden per
aktivi#imin e Java 1irtual $achine (J1$). 0rogrami "ne i pare do jete nje aplikacion i cili thjesht para'et
ne ekran nje rresh mesa#hi pershendetes. ," program tregon disa karakteristika ba#e te cdo aplikacioni
ne Java.
%
Java I Sidita Duli
// program qe afishon mesazh pershendetes
public class Psh1
{
// metoda main nis eksekutimin e programit
public static void main( String args[]
{
S!stem"out"println( #pershendet$e%# &
' // perfundimi i metodes main
'
*e ekran do a!ishohet mesa#hi . pershendetje2
*e rreshtin e pare // program qe afishon mesazh pershendetes
kemi nje koment ne java. 3akonisht eshte praktike e mire 'e cdo program te nise me nje koment i cili
s'aron 'ellimin e programit. Cdo rresht ne Java i cili nis me d" simbole 4 eshte nje koment rresht. D"
simbole te tilla i tregojne kompilatorit se jane thjesht komente dhe te mos trajtohen si instruksione te
gjuhes. ,omentet iu sherbejne cdo le5uesi 'e ta kuptoje programin.
Cdo koment 'e nis me 44 eshte nje koment rresht sepse ne te per!shihen vetem simbolet e shenuara ne
ate rresht dhe mbaron me nisjen e rreshtit te ri. *je koment i tille mund te nise dhe ne gj"sme te
rreshtit duke bere koment cdo !jale pas simboleve 44 dhe mbaron perseri ne !und te atij rreshti.
3akonisht komentet vendosen per disa rreshta dhe per kete sherbejne simbolet 46 dhe 64. 0ra ne kod
mund te kemi dhe te tille koment .
/( k! eshte
n$e koment
i ndare ne disa rreshta (/
*e java perdoren dhe te ashtu'uajturin Javadoc 'e nisin me 466 dhe mbarojne me 64. Dhe ne kete rast
cdo simbol i vendosur mes ket"re simboleve injorohet nga komplilatori dhe lejon programatorin 'e te
vendose dokumentacionin e programit direkt e ne kod. ,omente te tilla jane me te pre!eruarit aktualisht
sepse ek#istojne dhe aplikacione te tille pjese e Java SE Development ,it 'e le5on keto javadoc dhe
nderton dokumentacionin ne !ormat 78$9. $e poshte do trajtohen javadocs me gjeresisht.
:abime 'e shpesh bejne programatore te rinj eshte mosvenia e simboleve te komentit dhe nga kjo
marrin gabim sintaksor. Sintaksa e nje gjuhe programimi eshte teresia e rregullave 'e duhet te #batohen
ne ate gjuhe. *je gabim sintaksor ndodh kur kompilatori gjen dicka 'e nuk eshte ne #batim te rregullave
te gjuhes Java psh ne sintakse. *e kete rast jepet nje mesa#h gabimi 'e ndihmon programuesin te gjeje
gabimin dhe ta korrigjoje ate. :abimet sintaksore ndr"she 'uhen dhe gabime kompilimi ose gabime
gjate kohes se kompilimit sepse kompilatori i gjen keto lloj gabimesh pikerisht gjate kohes se kompilimit.
Ju nuk mund te ek#ekutoni programin pa i korrigjuar me pare gjitha gabimet sintaksore.
public class Psh1 eshte pjesa e kodit 'e ben deklarimin e klases ne Java. Cdo program ne Java
duhet te kete minimalisht nje rresht te tille deklarimi te klases. ,eto klasa jane te krijuara nga
programuesi. -jala class eshte !jale celes e gjuhes Java dhe perdoret per deklarimin e nje klase ndi'et
nga emri i klases ne kete shembull nga 0sh%. 0raktike e mire eshte 'e cdo emer klase te nise me
shkronje te madhe dhe cdo !jale 'e per!shihet ne emer gjithashtu te nise me shkronje te madhe. 0sh
pre!erohet ,laseSiShembull si emertim klase. Emri i klases ne Java eshte nje identi!ikator pra nje seri
karakteresh 'e per!shin shkronja shi!ra simboli vije poshte ( ; ) dhe simboli dollar ( < ). Identi!ikatori
nuk duhet te nise me nje simbol shi!ror gjithashtu nuk duhet te permbaje hapsira mes !jalesh. Duhet
theksuar se ne Java kane dallim shkronjat e medha nga shkronjat e vogla pra Psh1 eshte e ndr"shme nga
psh1.
*e shembujt tone te pare gjitha klasat do deklarohen edhe me !jalen celes public. 0er momentin do
themi vec se kjo eshte nje !jale celes e Java+s 'e duhet per te deklaruar klasen ne nje skedar te vetin te
/
Java I Sidita Duli
tipit .java. =plikacioni "ne i pare do jete i ruajtur ne skedarin 0sh%.java. $e vone do s'arohet me teper
roli i !jales celes public. Duhet te vini re se nje kalse publike duhet ruajtur ne nje skedar 'e ka emer te
njejte me klasen identik ne karaktere dhe ne madhesi shkronjash perndr"she do kete gabim kompilimi.
8rupi i klases nis me nje simbol kllape > 'e hapet dhe ne !und te tij eshte kllapa mb"llese perkatese ?.
0raktike e mire eshte 'e trupi i programit te spostohet pak me djathtas per tu permiresuar
le5ueshmerine. :jithshtu ndi'ni kete udhe#im. sapo te hapni nje kllape > te shkruani menjehere dhe
kllapen mb"llese dhe me pas vendosni instruksionet brenda ket"re kllapave. ,jo praktike ndi'et per te
shmangur gabimet e shumta 'e behen ne !illim ku ose harrohen te mb"llen kllapat ose ngaterrohet
vendosja e t"re ne program.
public static void main( String args[]
," rresht eshte pikenisja e cdo programi ne Java. $ain eshte nje metode dhe nje gje e tille dallohet nga
kllapat 'e vendosen menjehere pas emrit te metodes. 3akonisht klasat ne Java permbajne te pakten nje
metode. 0er nje aplikacion te ek#ekutueshem ne Java nje metode duhet te kete kete emertim main dhe
e deklaruar ek#aktesisht ne kete men"re sic tregohet ne shembull. $etodat mundesojne kr"erjen e
det"rave dhe kthejne in!ormacion kur kane per!unduar det"ren e t"re. -jala celes void tregon se metoda
do kr"eje det"ren por sdo ktheje asnje in!ormacion pas mbarimit te saj. *e leksionet e ardhshme do
s'arohen vlerat 'e kthejne metodat pas per!undimit te punes se t"re.
S!stem"out"println( #pershendet$e%# &
," rresht eshte nje instruksion 'e kr"en nje veprim . a!ishon cdo !jale 'e ndodhet mes thonj#ave. Cdo
rradhe karakteresh e vendosur mes simboleve te thonj#ave 'uhet ndr"she dhe string. 7apsirat mes
!jaleve ne nje string nuk injorohen nga kompilatori. :jithashtu vihet re se si string mund te jene edhe
!jale ne gjuhen sh'ipe dhe te gjitha keto a!ishohen ashtu sic shkruhen brenda karaktereve thonje#a.
S!stem"out"println k" njihet si intruksioni 'e ben a!ishim ne kanalin standart te daljes ku ne
)indo(s eshte dritarja e $S+D@S prompt ne Ani5 9inu5 $ac @S B eshte shell ne disa editore te Java+s
eshte e per!shire si consola.
$etoda S!stem"out"println a!ishon nje rresht tekst ne dritaren e consoles. Stringa mes
thonj#ave eshte argument per metoden. 1ete metoda S!stem"out"println ben a!ishimin dhe kur
per!undin rreshti kalon kursorin nje rresht me poshte ne dritare.
," rresht eshte nje instruksion ne gjuhen Java. Cdo instruksion i tille mbaron me simbolin pikpresje (C).
,ur ek#ekutohet k" instruksion behet a!ishimi i mesa#hit ne ekran. $etodat permbajne nje ose disa
instruksione te cilat kr"ejne det"rat 'e duhet te beje metoda.
Kompilimi dhe ekzekutimi i aplikacionit te pare ne Java
9e te kompilojme dhe ek#ekutojme programin e sapo krijuar gjate shembullit me lart. 0er te reali#uar
kete duhet 'e ne kompjuter te jete instaluar nje version i Java Development ,it (JD,). *'s sistemi i
sh!r"te#imit eshte )indo(s do ek#ekutohet ne command prompt kurse n's jemi ne nje kompjuter i cili
ka sistem 9inu5 do ek#ekutohet ne shell te tij. *a duhet te shkojme ne direktorine ku kemi ruajtur
skedarin .java 'e permban programin. ,omanda 'e ben kompilimin e nje programi ne Java eshte $avac.
*e shembullin me lart do japim komanden e kompilimit .
$avac Psh1"$ava
*'s programi nuk ka asnje gabim sintaksor atehere ne direktorine e punes do krijohet nje skedar i ri me
emrin 0sh%.class i cili permban kodet e biteve per kete aplikacion. 0er te ek#ekutuar aplikacionin duhet
perdore komanda java si me poshte .
java 0sh%
dhe makina virtuale J1$ ek#ekuton kodet e biteve 'e ndodhen ne skedarin .class.
*'s gjate kompilimit jepet mesa#hi . javac: command not found ose 'javac' is not recognized as an
internal or external command, operable program or batch file atehere duhet ndr"shuar variabli path
ne environment variables te sistemit.
D
Java I Sidita Duli
*'s gjate kompilimit ka mesa#he gabimi per gabime sintaksore keto jane udhe#uese 'e ju te gjeni
rreshtin ku eshte gabimi dhe jepet nje ars"e pse eshte gjeneruar k" gabim.
*'s gjate kompilimit ju jepet gabimi . Public class ClassName must be defined in a file called
ClassNamejava, kjo do te thote se emri i klases publike nuk eshte i njejte me emrin e skedarit ose ju
keni sht"pur gabim komanden per ek#ekutimin e skedarit .java.
Afishimi i nje rreshti te vetem tekst me disa instruksione
*je rresht i vetem tekst mund te a!ishohet duke perdore disa instruksione. *e shembullin me lart ishte
instruksioni S!stem"out"println 'e ben a!ishimin e nje rreshti ne console. Jepet programi i
meposhtem .
public class Psh)
{
public static void main( String args[]
{
S!stem"out"print( #Programi i pare # &
S!stem"out"println( #ne *ava%# &
'
'
Dallimi ne kete program jane d" rreshtat e kodit
S!stem"out"print( #Programi i pare # &
S!stem"out"println( #ne *ava%# &
te cilet a!ishojne ekran ne nje rresht te vetem mesa#hin . 0rogrami i pare ne Java2
Dallimi mes print dhe println eshte se i pari le kursorin ne ate po#icion pas a!ishimit te mesa#hit pra nuk
kalon ne rresht te ri. ,urse println pasi ka bere a!ishimin e mesa#hit kalon kursorin ne nje rresht me
poshte.
Afishimi i disa rreshtave tekst me nje instruksion te vetem
0er te bere a!ishimin e disa rreshtave tekst me nje ishtruksion te vetem perdorim karakterin rresht i ri i
cili i tregon print dhe println te kaloje kursorin ne nje rresht meposhte. =shtu si karakteri hapsire ose si
karakteri tab kemi simbole per te kaluar
public class Psh+
{
public static void main( String args[]
{
S!stem"out"println( #Programi,ni pare,nne *ava%# &
'
'
0rogrami me lart ben kete a!ishim .
Programi
i pare
ne *ava%
1ini re 'e kete para'itje e ben simboli i ne( line (En). Simboli backslash (E) perdoret per te treguar nisjen
e nje simboli special. *e java jane disa simbole te tille .
En rresht i ri po#icionon kursorin ne !illimin e nje rreshti te ri
Et tab hori#ontal po#icionon kursorin nje tab me djathtas
F
Java I Sidita Duli
Er kthim ne !illim po#icionon kursorin ne !illim te rreshtit aktual cdo simbol 'e shkruhet pas ketij
simboli i mbivendoset simboleve te meparshme te !illimit te rreshtit
EE kjo eshte men"ra e shenimit te simbolit backslash (E)
EG kjo eshte men"ra e shenimit te simbolit thonj#e te perdorur si ku!injte e nje stringe.
Dokumentimi
*je ide e mire e Java ka 'ene idea 'e te shkruash nje kod eshte e rendesishme por dhe dokumentimi
eshte gjithashtu i rendesishem. 0roblem ka 'ene mirembajtja e dokumentimit. ,ur kodi dhe
dokumentimi jane te shkeputur behet me veshtiresi ndr"shimi i dokumentacionit sa here 'e ndr"shon
kodi. 3gjidhja duket e thjeshte. lidhet dokumetacioni me kodin. $en"ra me e thjeshte eshte te vendoset
dokumentacioni ne te njejtin skedar me kodin.
0ra ju keni nevoje per te ndertuar dokumentimin ne nje !orme komenti dhe keni nevoje per nje mjet 'e
merr keto komente dhe i vendos ne nje !orma me te pershtatshme. $jeti 'e merr komentet 'uhet
javadoc. Javadoc perdor te njejten teknologji me kompilatorin e javes por kjo kerkon per komente te
vecate 'e ju keni vendosur ne program. He#ultati i javadoc eshte nje skedar 78$9. *e kete men"re
javadoc ju mundeson te krijoni dhe te mirembani nje skedar te vetem dhe gjithashtu mundeson
gjenerimin automatik te dokumentacionit te nevojshem. 8e gjitha komandat e javadoc para'iten brenda
komenteve /(( dhe (/ ,a d" men"ra per te perdore javadoc.
%. *der!utja e 78$9
/. 0erdorimi i tageve IdocG
8ag+et doc jane komanda 'e !illojne me nje simbol J
Disa shembuj tagesh.
-see
," tag ju lejon ti re!eroheni dokumentacionit ne klasa te tjera. javadoc do te gjeneroje 78$9 me tagun
-see 'e lidhet me dokumantacioni tjeter.
-version ka !ormen.
-version information mbi versionin
*e te cilen in!ormacioni ka nje in!ormacion te nevojshem.
-author ka !ormen.
-author informacion mbi autorin
," in!ormacion mund te per!shije emrin tuaj adresen e mailit ose in!ormacione shtese.
-return
-return pershkrim
0ershkrimi ju jep nje domethenie te vlerse 'e kthehet.
-param
-param emer parametri pershkrim
Emer parametri eshte identi!ikuesi ne listen e parametrave dhe pershkrimi eshte teksti 'e mund te
va#hdoje per shume rreshta.
//. leks+./ello0ate"$ava
import $ava"util"(&
/(( programi i pare ne $ava"
( Paraqet n$e stringe me daten e sotme"
( -author Sidita
-author siditaduli-!ahoo"com (
-version )"1 (/
public class /ello0ate {
/((
-param args tabele me stringe argumentesh (
-return nuk ka vlera qe kthehen (/
K
Java I Sidita Duli
public static void main(String[] args {
S!stem"out"println( #/ello2 it3s. 4 &
S!stem"out"println( ne5 0ate(&
'
' ///.6
Hreshti i pare !illon me 44. si nje simbol i vecante per rreshtin e komenteve 'e permban skedari.,"
permban nje in!ormacion per vendosjen e skedarit ne kete rast leksD si dhe emrin.
*e !und ndodhet ///: 'e tregon !undin e kodit dhe 'e lejon te jete i update+uar automatikisht pasi te
kontrollohet me nje kompilator dhe te ek#ekutohet.
Leksioni !
"umrat e plote ne nje program ne Java
*e kete shembull do reali#ohet mbledhja e d" numrave 'e merren nga perdoruesi dhe ne ekran do
a!ishohet shuma e kt"re d" numrave. 0rogrami duhet te mbaje shenim d" numrat 'e perdoruesi jep nga
tastjera dhe nje gje e tille behet duke perdore elemente te 'uajtur variabla. ," shembull tregon kete
koncept.
import $ava"util"Scanner&
public class Shuma
{
public static void main( String args[]
{
Scanner input 7 ne5 Scanner( S!stem"in &
int number1&
int number)&
int sum&
S!stem"out"print( #$ep numrin e pare. # &
number1 7 input"ne8t9nt(&
S!stem"out"print( #$ep numrin e d!te. # &
number) 7 input"ne8t9nt(&
sum 7 number1 : number)&
S!stem"out"print( #shuma eshte . #: sum &
'
'
Hreshti import $ava"util"Scanner& ben deklarimin e nje importimi i cili ndihmon kompilatorin
te gjeje klasen 'e duhet te perdoret ne kete program. *je teknike e !u'ishme e Java+s eshte nje grup
klasash te paracaktuara te cilat mund te perdoren ne programet 'e ne krijojme. ,eto klasa jane te
grupuara ne paketa dhe te gjithave bashke iu re!erohemi si libraria e klasave ne Java ose ndr"she Java
=pplication 0rogramming Inter!ace ( Java =0I). 0rogramuesit perdorin !jalen celes import per te
identi!ikuar keto klasa te paracaktuara ne nje program. 8e gjithe importimet duhet te vendosen para
rreshtit te deklarimit te klases. 1endosja e ketij deklarimi ne nje tjeter po#icion eshte nje gabim sintaksor.
*'s harrohet te per!shihet nje deklarim import per nje klase te librarise te perdorur ne program do te
merret nje gabim gjate kohes se kompilimit.
,lasa shuma duhet te jete e ruajtur ne nje skedar te vetin me mbarese .java.
Hreshti . Scanner input 7 ne5 Scanner( S!stem"in & eshte nje instruksion per
deklarim variabli. =i speci!ikon emrin ( input ) dhe tipin (Scanner) te nje variabli te perdorur ne kete
L
Java I Sidita Duli
program. *je variabel eshte nje vend ne memorjen e kompjuterit ne te cilin mund te ruajme vlera per ti
perdore me vone ne program. Cdo variabel duhet te deklarohet me nje emer dhe me nje tip para se te
perdoren. *je variabel aksesohet duket perdore emrin e tij. 8ipi i variablit speci!ikon se c!are lloj
in!ormacioni do ruajme ne kete hapsire memorjeje. Si cdo instruksion tjeter edhe deklarimi i nje variabli
mbaron nje nje simbol pikepresje.
8ipi i te dhenave Scanner mundeson 'e perdoruesi te vendose te dhena ne program. ,eto te dhena
mund te vijne nga disa burime nga tastjera ose nga nje skedar ne disk.
Simboli (M) tregon se variabli input duhet te iniciali#ohet me shprehjen
ne5 Scanner( S!stem"in 'e eshte ne te djathte te bara#imit. ,jo shprehje krijon nje objekt te
klases Scanner i cili le5on te dhena nga tastjera. Deklarime variablash behen dhe ne keto instruksione .
int number1&
int number)&
int sum&
,eto deklarime behen per variablat number% number/ dhe sum te tre variabla per tipin int. ,eto
variabla mbajne si vlera numra te plote. ,eto variabla nuk jane iniciali#uar ende.
Instruksionet per deklarimin e variablave mund te ndahet ne disa rreshta te ndare me presje ne
nje instruksion te vetem si meposhte .
int number12
number)2
sum&
0raktike e mire eshte 'e #gjedhja e emrit te variablit te behet me 'ellim 'e te ndihmoje ne kuptimin e
programit. Emri i variablit do ishte mire te #gjidhej ne lidhje me 'ellimin per te cilin do perdoret
programi. Emrat e variablave pre!erohet te nisin me shkronje te vogel dhe cdo !jale 'e eshte pjese e
emrit nis me shkronje te madhe.
*e instruksionin . S!stem"out"print( #$ep numrin e d!te. # &
S"stem eshte nje klase pjese e paketes java.lang. ,jo klase nuk eshte importuar ne !illim te programit
sepse e gjithe paketa java.lang importohet automatikisht ne cdo program ne java. ,jo eshte e vetmja
pakete e Java =0I 'e ska nevoje per importim. Cdo klase tjeter jashte kesaj pakete duhet importuar para
se te perdoret ne program.
Hreshti . number1 7 input"ne8t9nt(& perdor metoden ne5tInt per te marre nje numer te
plote nga tastjera. *e kete pike programi pret 'e perdoruesi te jape nje vlere te plote dhe te sht"pe
butonin Enter per ti kaluar vlerat programit.
0erdoruesi ne kete program mund te sht"pe cdo lloj vlere si numer te plote. 0rogrami presupo#on se
perdoruesi do jape vlera te plota nga tastjera. *'s nuk ndodh keshtu n's perdoruesi jep vlera te
ndr"shme nga numra te plote atehere do ndodhe nje gabim gjate kohes se ek#ekutimit dhe programi do
per!undoje.
Instruksioni . sum 7 number1 : number)&
eshte nje instruksion vleredhenie i cili llogarit shumen e d" variablave number% dhe number/ dhe
variabli sum merr si vlere kete shume. ," instruksion le5ohet . I sum merr vleren e number%+number/G.
Shumica e llogaritjeve behen ne instruksionet e vleredhenieve te variablave. *e keto raste ajo pjese e
instruksionit 'e per!shin llogaritje 'uhet ndr"she dhe shprehje. *je shprehje eshte pjesa e instruksionit
'e ka nje vlere 'e i sho'erohet. 0er shembull vlera e shprehjes number%+number/ eshte vete shuma e
numrave.
Koncepte te memorjes
1ariablat si number% number/ dhe sum korrespondojne emrave per #ona te ndr"shme te memorjes.
Cdo variabel ka . emer tip madhesi vlere.
0as ek#ekutimit te instruksionit . number1 7 input"ne8t9nt(&
N
Java I Sidita Duli
numri i dhene nga perdoruesi vendoset ne hapsiren e memorjes 'e kompilatori i ka caktuar variablit
number%. 0sh perdoruesi sht"p vleren O%. ,ompjuteri vendos kete vlere ne #onen e memorjes per
variablin number%. ,ur vendoset nje vlere ne memorje ajo i mbishkruhet vleres 'e ajo hapsire
memorjeje ka pase me perpara. 0ra vlera e meparshme humbet.
0as ek#ekutimit te instruksionit . number) 7 input"ne8t9nt(&
n's psh perdoruesi vendos vleren %/ atehere kompjuteri vendos kete vlere ne #onen e memorjes per
variablin number/. 0asi programi merr vlerat per variablat number% dhe number/ ai llogarit shumen e
ket"re d" vlerave dhe vendos kete shume ne variablin sum. ,ete gje e ben instruksioni . sum 7
number1 : number)&
ai llogarit shumen dhe #evendeson me kete vlere vleren e meparshme te sum. 1lerat e number% dhe
number/ nuk ndr"shojne. ,eto vlera jane perdore per llogaritje por sPjane modi!ikuar. 1leredhenia
ndr"shon vleren e variablit ne te majte kurse variablat e shprehjes ne te djathte nuk nderrojne vlera.
"umrat me presje dhe tipi dou#le
*e kete pjese do shohim nje shembull tjeter me klasen 9logari 'e mban bilancin e nje llogarie banke.
Shumica e ket"re bilanceve nuk jane vlera te plota por jane numra me presje. 0er kete po marr kete
shembull tipik per perdorimin e numrave me presje. Java permban d" tipe numerike primitive per
numrat me presje !loat dhe double. Dallimi kr"esor mes t"re eshte 'e variablat double mund te ruajne
vlera me saktesi me te madhe pra me me shum shi!ra pas presjes.
1ariablat te tipit !loat para'esin numra me presje me preci#ion tek dhe kane shtate shi!ra me vlere.
1ariablat te tipit double para'esin numra me presje me preci#ion dopio dhe kane %K shi!ra me vlere.
*e Java cdo numer me presje i shkruajtur ne kod trajtohet !illimisht si numer double si psh numrat
Q.%/F ose N.FNFF. 0re!erohet me shume numri double dhe pse numrat 'e do trajtohen ne shembuj do
jene jo me nje saktesi te madhe.
*e shembullin e klases 9logari do mbahet bilanci i nje llogarie bankare. *je banke normalisht ka disa
llogari ku secila ka bilancin e vet. =tributi bilanc eshte i tipit double dhe deklarohet per te gjithe klasen
sepse i takon krejt llogarise jo nje veprimi te caktuar. *e kete men"re cdo llogari ka bilancin e vet.
public class ;ccount
{
private double balance&
public ;ccount( double initial<alance
{
if ( initial<alance = 1"1
balance 7 initial<alance&
'
public void credit( double amount
{
balance 7 balance : amount&
'
public double get<alance(
{
return balance&
'
'
$etoda public ;ccount( double initial<alance perdoret per te krijuar objekte te
klases. ,jo metode merr si h"rje nje
Leksioni $
O
Java I Sidita Duli
%peratoret aritmetike ne Java
&leredhenia
1leredhenia percaktohet me ane te operatorit R M R. ," operator ka kete domethenie . I$err vleren
djathtas dhe kopjoje majtas.G. Shpesh perdoren dhe termat Ivlera e dhjathteG dhe Ivlere e majteG. *je
vlere e djathte mund te jete konstante variabel ose nje shprehje 'e prodhon nje vlere por vlera e
majte duhet te jete nje varia#el ' domethene nje hapsire 'e ruan nje vlere. 0sh ju mund te thoni
a 7 >&
por jo
> 7 a&
Shume programe ne Java reali#ojne veprime aritmetike. ,eto operatore jane .
mbledhja (+)
#britja (+)
shume#imi (6)
pjestimi(4)
mbetja (S)
$bledhja #britja dhe shume#imi jane po ato 'e trajtohen matematikisht. 0er veprimin e pjestimit duhet
theksuar se re#ultati i pjestimit te d" numrave te plote eshte numer i plote. 0sh L4F jep re#ultatin % sepse
si re#ultat pjestimi merret pjesa e plote heresi i pjestimit. Java o!ron dhe operatorin e mbetjes i cili ne
shenimin LSF jep si re#ultat /.
=plikacionet ne Java duhen shkruar ne nje vije te drejte ndr"she nga sa jemi mesuar gjate leksioneve
matematike per shkrimin e ekuacioneve. 0er kete sherben grupimi me kllapa 'e njelloj si ne aritmetike
ka 'ellimin te grupoje veprimet dhe te percaktoje radhen e t"re.
Hregullat e perparesise se operatoreve
Java #baton keto rregulla precedence per operatoret aritmetike. ,eto rregulla jane te ngjashme me
rregullat e percaktuar ne algjeber.
%+Shume#imi pjesetimi dhe veprimi i mbetjes jane te paret 'e aplikohen. *'s nje shprehje permban disa
veprime te tilla i pari 'e aplikohet eshte operatori 'e ndodhet me majtas. 8e tre keto veprime kane te
njejtin nivel precedence.
/+ $bledhja dhe #britja aplikohen te d"tet. *'s nje shprehje permban disa veprime te tilla i pari 'e
aplikohet eshte operatori 'e ndodhet me majtas. $bledhja dhe #britja kane te njejtin nivel precedence.
Shembull % . shprehja e meposhtme ka keto #batime te rregullave te perparesise se operatoreve. Hrathet
tregojne rendin me te cilin veprojne operatoret. Shume#imi pjesetimi dhe mbetja nisin te #batohen nga
majtas djathtas 'e ne !illim sepse kane precedence me te larte. 0as t"re #batohen mbledhja dhe #britja
dhe ne !und #batohet vleredhenia.
Shembull / . shprehja e polinomit te shkalles se d"te y=ax
/
+ bx +c
,jo eshte para'itja e ketij ekuacioni sipas sintakses se Java+s. 8e paret veprime 'e #batohen jane
shume#imi pjestimi dhe mbetja duke u nisur nga e majta ne te djathte. 1eprimet e mbledhjes #batohen
nga e majta ne te djathte. 1ini re se 5 ne katror shprehet si 565
&
Java I Sidita Duli
(madhimi dhe zvogelimi
Java ashtu si C eshte plot me shkurtesa. ,eto e bejne kodin me te thjeshte per tu shkruar por per tu
le5uar here me te thjeshte dhe here me te ngaterruar. D" shkurtesa 'e perdoren shpesh jane operatoret
e rritjes dhe #vogelimit. @peratori i #voglimit eshte R))P dhe reali#on #vogelimin me nje njesi. @peratori i
#voglimit eshte R**P dhe reali#on rritjen me nje njesi. 0sh n's a eshte int shprehja ::a eshte njelloj me
a 7 a : 1
@peratoret e rritjes dhe #voglimit jo vetem modi!ikojne nje variabel por dhe prodhojne vleren e variablit
si re#ultat. ,a d" versione per secilin tip operatori. ,eto shpesh 'uhen prefiks dhe postfiks+
0ara+#madhimi do te thote 'e operatori I**, para'itet para variablit ose para shprehjes. *e men"re te
ngjashme pas+#madhimi do te thote 'e operatori -**, para'itet pas variablit ose shprehjes.
0ara+#voglimi do te thote 'e operatori -)), vendoset para variablit ose shprehjes. *e men"re te
ngjashme pas+#voglimi do te thote 'e operatori -)), vendoset pas variablit ose shprehjes.
0ara+#madhimi dhe para+#voglimi reali#ohen ne men"re 'e ne !illim kr"het veprimi dhe me pas
prodhohet vlera.
0as+#madhimi dhe pas+#voglimi reali#ohen ne men"re te tille 'e ne !illim prodhohet vlera dhe me pas
kr"het veprimi.
Sic e shihni !orma pre!iks merr vleren pasi 'e veprimi eshte kr"er por ne vleren post!iks ju merrni vleren
pasi te kr"het veprimi. ,eto 'uhen operatore me Ie!ekte anesoreG sepse jo vetem marrin vleren
operandit por dhe ia ndr"shojne vleren. @peratori i rritjes eshte nje shpjegim per emrin e C++ 'e
nenkupton I nje hap pertej C I.
*je prej krijuesve te Java+s Till Jo" thoshte 'e
4 *ava7?::@@ G
Duke sugjeruar 'e Java eshte C++ duke he'ur pjeset e panevojshme prandaj dhe eshte nje gjuhe e
thjeshte.
$arrja e vendimeve . operatoret relacional
*je kusht eshte nje shprehje e cila mund te jete ose e vertete ose e gabuar pra ajo 'e ne logjike
matematike e shprehim me nje pohim. 8ermat e vertete dhe e gabuar ne Java jane d" konstante . true
dhe !alse. *e shume programe keto kushte perdoren per te marre vendime nese duhet te kr"het ose nje
nje veprim i caktuar. 0er te ndertuar te tille kushte perdoren operatoret relacionale .
M M e barabarte
2 M e ndr"shme
U me e madhe
V me e vogel
UM me e madhe ose e barabarte
VM me e vogel ose e barabarte
%peratoret logjike
@peratoret logjike jane .
Dhe WW
@se XX
%Q
Java I Sidita Duli
$ohim 2
Secili nga keto operatore logjike prodhon nje vlere logjike true ose false ne varesi te lidhjes logjike te
argumenteve. Ju mund te aplikoni operatoret IdheG IoseG GmohimG vetem ne vlerat logjike.
Ju nuk mund te perdorni nje shprehje jo+logjike sikur te ishte logjike (sic mund ta beni ne C ose ne C++).
1ini re 'e nje vlere logjike kthehet ne stringe kur perdoret ne njepo#icion 'e pritet nje vlere ne stringe.
%peratoret e #iteve
*je operator bitesh te lejon te manipulosh me bite te vecante ne te dhena te tipeve primitive.
@peratoret e biteve prodhojne re#ultatin ne ba#e te algjebres logjike.
@peratori Dhe ( W ) i biteve jep si re#ultat vleren nje n's te d" operandet kane vleren nje perndr"she jep
vleren #ero.
@peratori @se ( X ) jep si re#ultat vleren nje n's te pakten njeri nga operandet ka vleren nje perndr"she
n's te d" operandet jane #ero atehere k" operator jep vleren #ero.
@peratori i biteve ose E5clusive B@H ( Y ) jep si re#ultat vleren nje n's njeri nga operandet bit ka vleren
nje por jo te d".
@peratori i biteve *@8 (mohim) ( Z ) eshte nje operator unarpra 'e merr vetem nje argument. ,"
operator jep si re#ultat #ero kur operandi ka vleren nje dhe jep re#ultat nje kur operandi ka vleren #ero.
%peratoret e zhvendosjes
@peratori i #hvendosjes gjithashtu manipulon me bite.
@peratori i #hvendosjes nga e majta ( VV ) perpunon operandin ne te majte. ,etij operandi i spostohen
bite ne te majte ne varesi te numrit te biteve te speci!ikuar pas operatorit duke nder!ute #ero ne bitet e
niveleve te ulet.
@peratori i #hvendosjes nga e djathta ( UU )perpunon operandin ne te majte te operatorit ne men"re te
tille 'e #hvendos nje numer te caktuar bitesh (te treguar nga vlera e percaktuar pas operatorit ). *'s
vlera eshte po#itive atehere #erot nder!uten ne bitet e nivelit te larte. *'s vlera eshte negative vendosen
njesha ne bitet e nivelit te njejte.Java gjithashtu ka nder!ute nje operator te #hvendosjes nga e djathta
(UUU) 'e nuk ka shenje dhe 'e shton #ero panvaresisht nga shenja. ," operator nuk ek#iston ne C e as ne
C++.
*'s #hvendosni nje vlere ne char b"te ose short ato do te kalohen ne int para se te reali#ohet
#hvendosja. He#ultati do jete nje int.*'s ju #hvendosni nje numer long ju do merrni nje re#ultat ne long.
3hvendosja mund te kombinohet dhe me operatorin e vleredhenies.
(VVM ose UUM ose UUU)
1lera e majte #evendesohet me vleren e majte te #hvendosur.
%peratori trior n.s ) perndr/she
," operator ka vecantine 'e ka tre operanda. -unksionon vertet si nje operator sepse prodhon
nje re#ultat jo si instruksioni i kushte#uar i!+else.
Shprehja ka !ormen .
shpr@log$ike A vlera1 . vlera1
*'s shpr+logjike ka vleren true re#ultati do jete vleraQ. *'s shpr+logjike eshte !alse atehere re#ultati
eshte vlera%.
%peratori presje
," operator perdoret ne listen e argumenteve te !unksioneve gjithashtu ne ciklet I !or G.
%peratori - * , i lidhjes se stringes
@peratori I + I sherben per te lidhe stringje. ," operator ka disa vecanti. *'s nje shprehje !illon me
stringe atehere te gjithe operandet 'e pasojne duhet te jene stringje.
int 8 7 12 ! 7 12 z 7 )&
String sString 7 #82 !2 z #&
Istruksioni meposhte .
S!stem"out"println(sString : 8 : ! : z&
%%
Java I Sidita Duli
=!ishon 0' /' z 11!
*dersa instruksioni meposhte .
S!stem"out"println(8 : !&
=!ishon 1
2hem#ull 1 : operatori dhe i #iteve
public class ;B00emo {
public static void main(String[] args {
int numri; 7 1C&
int numri< 7 1C&
int rezultati 7 numri; D numri<&
S!stem"out"println(numri; : # D # : numri< : # 7 # : rezultati&
S!stem"out"println(9nteger"to<inar!String(numri; :
# D # : 9nteger"to<inar!String(numri< :
# 7 # : 9nteger"to<inar!String(rezultati&
'
'
2hem#ull ! :operatori i vleredhenies
public class EleredheniaFeGperatoret;ritmetike {
public static void main(String[] args {
/(
( *ava mundeson shkurtim te operatoreve aritmetike
( si dhe te operatorit te vleredhenies
" (
( psh2
(
( i 7 i : H&
(
( shkruhet edhe si
(
( i:7 >&
(/
int i 7 H&
int $ 7 11&
i :7 H& //ekuivalente me i 7 i : H
$ @7 )& //ekuivalente me $ 7 $ @ )
S!stem"out"println(#i 7 # : i&
S!stem"out"println(#$ 7 # : $&
'
'
/(
rezultati do $ete
i 7 11
$ 7 I
(/
%/
Java I Sidita Duli
2hem#ull $ : operatoret aritmetike
public class ShembullGp;ritmetik {
public static void main(String[] args {
S!stem"out"println(#shembull operatoresh aritmetike .#&
int i 7 H1 : )1&
int $ 7 i @ 11&
int k 7 $ ( )&
double l 7 k / C&
S!stem"out"println(#i 7 # : i&
S!stem"out"println(#$ 7 # : $&
S!stem"out"println(#k 7 # : k&
S!stem"out"println(#l 7 # : l&
'
'
/(
dal$a do $ete
shembull operatoresh aritmetike .
i 7 J1
$ 7 C1
k 7 1)1
l 7 )1"1
(/
2hem#ull 3: operatoret aritmetike
public class ;rithmeticProg {
public static void main(String[] args {
//disa numra
int i 7 11&
int $ 7 )1&
double 8 7 11"H&
double ! 7 )1"H&
//mbledhim numra
S!stem"out"println(#mbledh$e#&
S!stem"out"println(# i : $ 7 # : (i : $&
S!stem"out"println(# 8 : ! 7 # : (8 : !&
//zbrit$e numrash
S!stem"out"println(#zbrit$e#&
S!stem"out"println(# i @ $ 7 # : (i @ $&
S!stem"out"println(# 8 @ ! 7 # : (8 @ !&
//shumezim numrash
S!stem"out"println(#shumezim#&
S!stem"out"println(# i ( $ 7 # : (i ( $&
S!stem"out"println(# 8 ( ! 7 # : (8 ( !&
//p$estim numrash
S!stem"out"println(#p$esetim#&
S!stem"out"println(# i / $ 7 # : (i / $&
S!stem"out"println(# 8 / ! 7 # : (8 / !&
//llogarit$e te mbet$eve te p$estimeve
S!stem"out"println(#Fbet$a#&
%D
Java I Sidita Duli
S!stem"out"println(# i K $ 7 # : (i K $&
S!stem"out"println(# 8 K ! 7 # : (8 K !&
'
'
2hem#ull 4 :operatoret logjike
class <ool1{
public static void main(String args[]{
// variabla log$ike
boolean ; 7 true&
boolean < 7 false&
S!stem"out"println(#;L< 7 #:(;L<&
S!stem"out"println(#;D< 7 #:(;D<&
S!stem"out"println(#%; 7 #:(%;&
S!stem"out"println(#;M< 7 #:(;M<&
S!stem"out"println(#(;L<D; 7 #:((;L<D;&
'
'
2hem#ull 5 :operatoret ** ))
public class ShembullGperatorNrit$e0heOvolg {
public static void main(String[] args {
int i 7 11&
int $ 7 11&
i::&
$::&
S!stem"out"println(#i 7 # : i&
S!stem"out"println(#$ 7 # : $&
int k 7 i::&
int l 7 ::$&
S!stem"out"println(#k 7 # : k&
S!stem"out"println(#l 7 # : l&
'
'
/(
dal$a do $ete
i 7 11
$ 7 11
k 7 11
l 7 1)
(/
2hem#ull 6 :m#etja e pjestimit
public class ShembullFodulo {
public static void main(String[] args {
S!stem"out"println(#operatori i modulit . #&
int i 7 H1&
double d 7 +)&
%F
Java I Sidita Duli
S!stem"out"println(#i mod 11 7 # : iK11&
S!stem"out"println(#d mod 11 7 # : dK11&
'
'
/(
dal$a do $ete
operatori i modulit .
i mod 11 7 1
d mod 11 7 )"1
(/
2hem#ull 7:ose mes #itesh
public class GN0emo {
public static void main(String[] args {
int numri; 7 1C&
int numri< 7 >&
int rezultati 7 numri; L numri<&
S!stem"out"println(numri; : # L # : numri< : # 7 # : rezultati&
S!stem"out"println(9nteger"to<inar!String(numri; :
# L # : 9nteger"to<inar!String(numri< :
# 7 # : 9nteger"to<inar!String(rezultati&
'
'
2hem#ull 11 : 8%9 mes #itesh
public class PGN0emo {
public static void main(String[] args {
int numri; 7 1C&
int numri< 7 +)&
int rezultati 7 numri; M numri<&
S!stem"out"println(numri; : # M # : numri< : # 7 # : rezultati&
S!stem"out"println(9nteger"to<inar!String(numri; :
# M # : 9nteger"to<inar!String(numri< :
# 7 # : 9nteger"to<inar!String(rezultati&
'
'
/(
1C M +) 7 >I
11111 M 111111 7 111111
(/
Leksioni 7
Kontrolli i ekzekutimit
Java perdor te gjitha instruksionet e kontrollit te ek#ekutimit te gjuhes C prandaj nese keni programuar
ne gjuhet e C ose C++ atehere do jeni !amiljare me keto instruksione. Shume gjuhe programimi kane
instruksione dege#imi te ngjashme. Java perdor .
if Q else
5hile
%K
Java I Sidita Duli
do@5hile
for
s5itch
goto
8e gjithe instruksionet e kushte#uara perdorin nje kusht logjik per te dege#uar ek#ekutimin e
programit.*je shembull eshte shprehja e kushte#uar
=MMT
,jo shprehje perdor nje operator kushte#imi IM MI per te pare nese vlera e =+se eshte njelloj me vleren e
T+se. ,jo shprehje kthen si vlere ItrueG ose I!alseG pra e vertete ose e rreme. Secili prej operatoreve te
kushte#imit 'e pame ne leksionin paraardhes mund te perdoret per te prodhuar nje shprehje kushtore.
1ini re 'e ne Java nuk mund te perdorni nje numer si vlere logjike. *e C dhe ne C++ kjo gje lejohet. *e C+
+ nje numer jo#ero merret dhe si vlere ItrueG dhe #ero merret si I!alseG. *'s doni te perdorni je vlere jo
logjike ne nje kontroll logjik ne !illim duhet ta konvertoni ate ne nje vlere logjike duke perdor nje
instruksion kushte#imi si psh if (a%71
if : else
Instruksioni i kushte#imit eshte instruksioni ba#e per te komanduar rradhen e ek#ekutimit te programit.
else eshte opsional pra ju mund ta perdorni ose jo ate.
D" !ormat e ketij instruksioni jane .
1 if (shpreh$e@log$ike
instruksion
) if (shpreh$e@log$ike
instruksion1
else
instruksion)
Shprehja logjike duhet te prodhoje nje re#ultat logjik (boolean). Instruksioni eshte ose nje instruksion i
thjeshte 'e mbaron me nje simbol ICG ose mund te jete nje bllok instruksionesh 'e ku!i#ohet nga d"
kllapat R>R dhe R?P. Cdo here me !jalen instruksion do nenkuptojme nje instruksion te vetem ose nje bllok
instruksionesh. Eshte mire 'e gjate shkrimit te kodit te #hvendosemi disa hapsira nga e djathta kur kemi
nje instruksion brenda kushtit ne men"re 'e te dallojme se ku nis dhe ku mbaron instruksioni i
kushte#uar.
;iklet
8re ciklet 'e perdoren ne Java jane . 5hile2 do Q 5hile dhe for. =ta bejne te mundur perseritjen
e instruksionit ne ba#e te nje kushti logjik. ,ur k" kusht ka vleren I !alseG atehere instruksioni brenda
ciklit nuk ek#ekutohet me. Cikli (hile ka !ormen .
5hile (shpreh$e@log$ike
instruksion
Shprehja logjike vleresohet ne !illim te cdo iteracioni te ciklit.
Cikli do+ (hile ka !ormen .
do
instruksion
5hile (shpreh$e@log$ike
%L
Java I Sidita Duli
Di!erensa e vetme mes 5hile dhe do@5hile eshte se instruksioni ne ciklin do@5hile do
ek#ekutohet te pakten nje here edhe kur shprehja ka vleren I!alseG. ,jo sepse ne ciklin 5hile n's kushti
eshte I!alseG nuk h"n asnjehere ne cikel kurse per do@5hile kushti vleresohet ne !und te ek#ekutimit
te instruksionit.
Cikli for per!ormon nje iniciali#im para iteracionit te pare. $e pas para'et nje kontroll dhe ne !und te
cdo iteracioni ka nje rritje hapi. -orma e ketij cikli eshte .
for (inicializim&shpreh$e@log$ike&hapi
instruksion
Secila prej #onave iniciali#imi shprehja+logjike ose hapi mund te jene dhe bosh. Shprehja testohet para
cdo iteracioni dhe sapo te re#ultoje I!alseG ek#ekutimi do ti kalohet instruksionit pasardhes te ciklit for.
*e !und te cdo iteracioni ek#ekutohet IhapiG. Cikli for ne pergjithsi perdoret kur e dime numrin e
perseritjeve te ciklit. Ju mund te percaktoni disa variabla brenda ciklit for por keto variabla duhet te
jene te te njejtit tip.0sh .
for (int i 7 12 $ 7 1& i R 11 DD $ %7 11& i::2 $::
// trupi i ciklit
Deklarimi int brenda !or mbulon dhe variablin i dhe variablin $. ,jo eshte vecanti e ciklti for dhe jo e
te gjithe cikleve te tjere.
%peratori -presje,
$e lart permendem 'e operatori presje ka perdorim vetem ne Java. ," perdorim eshte ne ciklin for.
Trenda deklarimit te for edhe ne #onen e iniciali#imit edhe ne #onen e hapit ju mund te keni disa
deklarime te ndara me presje. ,eto deklarime mund te vleresohen men"re sekuenciale.
public class GperatoriPres$e {
public static void main(String[] args {
for(int i 7 12 $ 7 i : 11& i R H& i::2 $ 7 i ( ) {
S!stem"out"println(#i7 # : i : # $7 # : $&
'
'
'
Ju mund te shihni 'e dhe #ona e iniciali#imit dhe ajo e hapit kane disa deklarime 'e vleresohen
sekuencialisht.
,ujdes2 *e #onen e iniciali#imit ju mund te keni disa deklarime por keto duhet te jene te te njejtit tip.
<reak dhe continue
break reali#on daljen para kohe nga cikli pa ek#ekutuar instruksionet 'e mbeten.
continue reali#on nderprerjen e ek#ekutimit nga iteracioni i ciklit dhe va#hdon me ek#ekutimin e hapit
pasardhes.
Shembull
public class <reak0he?ontinue {
public static void main(String[] args {
for(int i 7 1& i R 111& i:: {
if(i 77 J>
break& // $ashte ciklit
if(i K S %7 1
continue& // 9teracioni t$eter
S!stem"out"println(i&
'
%N
Java I Sidita Duli
int i 7 1& // cikel i pafundem.
5hile(true {
i::&
int $ 7 i ( )J&
if($ 77 1)CS
break& // $ashte ciklit
if(i K 11 %7 1
continue&
S!stem"out"println(i&
'
'
'
*e ciklin for vlera e variablit i kurre nuk shkon te vlera %QQ per shkak te instruksionit break 'e e
nderpret ate te vlera NF. *ormalisht ju do perdorni break vetem kur ju nuk e dini se kur do ndodhe
kushti i ndalimit. continue shkakton kalimin e ek#ekutimit ne hapin pasardhes pra dhe hapi rritet.
;iklet e pafundem
Ju mund te perdorni dhe nje !orme te ciklit !or te tille.
for(&&
[e trajtohet nga kompilatori ne te njejten men"re si
5hile(true
goto
-jala celes goto ka 'ene e pranishme 'e ne gjuhet e para te programimit por nuk perdoret shpesh.
goto ka !unksion te ngjashem me jump 'e eshte ne gjuhen assembler. *uk pre!erohet sepse perdorimi i
shpeshte e ben programin te kaloje ek#ekutimin nga nje pike ne nje tjeter por dhe me pak te
kuptueshem dhe te 'arte. 0roblemi nuk eshte ne !akt perdorimi i goto por mbiperdorimi i goto. *e
disa raste goto eshte #gjidhja e vetme per te #gjidhe sakte ceshtjen e komandimit te ek#ekutimit te
programit. goto !uksionon ne men"re te tille 'e con ek#ekutimin e programit ne nje #one ku ne kemi
vendosur nje etikete (label). *e vendosim kete etikete ne te djathte te nje instruksioni ne kod.
s=itch
s5itch klasi!ikohet si nje instruksion #gjedhjeje.
*je instruksion s5itch #gjedh cilen pjese te kodit te ek#ekutoje ne varesi te vleres 'e ka shprehja 'e
sh'"rton.
S(itch ka !ormen .
s5itch(shpreh$e {
case vlera1 . instruksion& break&
case vlera) . instruksion& break&
case vlera+ . instruksion& break&
case vlera> . instruksion& break&
case vleraH . instruksion& break&
// """
default. instruksion&
'
s5itch krahason vleren e shprehjes me vlerat perkatese per cdo case. *'s gjen nje vlere 'e i
korespondon atehere ek#ekuton instruksionet e atij blloku te vleres perkatese. 0erndr"she ek#ekutohet
instruksioni default. 1ini re perdorimin e instruksionit break ne !und te cdo case. ,jo reali#on
kalimin e ek#ekutimit ne !und te s5itch. 0erdorimi i break eshte opsionale por shpesh ndertohet ne
kete men"re. 1ini re se instruksioni i !undit default nuk ka nje break sepse nuk do kishte ndonje
e!ekt gjithsesi ek#ekutimi do va#hdonte ne piken ku mbaron s5itch. ," instruksion eshte metoda me
e mire per te implementuar nje #gjedhje shumevlereshe por kerkon nje vlere te tille si int ose char.
%O
Java I Sidita Duli
*'s doni te perdorni nje variabel float ose stringe si kontrollues atehere s5itch nuk do
!unksionoje. *e keto raste ju mund te perdorni if te nder!utur.
Leksioni 3
Deklarimi i klasave
Shembulli i pare konsiston ne d" klasa Hegjister dhe Hegjister8est. ,lasa Hegjister do a!ishoje nje mesa#h
ne ekran. ,lasa Hegjister8est eshte aplikacion 'e perdor klasen Hegjister. Secila prej ket"re klasave ruhet
ne nje skedar te vecante me mbarese "$ava dhe deklarohet si publike.
Klasa 9egjister
,jo klase permban metoden a!isho e cila a!ishon ne ekran nje mesa#h pershendetes. 0er te thirre kete
klase duhet krijuar nje objekt i klases.
public class Neg$ister
{
// afishon mesazh per perdoruesin
public void afishoFesazh(
{
S!stem"out"println( #T! eshte reg$istri%# &
'
'
public class Neg$isterUest
{
// n$e main qe ekzekutohet
public static void main( String args[]
{
Neg$ister reg$istri9m 7 ne5 Neg$ister(&
// ben afishimin e mesazhit
reg$istri9m"afishoFesazh(&
'
'
*e kete aplikacion duam te a!ishojme mesa#hin ne ekran. ,ete gje e ben metoda a!isho e klases
Hegjister. 3akonisht duhet te deklarojme nje variabel element te klases Hegjister dhe me kete variabel
mund te therrasim metoden a!isho te kesaj klase. 1ariabli regjistriIm eshte i tipit Hegjister. Cdo klase 'e
krijohet eshte nje tip i ri 'e mund te perdoret per te deklaruar variabla. 0rogramatoret mund te
deklarojne klasa te reja dhe ja pse gjuha Java 'uhet gjuhe e #gjerueshme.
1ariabli regjistriIm iniciali#ohet me re#ultatin e shprehjes 'e krijon instanca te klases . ne5
Neg$ister(. -jala celes ne( krijon nje objekt te klases te speci!ikuar nga emri pasardhes ne kete
rast nga Hegjistri. ,llapat duhen vendosur ne cdo rast. Trenda ket"re kllapave mund te vendosen edhe
vlera numerike ose te ndonje tipi tjeter. 0or ne shembujt e pare do e leme bosh hapsiren mes kllapave.
*e shembujt e a!ishimit eshte perdorur simboli pike (.) per te shkruar print ose println. *e kete shembull
per te thirre metoden a!isho do perdorim perseri simbolin pike (.). Shenimi
reg$istri9m"afishoFesazh( ben kete thirrje.
*e shembujt deri tani cdo klase ka pase nje metode main. ,lasa Hegjister ka vetem nje metode
metoden a!isho$esa#h. ,ujtojme se main eshte nje metode e vecante nga ku nis ek#ekutimi i
aplikacionit. $etodat e tjera duhen thirre vec ne kete men"re nisin ek#ekutimin.
Deklarimi i metodes nis me !jalen celes public 'e tregon se metoda mund te shihet nga gjithe klasat e
tjera. -jala celes void tregon se metoda kr"en veprimet por nuk kthen asnje vlere si re#ultat. *e shenimin
e deklarimit duhet cilesuar edhe emrin i metodes ne kete rast emri eshte a!isho. 0re!erohet 'e emri i
%&
Java I Sidita Duli
metodes te nise me shkronje te vogel. ,llapat e vendosura pas emrit tregojne se kjo eshte nje metode.
,llapat boshe tregojne se metoda nuk ka nevoje per input per te kr"er veprimet. Cdo metode mbledh
instruksionet e saj brenda d" kllapave > dhe ?.
Trenda metodes ndodhen instruksione 'e reali#ojne det"ren 'e ka metoda. *e kete shembull eshte vec
nje veprim a!ishimi i nje mesa#hi pershendetes.
*e va#hdim duam te perdorim klasen Hegjister ne nje aplikacion pra ne nje klase ne Java 'e permban
metoden main. ,lasa Hegjister nuk eshte aplikacion sepse nuk ka metode main. 0rovoni te ek#ekutoni
ne command prompt klasen Hegjister dhe do merrni nje mesa#h gabimi nga'e nuk gjen dot nje metode
main 'e te nise ek#ekutimin. 0er te #gjidhe kete problem ka d" mundesi. ose te deklarojme nje klase me
vete 'e permban metoden main ose te vendosim metoden main ne klasen Hegjister. Do shohim
mundesine e d"te ate te krijimit te nje klase te re 'e therret klasen Hegjister.
Klasa 9egjister>est
,jo klase do perdoret per metoden e saj main prandaj kjo eshte nje klase aplikacion. *e kete klase behet
thirrja e metodes a!isho$esa#h. *e momentin e thirrjes metoda nis te kr"eje veprimet e saj pra te
a!ishoje mesa#hin pershendetes. $etoda a!isho$esa#h nuk ka liste parametrash me te cilen te thirret
pra nuk ka nevoje per in!ormacione input per te nise veprimet. *e momentin 'e thirret metoda
a!isho$esa#h metoda main pe#ullohet per pak kohe dhe rinis ek#ekutimin sapo te kete per!unduar
veprimin metoda a!isho$esa#h.
Kompilimi i nje aplikacioni me disa klasa
0er te kompiluar ne command prompt nje aplikacion me disa klasa perdoret perseri komanda javac por
ne kete rast per te d"ja klasat. 0ra klasat Hegjister dhe Hegjister8est kompilohen ne kete men"re .
$avac Neg$ister"$ava Neg$isterUest"$ava
ose mund te kompilojme njeheresh te gjitha klasat ne ate direktori duke perdore komanden . $avac
("$ava ku shenimi 6 per!shin gjithe skedaret me mbaresen java 'e ndodhen ne ate direktori.
Leksioni 4
&aria#lat dhe atri#utet
1ariablat 'e deklarohen te trupi i nje metode 'uhen ndr"she dhe variabla lokale dhe mund te perdoren
vetem ne ate metode. ,ur metoda mbaron vlerat e ket"re variablave humbasin. 1ariablat 'e deklarohen
jashte cdo metode 'uhen ndr"she atribute ose !usha dhe perdoren edhe kur mbaron ek#ekutimi i
metodes. *je klase #akonisht ka nje ose me shume metoda 'e modi!ikojne keto atribute. Secili objekt i
krijuar ruan nje kopje per atributin dhe ka nje vlere te tij per kete variabel.
,lasen Neg$ister eshte modi!ikuar me nje atribut dhe me metoda set dhe get.
Neg$ister do te ruaje nje variabel emri i kursit si atribut i cili mund te modi!ikohet kurdo gjate
ek#ekutimit te programit. ,lasa permban tre metoda . setVmerTursi getVmerTursi dhe
afishoFesazh. $etoda setVmerTursi ruan emrin e kursit per klasen Neg$ister. $etoda
getVmerTursi kthen si vlere emrin e kursit. $etoda afishoFesazh a!ishon nje mesa#h per klasen.
*e kete shembull eshte e modi!ikuar 'e te marre vlere nga metoda getVmerTursi.
public class Neg$ister
{
private String emerTursi&
public void setVmerTursi( String kursi
{
emerTursi 7 kursi&
'
public String getVmerTursi(
/Q
Java I Sidita Duli
{
return emerTursi&
'
public void displa!Fessage
{
S!stem"out"print( #Neg$istri i kursit # : getVmerTursi(
'
'
import $ava"util"Scanner&
public class Wrade<ookUest
{
public static void main( String args[]
{
Scanner input 7 ne5 Scanner( S!stem"in &
Neg$ister reg$istri9m 7 ne5 Neg$ister(&
S!stem"out"print( #emri i kursit eshte . #:
reg$istri9m"getVmerTursi(&
S!stem"out"println( #$u lutem $epni emrin e kursit.# &
String emri 7 input"ne8tXine(&
reg$istri9m"setVmerTursi( emri &
S!stem"out"println(&
reg$istri9m"afishoFesazh(&
'
'
2et dhe get
=tributet mund te jene publike ose private. *'s atributet jane private ato le5ohen dhe modi!ikohen
vetem me metodat set dhe get si ne shembullin me lart. Emrat e metodave 'e modi!ikojne atributet
mund te mos nisin det"rimisht me set ose me get por keto emra rekomandohen te perdoren.
,lasa Neg$isterUest krijon nje objekt te klases Neg$ister dhe therret metodat e kesaj klase.
Hreshti Neg$ister reg$istri9m 7 ne5 Neg$ister(&
krijon nje objekt te ri dhe i cakton ketij objekti nje atribut reg$istri9m. *e a!ishim do sh!a'et null
per vleren e painiciali#uar te ketij atributi. 1ariablat lokale nuk iniciali#ohen automatikisht kurse
atributet ka nje vlere !illestare 'e e mundeson vete Java kur programatori nuk jep nje vlere per atributin.
0er kete atributet nuk jane domosdoshmerisht te iniciali#uar. 0er vleren de!ault null do !litet me gjate
me vone.
>ipet primitive dhe tipet reference
8ipet e te dhenave ne Java jane te ndare ne d" kategori ne tipe primitive dhe ne tipe re!erence. 8ipet
primitive jane . boolean2 b!te2 char2 short2 int2 long2 float2 double.
8e gjithe tipet e tjere jane tipe jane re!erenca ne klasa.
*je tip primitiv mund te ruaje nje vlere sic eshte e percaktuar ne tip. 0sh nje e dhene e tipit int mund
te ruaje numra te plote. ,ur nje tjeter vlere i caktohet variablit vlera !illestare humbet dhe vendoset vlera
e re. 0rimitivet iniciali#ohen me vlera tipet b!te2 short2 int2 long2 float dhe double
iniciali#ohen me vleren Q char iniciali#ohet me karakterin R.P kurse boolean me vleren !alse. 1ini re 'e
variablat lokale nuk iniciali#ohen automatikisht.
0rogramet perdorin variabla te tipit re!erence 'e per shkurt 'uhen edhe re!erenca per te ruajtur nje
objekt ne memorje. 0er keto variabla thuhet ndr"she se re!erencojne ne nje objekt ne program. *e
/%
Java I Sidita Duli
shembull variabli reg$istri9m permban nje re!erence per objektin e klases Neg$ister. 8ipet
re!erence iniciali#ohen automatikisht me vleren null 'e ka kuptimin e Ire!erencon ne asgjeG. Ja pse ne
shembull u be a!ishimi i vleres null ne !illim kur ende nuk i ishte dhene vlera reg$istri9m.
*je re!erence e nje objekti perdoret per te thirre metodat e atij objekti. *e shembull eshte thirre metoda
afishoFesazh me ane te re!erences regjistriIm. :jithashtu edhe metodat setVmerTursi dhe
getVmerTursi jane thirre po me kete re!erence. 1ini re 'e primitivat nuk mund te perdoren per te
thirre metoda te ndonje klase.
2i ti dallojme primitivat nga referencat?
*je variabel ka tipin e vet me te cilin eshte deklaruar. ," tip tregon nese variabli eshte primitiv ose
re!erence. *'s tipi i variablit eshte njeri nga teteshja e primitivave te dhena me lart atehere variabli
eshte primitive perndr"she cdo tip tjeter deklaron variablin si re!erence te klases tip psh klases
Neg$ister.
"uk keni nevoje te fshini o#jektet
@bjektet nuk !shihen duket sikur ato jane gjithmone rrotull nesh dhe mbushin memorjen. Java ka nje
mekani#em Igrumbullimi te mbeturinaveG. ," mekani#em kontrollon per te gjitha objektet e krijuara me
ne( dhe 'e nuk re!erohen me. 0a kete mekani#em shpejt memorja do mbushej. ,jo do te thote se nuk
keni nevoje te sh'etesoheni per kete. Ju krijoni objekte dhe kur nuk ju duhen me ato do eliminohen
vete.
Leksioni 5
Kontrolli i aksesit
*iveli i aksesit cakton se cila klase do shohe dhe do mund te aksesoje elementin. 9lojet e aksesimit jane.
public private protected dhe package access (kur nuk shkruhet asgje).
,a d" nivele per keto rregulla .
%+ Hregullat e aksesimit per klasen.
/+ Hregullat e aksesimit per elementin brenda klase.
0er klasen ek#istojne d" mundesi. klasa mund te jete ose public ose package access (kur nuk shkruhet
asgje). ,ur klasa eshte e deklaruar publike klasa do mund te aksesohet nga te gjitha klasat e tjera kudo.
*'s nuk vendosim asnje shenim para deklarimit merret rregulla package access sipas te ciles klasen e
shohin vetem brenda paketes.
0er elementen e klases (atribut ose metode) perdoren te kater llojet e aksesimit public private
protected dhe package accesss (kur nuk caktohet asgje). *'s elementi caktohet si publik ate mund ta
shohe cdo klase. *'s elementi caktohet si privat si do shihet vetem brenda klases ku ndodhet. *'s
elementi caktohet si protected elementi shihet vetem nga klasat e paketes ku ndodhet si dhe nga klasat
e derivuara nga klasa ku ndodhet. *'s elementi caktohet si package access pra nuk shkruajme asnje
percaktim ai do shihet vetem nga klasat e paketes ku ndodhet.
Lloji i aksesimit Klasa Paketa Kl.deriv Te gjithe
public Po Po Po Po
protected Po Po Po Jo
Asnje percaktim Po Po Jo Jo
private Po Jo Jo Jo
//
Java I Sidita Duli
Sht"lla e pare tregon se vete klasa ka akses tek elementet e saj pavaresisht se c!are lloji kane te
percaktuar. Sht"lla e d"te tregon se c!are mund te shohin klasat e paketes. Sht"lla e trete tregon se c!are
sheh klasa e derivuar nga klasa ne !jale. Duhet theksuar se jo cdo klase ka nje klase te derivuar dhe k"
rregull eshte vetem per rastin n's ka nje te tille. ,lasat e derivuara trajtohen ne leksionet e ardhshme.
Sht"lla e katert tregon se te gjithe tjeret c!are mund te shohin tek klasa. Shihet 'e te gjithe shohin vetem
elementet e percaktuar publike.
Shembull . le te marrim klasat =lpha Teta =lphaSub 'e eshte klase e derivuar nga klasa =lpha si dhe
:amma. =lpha e Teta ndodhen ne paketen% kurse =lphaSub dhe :amma ndodhen ne paketen/.
8abela e meposhtme tregon se cila klase akseson elementet e klases =lpha ne varesi te lloji te aksesimit
'e mund te kete k" element.
Lloji i aksesimit Alpha Beta AlphaSub Gamma
public Po Po Po Po
protected Po Po Po Jo
Asnje percaktim Po Po Jo Jo
private Po Jo Jo Jo
(ona e deklarimit te varia#lave
Deri tani kemi pare deklarimin e disa elementeve ne Java si psh klasat metodat variablat
argumentat.
3ona e deklarimit te nje #one te programit i re!erohet entitetit te deklaruar me emrin e tij.
Hregullat e percaktimit te #onave ne nje program ne Java jane .
%. 3ona e nje parametri te deklaruar eshte trupi i metodes ku kr"het deklarimi.
/. 3ona e nje variabli lokal te deklaruar eshte nga pika ku deklarohet e deri ne !und te atij blloku.
D. 3ona e nje variabli lokal te deklaruar ne nje seksion iniciali#imi te ciklit !or eshte trupi i cilkit !or.
F. 3ona e nje metode ose e nje atributi te nje klase eshte i tere trupi i klases. ,jo mundeson
metodat jostatike te nje klase te perdorin atributet dhe metodat e tjera te klases.
Cdo bllok mund te permbajne deklarime variablash. *'s nje variabel lokal ose nje parameter ne nje
metode ka te njejtin emer si nje atribut atehere k" atribut I!shihetG derisa te mbaroje ek#ekutimi i
bllokut te kesaj metode. :abim gjate kohes se kompilimit ndodh ne rastin kur nja variabel lokal
deklarohet me shume se nje here ne metode.
Leksioni 6
@etodat
/D
Java I Sidita Duli
0rogramet ne Java jane nje kombinimi i metodave dhe klasave 'e shkruan programuesi me metodat dhe
klasat 'e jane te vle!shme ne librari te ndr"shme Java =pplication 0rogramming Inter!ace e cila re!erohet
dhe si =0I. ,lasat 'e kane lidhje grupohen ne paketa (packages) per te mundesuar importimin e t"re ne
programe te tjere. *e kete men"re keto klasa mund te merren te gatshme dhe te riperdoren. Java =0I
siguron nje koleksion te pasur me klasa te paracaktuara 'e permbajne !unksione te ndr"shme
matematikore veprime me stringa veprime me karaktere veprime h"rje4daljeje veprime ba#e te
dhenash veprime rrjetash procesim skedaresh si dhe shume veprime te tjere.
0raktike e mire eshte. $os u perpi'ni te krijoni klasa dhe metoda te reja kur ato ek#istojne dhe ju mund
ti importoni ato. ,jo #vogelon koston e #hvillimit te programit dhe eliminon gabimet ne program por ne
disa raste per te kuptuar algoritmet ne do te ndertojme vete klasat me metodat perkatese.
$etodat (ne gjuhet e tjera te programimit 'uhen !unksione ose procedura) i lejojne programuesit te
modulari#oje programin ne disa njesi. Instruksionet e trupit te metodes shkruhen vetem nje here dhe
metoda mund te thirret disa here gjate programit. $odulari#imi i programit ne metoda behet per disa
ars"e. *jera eshte ndarja e programit ne pjese me te vogla me te thjeshta dhe me te mena5hueshme.
8jetra eshte riperdorimi i programit 'e ka si 'ellim marrjen e bllo'eve (metodave) ek#istuese per te
krijuar nje program te ri.
0raktike e mire eshte . Cdo metode duhet te beje vec nje !unksion te percaktuar mire dhe emri i
metodes duhet te shprehe 'ellimin e det"res 'e kr"en metoda. 0rograme te tille jane te thjeshta per tu
shkruajtur mirembajtur dhe modi!ikuar.
Sic e dini nje metode aktivi#ohet nga je thirrje nga nje metode tjeter. ,ur metoda thirret ajo mund te
ktheje nje vlere ose thjesht kontrollon dicka. ,jo strukture ngjan me ate te organi#imit te punes ne nje
ndermarrje. Sic e dini nje metode aktivi#ohet nga nje thirrje nga nje metode tjeter. ,ur metoda thirret
ajo mund te ktheje nje vlere ose thjesht kontrollon dicka. ,jo strukture ngjan me ate te organi#imit te
punes ne nje ndermarrje.
Deklarimi i metodave me nje parameter
*je metode mund te kerkoje nje ose disa parametra si in!ormacione h"rese. *je thirrje metode kerkon
vlera te 'uajtura argumenta nje per secilin parameter. 0er shembull a!ishimet ne monitor behen me
thirrjen S"stem.out.println dhe kerkon nje argument 'e eshte stringa 'e a!ishohet ne ekran. Shembulli i
meposhtem deklaron klasen Hegjister me metoden e saj a!isho e cila para'et emrin e kursit si pjese te
mesa#hit pershendetes. $etoda e re a!isho kerkon nje parameter 'e permban emrin e kursit.
public class Neg$ister
{
// afishon mesazh per perdoruesin
public void afishoFesazh( String emerTursi
{
S!stem"out"println( #T! eshte reg$istri#: emerTursi &
'
'
import $ava"util"Scanner&
public class Neg$isterUest
{
/F
Java I Sidita Duli
// ketu nis ekzekutimi
public static void main( String args[]
{
Scanner input 7 ne5 Scanner( S!stem"in &
Neg$ister reg$istri9m 7 ne5 Neg$ister(&
S!stem"out"println( #$epni emrin e deges dhe vitin.# &
String kursi 7 input"ne8tXine(&
S!stem"out"println(&
reg$istri9m"afishoFesazh(kursi &
'
'
*e kete shembull variabli emer,ursi kalohet si argument per metoden a!isho per te bere te mundur
reali#imin me sukses te a!ishimit. 1lera e variablit emer,ursi ne main behet vlera per parametrin kursi te
metodes a!isho$esa#h. ,ur ju ek#ekutoni aplikacionin vini re se metoda a!isho para'et ne ekran mesa#h
pershendetes 'e permban emrin e kursit 'e ju keni shkruajtur nga tastjera.
Argumentat dhe parametrat
*umri i parametrave te nje metode caktohet ne deklarim te metodes. Trenda kllapave te metodes
deklarohen parametrat duke shenuar tipin dhe emrin e t"re. 9ista bosh e parametrave tregon se metoda
nuk ka nevoje per in!ormacione h"rese. *e shembullin e pare metoda a!isho$esa#h nuk kishte
parametra kurse ne shembullin e d"te metoda kerkonte nje parameter. ," parameter u deklarua si
element String dhe me emrin kursi. ,ur thirret metoda vlera 'e jepet ne thirrje i caktohet parametrit ne
kete rast kursit. ,jo vlere do perdoret brenda trupit te metodes. 1ini re se emri i variablit 'e perdoret si
parameter mund te jete i njejte ose i ndr"shem nga emri i variablit 'e perdoret si argument.
*je metode mund te kerkoje me shume se nje parameter dhe ne deklarim keto ndahen me presje.
*umri i argumentave pra te vlerave 'e jepen ne thirrje duhet te jete njelloj me numrin e parametrave
'e jane caktuar ne deklarimin e metodes. :jithashtu tipi i argumentave te dhene ne thirrje duhet te jete
i njejte me tipin e parametrit korrespondues.
2hem#ull 1
," shembull tregon per nje metode 'e llogarit siper!a'en e nje drejtkendeshi
public static int Siperfaq$a (int g$eresi2 int g$atesi
{
int sip&
sip7g$eresi(g$atesi&
return sip&
'
Hreshti i pare eshte nje deklarim metode. 8ipi i daljes eshte numer i plote int. Emri i metodes eshte
Siper!a'ja. 0arametrat jane d" numra te plote per gjeresine dhe gjatesine.
8rupi i metodes nis me kllapen hapese >. 8rupi i metodes permban nje deklarim te nje variabli nje
vleredhenie dhe daljen me instruksionin return. *'s metoda kthen nje vlere duhet te shkruhet edhe nje
/K
Java I Sidita Duli
instruksion return. *'s dalja eshte void 'e do te thote se nuk ka dalje nga metoda nuk ka nevoje per nje
instruksion return dhe dalja nga metoda behet automatikisht.
2hem#ull !
// deklarimi
public int prodhimi(int 82 int !
{
return 8 ( !&
'
// ne thirr$e
int g$atesi 7 11&
int g$eresi 7 H&
int siperfaq$a 7 prodhimi(g$atesi2 g$eresi&
Parametra te tipave primitive
Java ka tete tipe primitive. gjashte numra te plote plus tipit karakter dhe logjik.
Shembull D .
public static void Primitive(int i2 double f2 char c2 boolean test
{
i :7 11& //T$o eshte e rregullt por vlerat e re$a
c 7 3z3& //nuk shihen $ashte metodes"
if(test
test 7 false&
else
test 7 true&
f 7 1"H&
'
Cili do jete re#ulati i a!ishuar n's do therrasim metoden me lart ne kete pjese kodi\
int ii 7 1&
double ff 7 1"1&
char cc 7 3a3&
boolean bb 7 false&
// Perp$ek$e per te ndr!shuar vlerat e variablave.
Primitive(ii2 ff2 cc2 bb&
S!stem"out"println(#ii 7 # : ii : #2 ff 7 # : ff :
#2 cc 7 # : cc : #2 bb 7 # : bb&
1lerat kth"ese
*je men"re per te kaluar vlera nga metoda per diku jashte saj eshte vlera kth"ese.
Shembull F.
*e kete shembull h"jne si argumenta d" numrat e plote a dhe b kthehet si vlere !u'ia e b+se.
public static int <YneYfuqiYa(int a2 int b
{
int i&
int fuqia 7 1&
for(i 7 1& i R b& i::
fuqia 7 fuqia ( a&
/L
Java I Sidita Duli
return fuqia&
'
*e thirrje te metodes numri merr vleren 'e kthehet nga metoda .
int numri 7 )&
int eksponenti 7 >&
numri 7 <YneYfuqiaYa(numri2 eksponenti&
S!stem"out"println(#rezultati eshte . # : numri&
$etodat duhet te ndertohen te thjeshta per te kr"er vetem nje pune prandaj nje vlere kth"ese e vetme
mja!ton.
,alimi i objekteve si re!erence
,ur kalohet nje re!erence nje metode objekti mund te ndr"shohet por nuk nuk ndr"shohet re!erenca.
Shembull K .
class Necord
{
int num&
String emer&
'
8ani nje re!erence klase mund ta kalojme si parameter.
public static void parameterYGb$(Necord r
{
r"num 7 111&
r"emer 7 #Zredi#&
'
Diku tjeter ne kod krijojme nje objekt Hecord caktojme atributet dhe me kete objekt therrasim metoden
@bjekt
In some other code (e can create an object o! our ne( class Hecord set its !ields and call the method
tr"@bject.
Necord id 7 ne5 Necord(&
id"num 7 )&
id"emer 7 #Eilma#&
parameterYGb$ (id&
S!stem"out"println(id"emer : # # : id"num&
*e ekran do a!ishohet I-redi %QQG. @bjekti ne kete rast ka ndr"shuar. $etoda nuk mund te perdoret per
te nderruar nje re!erence por metoda mund te nderroje vlerat e atributeve te objekteve sic ka bere ne
kete rast.
*je re!erence e nje objekti mund te re!erencoje te nje tjeter objekt duke i dhene vlere vete re!erences.
Shembull L .
public void kri$oNecord(Necord r2 int n2 String e
{
r 7 ne5 Necord(&
r"num 7 n&
r"emer 7 e&
'
*e kete rast te d"te kthehet si vlere nje re!erence klase Hecord.
public Necord kri$oNecord(int n2 String e
{
Necord r 7 ne5 Necord(&
/N
Java I Sidita Duli
r"num 7 n&
r"emer 7 e&
return r&
'
Leksioni 7
Paketat dhe Li#rarite
Deklarimet e importimeve
*e disa programe deri tani jane bere deklarime te importimit psh per klasen Scanner por nuk jane
importuar klasat String apo Hegjister. Shumica e klasave 'e perdoren ne Java duhen importuar. ,lasat
S"stem dhe String jane ne paketen java.lang e cila importohet automatikisht ne cdo program ne Java.
,a nje lidhje te vecante per klasat 'e kompilohen ne te njejten direktori. ,eto klasa konsiderohen ne nje
pakete dhe importohen automatikisht tek njera tjetra. 0ra dhe per klasat ne te njejten pakete nuk eshte
i nevojshem importimi.
Importimi nuk eshte i nevojshem edhe kur klases i re!erohemi me emer te plote psh .
$ava"util"Scanner input 7 ne5 $ava"util"Scanner( S!stem"in &
*je pakete eshte ajo 'e behet e vle!shme kur perdorim !jalen celes import per te reali#uar sjelljen e
nje librarie te tere ne programin tone si psh import $ava"util"(& ,jo sjell importimin e te tere
librarise $ava"util e cila eshte pjese standarte ne Java. 0sh ne kete librari ka nje klase te 'uajtur
;rra!Xist te cilen ju mund ta perdorni ne programin tuaj vetem pas ketij importimi. $e instruksionin
import $ava"util"(& Ju importoni te tere librarine dhe klases ;rra!Xist ju mund ti re!eroheni
me emrin e plote $ava"util";rra!Xist @se thjesht ;rra!Xist . $e instruksionin import
$ava"util";rra!Xist& ju sillni ne program nje klase te vetme ate te ;rra!Xist. Ju mund ta
perdorni kete klase me emrin e saj ;rra!Xist.
,ur ju krijoni nje kod ne Java k" shpesh 'uhet dhe njesi kompiluese+ Secila njesi kompiluese duhet te
kete nje mbarese "$ava Trenda njesise kompiluese duhet te jete nje klase publike 'e ka te njejtin emer
me njesine kompiluese ( por pa prapashtesen "$ava) *e secilen njesi kompiluese duhet te kete vetem
nje klase publike perndr"she kompilatori ju para'et gabime.
,ur ju kompiloni nje skedar me prapashtesen "$ava ju merrni nje skedar daljeje. ," skedar ka te njejtin
emer me ate te klases ne skeadrin "$ava por me mbaresen .class .*je program ne Java mund te jete
perbehet nga disa skedare te tipit "class te cilat mund te paketohen dhe te kompresohen ne nje
skedar Java =Hchive (J=H). *je librari eshte nje grup i ket"re skedareve "class. Secili skedar ka ne
permbajtje nje klase.
*'s keto klasa kane nje!are lidhjeje konceptuale ose !unksionale ju mund ti gruponi ato ne paketa. ,ur
ne !illim te nje skedari ju thoni package paketa9me& ju deklaroni se kjo njesi kompiluese eshte
pjese e nje librarie te 'uajtur paketa9me. E thene ndr"she ju thoni 'e klasa 'e ndodhet ne njesine
kompiluese eshte nen IcadrenG e emrit paketa9me dhe cdokush 'e do ta perdore duhet ta importoje
me pare me deklarimin import m!package"(& Duhet te kini paras"sh se ajo 'e !jalet celes
package dhe import ju lejojne te beni eshte te ndani hapsiren globale per perdorimin e emrave. *e
kete men"re ju mund te keni disa klasa me te njejtin emer por 'e ndodhen ne paketa te ndr"shme.
Paketat e Java APA
Sic kemi pare Java permban shume klasa te paracaktuara te grupuara na paketa. Disa prej ket"re
klasave te Java =0I (=pplication 0rogramming Inter!ace) jane .
/O
Java I Sidita Duli
$ava"applet
Java =pplet 0ackage permban nje klase dhe disa nder!a'e 'e perdoren ne krijimin e programeve applet
te cilat ek#ekutohen ne )eb Tro(ser+a.
$ava"a5t
Java =bstract )indo( 8oolkit eshte nje pakete 'e permban klasa dhe nder!a'e 'e perdoren per te
krijuar dhe manipuluar komponenten e :AI (:raphical Aser Inter!ace).
$ava"a5t"event
Java =bstract )indo( 8oolkit Event 0ackage permban klasa dhe nder!a'e 'e manipulojne komponente
:AI dhe ne java.a(t dhe $ava8"s5ing
$ava"io
Java Input4@utput 0ackage permban klasa dhe nder!a'e 'e mundesojne programin te jape dhe te marre
te dhena.
$ava"lang
Java 9anguage 0ackage permban klasa dhe nder!a'e 'e perdoren ne shume programe. ,jo pakete
importohet nga vete kompilatori ne te gjithe programet. Ju nuk keni nevoje ta importoni ate.
$ava"net
Java *et(orking 0ackage permban klasa dhe nder!a'e 'e lejon programin te komunikoje me rrjete
kompjuterike.
$ava"te8t
Java 8e5t 0ackage permban klasa dhe nder!a'e 'e mundesojne programet te manipulojne me numra
karaktere dhe stringa psh nje program mund te para'ese stringa ne gjuhe te ndr"shme ba#uar ne
vendndodhjen e perdoruesit.
$ava"util
Java Atilities 0ackage permban klasa dhe nder!a'e 'e manipulojne data oren procesimin e numrave
random (te rastit) ndarjen e stringes ne disa pjese etj.
$ava8"s5ing
Java S(ing :AI Components 0ackage permban klasa dhe nder!a'e 'e sigurojne mbeshtetje per
elemente te :AI+se.
$ava8"s5ing"event
Java S(ing Event 0ackage permban klasa dhe nder!a'e te a!ta per te mundsuar eventet (ngjarjet) e
$ava8"s5ing si psh pergjigja e click te nje butoni.
0ratike e mire programuese eshte te shikoni permbjatjen e ket"re klasave dhe metodave para se tPi
importoni ne men"re 'e te dini parimisht !unksionimin e t"re.
Ars/eja e perdorimit te paketave
Krijimi i emrave unike
*je pakete mund te perbehet nga disa skedare te tipit .class. Skedaret .class te te njejtes pakete jane te
vendosur ne te njejten direktori. ,jo #gjidh d" probleme .
%. ,rijimin e d" paketave me te njejtin emer.
/&
Java I Sidita Duli
/. :jetjen lehte te ket"re klasave.
,ur ne importojme nje pakete ne mund te perdorim klasat e kesaj pakete dhe metodat e ket"re klasave.
*e deklarojme importimin e nje pakete 'e ne !illim te skedarit .java
Kolizionet
C!are ndodh kur d" librari jane te importuara me ane te simbolit R 6 P
0sh kemi ne kod keto importime .
import paketaIme.6C
import java.util.6C
java.util.6 permban nje klase 1ector. Supo#oj se dhe paketaIme ka nje klase me po kete emer. ,jo
shakakton nje kon!likt (koli#ion) ne perdorimin e kesaj klase. ," kon!likt ndodh kur shkruajme kod 'e
perdor elementet e kesaj klase me emer te njejte ne te d" paketat. ,ur shkruaj .
1ector v M ne( 1ector()C
Ciles klase 1ector po i re!erohemi \
,ompilatori nuk e di dhe as le5uesi nuk e ka te 'arte.
0er kete kompilatori para'et sugjerimin 'e te shprehni ne men"re eksplicite se ciles klase po i re!eroheni.
0sh n's dua te perdori klasen standarte atehere duhet shkruar .
java.util.1ector v M ne( java.util.1ector()C
$e nje kod te speci!ikuar ne kete men"re kompilator nuk me hap problem nese nuk shkruaj import
java.util.6 (n's nuk perdori ndonje klase tjeter te kesaj pakete)
Krijimi i nje li#rarie
$e lart thame se njesia e librarise eshte paketa. Importimi i nje pakete na mundeson perdorimin e
klasave 'e ndodhen ne te dhe 'e jane pjese e librarise si ne shembullin meposhte.
public class Printo {
public static void print(String s {
S!stem"out"print(s&
'
public static void println(String s
{ S!stem"out"println(s&
'
'
Importimi i paketes ku ndodhet kjo klase dhe perdorimi i metodave te kesaj klase na mundeson te
perdorim metoda te tjera ne vend te print dhe println 'e ndodhen ne librarine standarte. 1ini re 'e keto
metoda kane !unksion te ngjashem me S"stem.out.println() dhe S"stem.out.print(). 1ini re 'e
argumentat h"res duhet te jene det"rimisht stringa 'e te pranohen si argumenta te vle!shem. 8ani e
tutje mund te jete nje praktike e mire 'e te grumbullojme te gjithe !unksionet me vlere ne nje pakete 'e
mund te sherbeje si nje librari e jona.
Leksioni B
Perdorimi i fjales celes this
Shembull : Klasa Koha
DQ
Java I Sidita Duli
Shembulli i pare permban klasat ,oha dhe ,oha8est. ,lasa ,oha para'et kohen e nje dite. ,lasa ,oha8est
eshte nje aplikaion 'e permban main dhe therret objektin e klases ,oha. ,eto klasa jane deklaruar si
publike dhe si klasa me vete.
public class Toha
{
int ore& // 1 @ )+
int minute& // 1 @ HS
int sekonde& // 1 @ HS
public void caktoTohen( int o2 int m2 int s
{
ore 7 ( ( o =7 1 DD o R )> A o . 1 &
minute 7 ( ( m =7 1 DD m R C1 A m . 1 &
sekonde 7 ( ( s =7 1 DD s R C1 A s . 1 &
'
public String konvertoBeString(
{
return String"format( #K1)d.K1)d.K1)d#2 ore2 minute2 sekonde &
'
public String formatiStandart(
{
return String"format( #Kd.K1)d.K1)d Ks#2
( ( ore 77 1 LL ore 77 1) A 1) . ore K 1) 2
minute2 sekonde2 ( ore R 1) A #;F# . #PF# &
'
'
public class TohaUest
{
public static void main( String args[]
{
Toha koha 7 ne5 Toha(&
S!stem"out"print( #Elera ne string . # &
S!stem"out"println( koha"konvertoBeString( &
S!stem"out"print( #Elera ne standart. # &
S!stem"out"println( koha"formatiStandart( &
S!stem"out"println(&
koha"caktoTohen( 1+2 )J2 C &
S!stem"out"print( #Elera ne string. # &
S!stem"out"println( koha"konvertoBeString( &
S!stem"out"print( #Elera standarte tani eshte. # &
S!stem"out"println( koha"formatiStandart( &
S!stem"out"println(&
koha"caktoTohen( SS2 SS2 SS &
D%
Java I Sidita Duli
S!stem"out"println( #Uentative per te dhena gabim.# &
S!stem"out"print( #Toha ne string. # &
S!stem"out"println( koha"konvertoBeString( &
S!stem"out"print( #Toha standarte. # &
S!stem"out"println( koha"formatiStandart( &
'
'
,lasa ,oha permban tre atributet .ore minute sekonde si dhe metodat . cakto,ohen( )
konverto*eString ( ) dhe !ormatiStandart( ).
$etoda cakto,ohen deklaron tre parametra dhe i perdor per te caktuar kohen. ,ushti i vendosur
kontrollon nese vlerat jane te lejuara psh ora duhet te jete mes vlerave Q dhe /D. *e men"re analoge
ben kontrollin edhe per vlerat e minutave dhe sekondave te cilat duhet te jene mes vlerave Q dhe K&. 0o
n's perdoruesi jep te dhena te pasakta psh per oren jep vleren %% por per minutat dhe sekondat jep
vlerat NN dhe OO\ *e kete rast metoda cakton vlera Q 'e eshte nje vlere e lejuar per minutat dhe
sekondat. ,eshtu 'e ne vend te nje ore te pasakte . %%.NN.OO metoda cakton oren e sakte . %%.QQ.QQ.
$etoda konverto*eString nuk merr argumente dhe kthen nje String ne !ormatin universal me L shi!ra
d" per oren d" per minutat dhe d" per sekondat. 0sh kohen %.DQ.QN 0$ kjo metode e konverton ne
%D.DQ.QN. 0er kete perdoret nje metode e gatshme e klases String metoda !ormat e cila eshte metode
statike dhe ben kete !ormatim.
$etoda !ormatiStandart nuk merr argumenta dhe kthen nje String ne nje !ormat Standard per te
treguar kohen ne ore minuta e sekonda si dhe treguesin =$ ose 0$. Edhe ketu eshte perdorur metoda
statike !ormat per te !ormatuar minutat dhe sekondat ne d" shi!ra.
=plikacioni ,oha8est krijon nje objekt te ri dhe i jep vlera. 1lerat 'e jepen jane njehere te sakta dhe me
pas provohet per vlera jo te sakta sic jane && per oren minutat dhe sekondat. 0er keto vlera vini re se cili
eshte a!ishimi pra cilat jane vlerat 'e vendos metoda cakto,ohen ne keto raste.
9eferencimi i o#jektit aktual duke perdore fjalen celes this
Cdo objekt shenon te vetja me ane te !jales celes this. $etodat statike thirren jo ne lidhje me nje objekt
te caktuar kurse metodat jo+statike thirren det"rimisht ne lidhje me nje objekt. 0ikerisht ne thirrjet jo+
statike perdoret !jala this. *e keto raste brenda metodes !jala celes this merr re!erencen e objektit me
te cilin eshte thirre metoda.
public class UhisUest
{
public static void main( String args[]
{
GraUani k!Foment 7 ne5 GraUani(&
k!Foment"ore71H&
k!Foment"minute7+H&
k!Foment"sekonde7>J&
S!stem"out"println( k!Foment"konvertoBeString( &
'
'
class GraUani
{
int ore& // 1@)+
int minute& // 1@HS
int sekonde& // 1@HS
D/
Java I Sidita Duli
public String konvertoBeString(
{
return String"format( #K)>s. Ks,nK)>s. Ks#2
#this"formatiStandart (#2 this"formatiStandart (2
#formatiStandart(#2 formatiStandart( &
'
public String formatiStandart(
{
return String"format( #K1)d.K1)d.K1)d#2
this"ore2 this"minute2 this"sekonde &
'
'
,eto d" klasa ndodhen ne te njejtin skedar 8his8est.java sepse kjo eshte klasa e vetme publike ne kete
skedar. 1ini re pas kompilimit do krijohen d" skedare .class nje per secilen klase.
*e klasen @ra8ani jane deklaruar tre atribute privat. ore minute dhe sekonde.
$etoda konverto*eString therret metoden !ormatiStandart ne keto d" rreshta .
#this"formatiStandart (#2 this"formatiStandart (2
#formatiStandart(#2 formatiStandart( &
*e rreshtin e pare !jala celes this perdoret per te marre re!erencen e objektit k"$oment. 0se pikerisht
k" objekt\
Sepse k" eshte objekti me te cilin eshte thirrur metoda konverto*eString
S!stem"out"println( k!Foment"konvertoBeString( &
dhe brenda kesaj metode te njejtin objekt k"$oment e duam per !ormatiStandart.
Kujdes: te gjitha metodat jane jo+statike prandaj duan medoemos nje objekt per ti thirrur. *e te d" keto
rreshta me ose pa this thirrja eshte e sakte. 0o kur eshte e sakte edhe thirrja pa this pse dhe kur e
perdorim det"rimisht thirrjen me this\
0erdoret !jala celes this ne rastet kur . metoda permban nje variabel lokal me te njejtin emer si atributi.
*e keto raste prioritet ka variabli lokal. 0er ti marre vleren e atributit ne kete metode duhet det"rimisht
te perdoret !jala celes this.
public class UhisUest
{
public static void main( String args[]
{
GraUani k!Foment 7 ne5 GraUani(&
k!Foment"caktoTohen(1H2)>21)&
'
'
class GraUani
{
int ore& // 1@)+
int minute& // 1@HS
int sekonde& // 1@HS
public caktoTohen( int ore2 int minute2 int sekonde
{
this"ore 7 ore&
this"minute 7 minute&
DD
Java I Sidita Duli
this"sekonde 7 sekonde&
'
'
*e metoden cakto,ohen duhet det"rimisht te perdoret !jala celes this sepse kjo metode ka tre variabla
lokale me te njejtin emer si atributet. 0ra ketu .
this"ore eshte atributi ore i klases @ra8ani kurse ore eshte emri i variablit lokal (nuk eshte e njejta
gje22 ).
Leksioni 11
Clementet statike
Cdo objekt ka kopjen e tij me vlerat e variablave te klases. 0sh kjo objekt i klases =utomjet ka ngj"ren e
tij llojin etj ashtu si cdo objekt i klases 0i##a pra cdo pi##a e porositur ka llojin e saj mund te jete ne
porcion te !amiljar ose per !emije ka perberesh shtese etj. 0ra secili objekt merr vlere per atributet 'e ai
ka.
,a rast 'e ne na duhet nje variabel unik per cdo element te klases. 0sh ne #"ren e regjistrimit te
automjeteve ek#iston nje numer 'e ruan vleren e totalit te automjeteve te regjistruar. ," numer nuk i
takon secilit automjet por eshte unik dhe ka domethenie per klasen ne teresi. Dicka te ngjashme mban
shenim dhe cdo restorant e pi##eri numrin e pi##ave te porositura per cdo dite. ," numer nuk ka lidhje
me ndonje pi##e te vecante por ka lidhje me te gjithe klasen 0i##a. 0ikerisht keto elemente atribute ose
metoda 'e skane lidhje me secilin objekt por me klasen deklarohen si elemente statike. ,jo behet duke
perdore !jalen celes static. 1ini re . perdorni nje variabel statik kur te gjithe objektet e klases duhet te
kene te njejten kopje per ate variabel.
Shembull . ,lasat *enpunesi dhe *enpunesi8est
,lasa *enpunesi deklaron nje variabel privat dhe statik me emrin numer dhe nje metode publike dhe
statike me emrin get*umer. 1ariabli numer iniciali#ohet me vleren #ero dhe ne te do ruhen numrin e
objekteve te klase *enpunes.
public class Benpunes
{
private String emri&
private String mbiemri&
private static int numer 7 1&
public Benpunes( String emr2 String mb
{
emri 7 em&
mbiemri 7 mb&
numer::&
'
public String getVmri(
{
return emri&
'
public String getFbiemri(
{
DF
Java I Sidita Duli
return mbiemri&
'
public static int getBumer(
{
return numer&
'
'
public class BenpunesUest
{
public static void main( String args[]
{
S!stem"out"println( #Bumri i nenpunesve para fazes se
intervistes se punes. #:
Benpunes"getBumer( &
Benpunes e1 7 ne5 Benpunes( #Susan#2 #<aker# &
Benpunes e) 7 ne5 Benpunes( #<ob#2 #<lue# &
S!stem"out"println( #Bumri i nenpunesve pas intervistes. # &
S!stem"out"println( #via e1"getBumer(.#: e1"getBumer( &
S!stem"out"println( #via e)"getBumer(.#: e)"getBumer( &
S!stem"out"println( #via Benpunes"getBumer(.#:
Benpunes"getBumer( &
S!stem"out"println( #Benpunesi 1. #: e1"getVmri(:# #:
e1"getFbiemri(&
S!stem"out"println( #Benpunesi ). #: e)"getVmri(:# #:
e)"getFbiemri(&
'
'
1ini re thirrjet e elementit statik numer. ,eshillohet 'e cdo element statik ta therrisni ne kete men"re.
Emer,lase.ElementiStatik
,ujdes.
:abim gjate kompilimit ndodh n's nje metode statike therret nje metode jo statike pa e thirrur
ate me nje objekt. ,ete gabim shpesh e keni pare gjate seminareve kur keni tentuar te therrisni nje
metode jo statike pa krijuar ende objekte.
:abim eshte edhe perdorimi i this ne nje metode statike. ,jo sepse fjala this kerkon per nje
reference per objektin me te cilin eshte thirre metoda ndersa metoda statike nuk ka nje objekt te tille.
Leksioni 11
>a#elat ne Java
*je tabele eshte nje grup variablash 'e permban disa vlera te te njejtit tip. 8ipi i ket"re vlerave mund te
jete njeri nga tipet primitive ose mund te jete edhe nje klase e krijuar. 0er te re!eruar ne nje element te
caktuar ne tabele duhet speci!ikuar emri i tabeles dhe indeksi ose po#icioni i elementit ne tabele. 0er te
percaktuar indeksin perdoren kllapat katrore ] dhe ^.
Deklarimi dhe krijimi i nje ta#ele+
DK
Java I Sidita Duli
8abelat si cdo gje tjeter ne Java trajtohet si objekt. 0er te krijuar nje tabele te re duhet perdore !jala
celes ne(. 0er te krijuar nje tabele me %/ numra te plote perdoret nje instruksion i tille .
int c[]7ne5 int[1)]&
,ur krijohet nje tabele e re secili element iniciali#ohet me vleren iniciali#uese te tipit psh numrat e plote
iniciali#ohet me Q numrat me presje me Q.Q kurse objektet me vleren null.
,ujdes. Indeksi i pare eshte Q ( njesoj si ne C++ ).
2hem#ull 1 . krijohet nje tabele e iniciali#uar me vlere Q per secilin element.
public class 9nit;rra!
{
public static void main( String args[]
{
int arra![]& // declare arra! named arra!
arra! 7 ne5 int[ 11 ]& // create the space for arra!
S!stem"out"printf( #KsKIs,n#2 #9nde8#2 #Ealue# & // column
headings
// output each arra! element3s value
for ( int counter 7 1& counter R arra!"length& counter::
S!stem"out"printf( #KHdKId,n#2 counter2 arra![ counter ] &
' // end main
' // end class 9nit;rra!
2hem#ull ! : krijimi i nje tabele me elemente te iniciali#uar
public class 9nit;rra!
{
public static void main( String args[]
{
// initializer list specifies the value for each element
int arra![] 7 { +)2 )J2 C>2 1I2 SH2 1>2 S12 J12 C12 +J '&
S!stem"out"printf( #KsKIs,n#2 #9nde8#2 #Ealue# & // column
headings
// output each arra! element3s value
for ( int counter 7 1& counter R arra!"length& counter::
S!stem"out"printf( #KHdKId,n#2 counter2 arra![ counter ] &
' // end main
' // end class 9nit;rra!
2hem#ull $ : krijimi i nje tabele me vlera 'e llogariten
public class 9nit;rra!
{
public static void main( String args[]
{
final int ;NN;[YXVBWU/ 7 11& // constant
int arra![] 7 ne5 int[ ;NN;[YXVBWU/ ]& // create arra!
// calculate value for each arra! element
DL
Java I Sidita Duli
for ( int counter 7 1& counter R arra!"length& counter::
arra![ counter ] 7 ) : ) ( counter&
S!stem"out"printf( #KsKIs,n#2 #9nde8#2 #Ealue# & // column
headings
// output each arra! element3s value
for ( int counter 7 1& counter R arra!"length& counter::
S!stem"out"printf( #KHdKId,n#2 counter2 arra![ counter ] &
' // end main
' // end class 9nit;rra!
@atricat: ta#elat d/ dimensionale
8abelat d" dimensionale para'esin te dhena te organi#uara ne rreshta dhe sht"lla. 0er te identi!ikuar nje
element duhen d" indekse. Indeksi i pare para'et rreshtin ku ndodhet elementi kurse indeksi i d"te
para'et sht"llen e elementit. *e java nuk mund te caktojme nje matrice ne men"re direkte por mund te
caktojme nje matrice si tabele nje dimensionale elementet e seciles jane rreshta me elemente.
*je tabele d" dimensionale mund te iniciali#ohet ne kete men"re .
int b[][]7{{1 2 )'2{+ 2 >''&
*e java mund te iniciali#ohet edhe tabela jo te rregullta 'e kane numra te ndr"shem elementesh per
rresht. *je tabele e tille eshte dhe kjo e cila ka / elementa ne rreshtin e pare dhe D elementa ne rreshtin
e d"te.
int b[][]7{{1 2 )'2 { + 2 >2 H''&
*je tabele d" dimensionale me te njejtin numer rreshtash e sht"llash mund te krijohet edhe me kete
instruksion .
int b[][]7ne5 int [+][>]&
*e kete rast tabela b ka D rreshta dhe F sht"lla.
0er te krijuar tabele 'e ka numer te ndr"shem elementesh per rresht perdoren keto instruksione.
int b[][]7ne5 int[)][]& //kri$on ) rresht
b[1]7ne5 int [H]& // kri$on H sht!lla per rreshtin 1
b[1]7ne5 int [+]& // kri$on + sht!lla per rreshtin 1
*e kete rast tabela b ka K elemente ne rreshtin e pare dhe D elemente ne rreshtin e d"te.
public class 9nit;rra!
{
// create and output t5o@dimensional arra!s
public static void main( String args[]
{
int arra!1[][] 7 { { 12 )2 + '2 { >2 H2 C ' '&
int arra!)[][] 7 { { 12 ) '2 { + '2 { >2 H2 C ' '&
S!stem"out"println( #Ealues in arra!1 b! ro5 are# &
output;rra!( arra!1 & // displa!s arra!1 b! ro5
S!stem"out"println( #,nEalues in arra!) b! ro5 are# &
output;rra!( arra!) & // displa!s arra!) b! ro5
' // end main
// output ro5s and columns of a t5o@dimensional arra!
public static void output;rra!( int arra![][]
{
DN
Java I Sidita Duli
// loop through arra!3s ro5s
for ( int ro5 7 1& ro5 R arra!"length& ro5::
{
// loop through columns of current ro5
for ( int column 7 1& column R arra![ ro5 ]"length& column:
:
S!stem"out"printf( #Kd #2 arra![ ro5 ][ column ] &
S!stem"out"println(& // start ne5 line of output
' // end outer for
' // end method output;rra!
' // end class 9nit;rra!
Leksioni 1!
>rashegimia e klasave
Shpesh nje objekt i nje klase eshte objekt edhe i nje klase tjeter. 0sh ne gjeometri nje katror c!aredo
eshte objekt edhe i klases katror por edhe objekt i klases drejtkendesh. *e kete aspekt klasa
drejtkendesh eshte nje superklase kurse klasa katror eshte nje nenklase. 1ini re se nje katror eshte edhe
drejtkendesh por jo cdo drejtkendesh eshte katror. 0er kete nje superklase eshte me e pergjithshme
kurse nje nenklase eshte me speci!ike. 8jere emertime 'e perdoren per superklase jane edhe klasa ba#e
ose klasa prind. 8erma tjere 'e perdoren per nenklasat jane edhe klasa e derivuar dhe klasa !emije.
Shembuj trashegimie klasash. ,lasa Student mund te kete nenklasa. Student,ohe8e0lote
Student0art8ime. ,lasa -orma:jeometrike mund te kete nenklasa. Hreth 8rekendesh Drejtkendesh.
,lasa *enpunes mund te kete nenklasa. 0ersonel=kademik 0ersonel=dministrativ. ,lasa 9logariTanke
mund te kete nenklasa . 9logari-leksi 9logariHrjedhese etj.
$e tekniken e trashegimise merr kuptim edhe ku!i#imi protected 'e kemi permendur per elementet e
klasave. Elementet publike shihen nga cdo klase pra nat"risht edhe nga nenklasa. Elementet private te
klases ba#e nuk shi!en nga asnje klase tjeter pra as nga klasa e derivuar. *iveli protected eshte nje
ku!i#im i ndermjetem mes privates dhe publikes. =i lejon aksesimin vetem nga . vete klasa klasat e
derivuara nga klasa dhe gjitha klasat e tjera te paketes ku ndodhet klasa.
Elementet publik te klases ba#e kur trashegohen ruajne te njejtin ku!i#im pra do jene publike edhe te
klasa e derivuar. Elementet protected te klasa ba#e gjithashtu ruajne te njejtin ku!i#im kur kalojne te
klasa e derivuar.
Konstruktoret
0er kete eshte me rendesi 'e te thirret k" konstruktor i klases ba#e per te ndertuar pjesen 'e i takon ne
objektin e klases se derivuar. 1ini re rendin e thirrjes implicite te konstruktoreve. ," rend eshte i tille .
%. 8hirret i pari konstruktori i klases ba#e dhe kjo gje perseritet derisa te kemi arritur ne rrenjen e
hierarkiese se struktures se klasave. *dertohet e para kjo pjese 'e i perket klases rrenje duke vijuar te
klasa e nivelit te d"te derisa arrihet te klasa jone e derivuar.
/. Iniciali#ohen elementet e klases se derivuar ne ba#e te rendit te deklarimit.
D. Ek#ekutohen instruksionet e trupit te konstruktorit te klases se derivuar.
$e pare reali#ohet ndertimi i pjeses se klases ba#e ne men"re te tille 'e ne mund te aksesojme te gjithe
elementet public dhe protected te klases ba#e gjate ndertimit te pjeses se derivuar. *e kete men"re
siguroni iniciali#imin e sakte te objektit me elementet 'e trashegon dhe me elementet speci!ike te klases
se derivuar. 0ame ne leksionin paraardhes se gjate mbivendosjes se metodave polimor!ike metoda 'e
duhet te thirret kuptohet gjate kohes se ek#ekutimit pasi kuptohet se ciles klase i perket objekti me te
DO
Java I Sidita Duli
cilin po thirret metoda. 0o ne rastin kur kjo metode polimor!ike thirret brenda ne konstruktor \ *e kete
rast metoda 'e thirret eshte metoda e mbivendosur. :jithsesi kjo gje mund te na o!roje Isurpri#aG te
pakendshme e!ekte te paparashikuara.
Det"ra e konstruktorit te nje klase eshte te sjelle ek#istencen e objektit. Trenda konstruktorit ne nje
po#icion te caktuar objekti eshte ndertuar pjeserisht. ,ur kemi thirrjen e nje metode polimor!ike ne nje
metode c!aredo ajo 'e thirret eshte metoda e klases se derivuar. *'s ju reali#oni kete ne konstruktor
ju me !akt perpi'eni te manipuloni nje objekt i cili nuk eshte !ormuar ende. *e !akt reali#imi i kesaj
thirrjeje shpjegohet me nje veprim i cili ndodh para se te thirret konstruktori i klases ba#e. :jeja e pare
'e kr"het eshte #enia vend ne memorje te objektit dhe k" vend ne memorje iniciali#ohet me #ero.
*je gje 'e i Iduhet theneG konstruktorit eshte . 0erpi'u ti japesh objektit nje gjendje te mire dhe brenda
mundesive mos thirr asnje metode. $etodat e vetme 'e mund te thirren nga konstruktori (pa hapur
probeleme) jane metodat !inale te klases ba#e (gjithashtu metodat private te cilat jane automatikisht
!inale). ,jo per !aktin se keto metoda nuk mund te mbivendosen dhe nuk do shkaktojne Isurpri#aG .
2hem#ull 1
Jepen klasat ,omision*enpunesve dhe ,omision*enpunesve8est. *e keto klasa nuk eshte perdorur
trashegimi.
public class TomisionBenpunesve
{
// atributet per nenpunesin
public String emri&
public String mbiemri&
public String nrSigurimeShoq&
public double paga<rutoFu$ore&
public double perqind$eTomisioni&
// konstruktor
public TomisionBenpunesve( String em2 String mb2 String nr2
double pg2 double pk
{
emri 7 em&
mbiemri 7 mb&
nrSigurimeShoq 7 nr&
paga<rutoFu$ore 7 pg&
perqind$eTomisioni7pk
'
// metoda set per emrin
public void setVmri( String e
{
emri7 e&
'
// metoda get per emrin
public String getVmri(
{
return emri&
'
// metoda set per mbiemrin
public void setFbiemri( String m
{
D&
Java I Sidita Duli
mbiemri 7 m&
'
// metoda get per mbiemrin
public String getFbiemri(
{
return mbiemri&
'
// metoda set per nr e sigurimeve shoqerore
public void setBrSigurimeShoq ( String n
{
nrSigurimeShoq 7 n&
'
// metoda get per nr e sigurimeve shoqerore
public String getBrSigurimeShoq (
{
return nrSigurimeShoq&
'
// caktimi i pages bruto
public void setPaga<rutoFu$ore( double p
{
paga<rutoFu$ore 7 ( p R 1"1 A 1"1 . p&
'
// le8imi i pages bruto
public double getPaga<rutoFu$ore (
{
return paga<rutoFu$ore&
'
// caktimi i perqind$es
public void setPerqind$eTomisioni ( double p
{
perqind$eTomisioni 7 ( p = 1"1 DD p R 1"1 A p . 1"1&
'
// le8imi i perqind$es per komisionin
public double getPerqind$eTomisioni (
{
return perqind$eTomisioni&
'
// llogari$e e pages neto
public double pagaBeto(
{
return paga<rutoFu$ore ( perqind$eTomisioni&
'
'
// Tlase aplikacion per nenpunesin
public class TomisionBenpunesveUest
{
public static void main( String args[]
{
TomisionBenpunesve np 7 ne5 TomisionBenpunesve(
#Weorge#2 #*efferson#2 #)))@))@))))#2 111112 "1C &
FQ
Java I Sidita Duli
S!stem"out"println(
#9nformacion per nenpunesit. ,n# &
S!stem"out"println (#Vmri .#:np"getVmri( &
S!stem"out"println (#Fbiemri .#:np"getFbiemri( &
S!stem"out"println (#Bumri i sig shoqerore .#
: np"getBrSigurimeShoq (&
S!stem"out"println( #Paga bruto eshte #:
np"getPaga<rutoFu$ore( &
S!stem"out"println(#Tomisioni . #2
getPerqind$eTomisioni(&
np"setPaga<rutoFu$ore( H11 &
np"setPerqind$eTomisioni(1"1 &
'
'
// nenklase e klases TomisionBenpunesve
public class <asePlusTomisionBenpunesve e8tends TomisionBenpunesve
{
// trashegimia ben qe ketu te $ene g$ithe atributet e klases baze
// PX\S atributi shtese paga<aze
private double paga<aze&
// konstruktori i nenklases
public <asePlusTomisionBenpunesve ( String em2 String mb2
String nr2 double pg2 double per2 double bz
{
// thirr$e e konstruktorit te klases baze
// vlerat e pese atributeve te trasheguar caktohen ketu
super( em2 mb2 nr2 pg2 per &
// caktohet vlera e atributit shtese
paga<aze7bz&
'
// $epet vlera e pages baze
public void setPaga<aze( double b
{
paga<aze 7 ( b R 1"1 A 1"1 . b&
'
// le8ohet paga baze
public double getPaga<aze(
{
return baseSalar!&
'
// llogaritet paga neto
public double neto(
{
return paga<aze : (Perqind$eTomisioni ( Paga<rutoFu$ore &
'
'
F%
Java I Sidita Duli
,ur deklaroni nje klase ju percaktoni emrin e saj dhe para se te hapni kllapen ju vendosni e5tends dhe
emrin e klases ba#e nga e cila derivon klasa 'e po krijoni. Duke perdore trashegimine ju automatikisht
keni marre ne klasen e re te gjitha !ushat (atributet) dhe metodat e klases ba#e.
2hem#ull !
class Pastrues {
private String s 7 ne5 String(#Pastrues#&
public void shto$(String a {
s :7 a&
'
public void hollo$( {
shto$(# hollo$(#&
'
public void apliko$( {
shto$(# apliko$(#&
'
public void pastro$( {
shto$(# pastro$(#&
'
public String toString( { return s& '
public static void main(String[] args {
Pastrues 8 7 ne5 Pastrues(&
8"hollo$(&
8"apliko$(&
8"pastro$(&
S!stem"out"println(8&
' '
public class 0etergent e8tends Pastrues {
// duke modifikuar n$e metode.
public void pastro$( {
shto$(# 0etergent"pastro$(#&
super"pastro$(& // duke thirre klasen baze
'
// duke shtuar metoda te re$a.
public void shkumo$( {
shto$(# shkumo$(#&
'
// duke testuar klasen e re.
public static void main(String[] args {
0etergent 8 7 ne5 0etergent(&
8"hollo$(&
8"apliko$(&
8"pastro$(&
8"shkume(&
S!stem"out"println(8&
S!stem"out"println(#Po testo$ klasen baze.#&
Pastrues"main(args&
'
'
F/
Java I Sidita Duli
," shembull tregon disa vecori. Se pari ne metoden 0astrues aplikoj() stringat jane te lidhur
duke perdore operatorin +M i cili eshte nje nga operatoret e Stringjeve. Se d"ti 0astrues dhe Detergent
permbajne nje metode main per secilen nga klasat. Ju krijoni nje main per cdo klase dhe kjo eshte nje
praktike e mire. Edhe kur keni disa klasa ne nje program vetem main() i nje klase do thirret ne
ek#ekutim. Ju mund te ek#ekutoni njeren nga te d" klasat Detergent dhe 0astrues sepse te d"ja kane
nje metode main te veten dhe re#ultati i ket"re ek#ekutimeve do jete i ndr"shem. ,jo teknike e
vendosjes se nje metode main() ne secilen klase ju mundeson testimin e seciles klase ne men"re te
panvarur. ,etu mund te shihni se Detergent.main() therret ne men"re eksplicite 0astrues.main() duke i
kaluar argumentin args.
Eshte e rendesishme 'e te gjitha metodat e klases 0astrues jane publike. ,ujtoni se nese lini nje
element pa asnje ku!i#im ai do kete ku!i#imin de!ault packae access. E lene pa asnje ku!i#im metoda
do kete akses vec nga klasat brenda paketes por ne kete rast d" klasat jane ne te njejten pakete por
eshte mire 'e keto metoda te klasa ba#e te jene ose publike ose protected. 1ini re 'e klasa 0astrues ka
disa metoda si aplikoj() holloj() shtoj() holloj() pastroj() dhe toString() .
,lasa Detergent eshte e derivuar nga klasa 0astrues (duke perdore !jalen extends). Duke 'ene
klase e derivuar klasa Detergent i merr te gjitha metodat e klases 0astrues. *e kete men"re me ane te
trashegimise ju mund te riperdorni nje klase. Sic e shihni ne pastroj() eshte e mundur 'e ne klasen e
derivuar te modi!ikohet nje metode e percaktuar ne klasen ba#e. *e kete rast ju mund te therrisni kete
metode nga klasa ba#e. *e pastroj() te klases Detergent ju mund te therrisni pastroj() te klases ba#e
pastrues duke perdore !jalen celes super e cila re!eron te superklasa (klasa ba#e). 0er kete instruksioni
super.pastroj() therret versionin pastroj() te klases ba#e.
2hem#ull $
class Xo$e {
Xo$e(int i {
S!stem"out"println(#Tonstruktori i lo$es#&
'
'
class Xo$eUavoline e8tends Xo$e {
Xo$eUavoline(int i {
super(i&
S!stem"out"println(#Tonstruktor Xo$eUavoline#&
'
'
public class Shah e8tends Xo$eUavoline {
Shah( {
super(11&
S!stem"out"println(#Tonstruktor Shahu#&
'
public static void main(String[] args {
Shah 8 7 ne5 Shah(&
'
'
*ga shembulli me lart a!ishohet
,onstruktori i lojes
,onstruktor i 9ojes8avoline
,onstruktor Shahu
FD
Java I Sidita Duli
2hem#ull 3
class P$ate {
P$ate(int i {
S!stem"out"println(#Tonstruktor i p$ates#&
'
'
class P$ateSupe e8tends P$ate {
P$ateSupe(int i {
super(i&
S!stem"out"println(#Tonstruktor i p$ateSupe#&
'
'
class VneTuzhine {
VneTuzhine(int i {
S!stem"out"println(#Tonstruktor Vne kuzhine#&
'
'
class Xuge e8tends VneTuzhine {
Xuge(int i {
super(i&
S!stem"out"println(#Tonstruktor Xuge#&
'
'
class Pirun e8tends VneTuzhine {
Pirun(int i {
super(i&
S!stem"out"println(#Tonstruktor Pirun#&
'
'
class Uhike e8tends VneTuzhine {
Uhike(int i {
super(i&
S!stem"out"println(#Tonstruktor thike#&
'
'
// B$e tradite per te shtruar tr!ezen.
class Uradite {
Uradite(int i {
S!stem"out"println(#Tonstruktor tradite#&
'
'
public class Ur!eze e8tends Uradite {
private Xuge sp&
private Pirun frk&
private Uhike kn&
private P$ateSupe pl&
public Ur!eze (int i {
super(i : 1&
sp 7 ne5 Xuge(i : )&
frk 7 ne5 Pirun(i : +&
FF
Java I Sidita Duli
kn 7 ne5 Uhike(i : >&
pl 7 ne5 P$ateSupe(i : H&
S!stem"out"println(#Tonstruktor tr!eze#&
'
public static void main(String[] args {
Ur!eze 8 7 ne5 Ur!eze (S&
'
'
*ga shembulli me lart a!ishohet .
,onstruktor tradite
,onstruktor Ene ku#hine
,onstruktor 9uge
,onstruktor Ene ku#hine
,onstruktor 0irun
,onstruktor Ene ku#hine
,onstruktor thike
,onstruktor i pjates
,onstruktor i pjateSupe
,onstruktor tr"e#e
class Fotorr {
public void nis( {'
public void sp8hiro( {'
public void ndalp( {'
'
class Nrote {
public void monto$(int psi {'
'
class 0ritare {
public void hap0ritare( {'
public void mb!ll0ritare( {'
'
class 0ere {
public 0ritare dr 7 ne5 0ritare(&
public void hap( {'
public void mb!ll( {'
'
public class Fakine{
public Fotorr engine 7 ne5 Fotorr(&
public Nrote[] rrt 7 ne5 Nrote[>]&
public 0ere
ma$tas 7 ne5 0ere(2
d$athtas 7 ne5 0ere(& // )@d!er
public Fakine( {
for(int i 7 1& i R >& i::
rrt[i] 7 ne5 Nrote(&
'
public static void main(String[] args {
FK
Java I Sidita Duli
Fakine mk 7 ne5 Fakine(&
mk"ma$tas"dr"hap0ritare(&
mk"rrt[1]"monto$(J)&
'
'
Leksioni 1$
>e dhenat finale
Shume gjuhe programimi kane nje metode per te caktuar te dhenat konstante. *je !ushe 'e eshte dhe
static dhe !inal ka vetem nje pjese ne memorje 'e nuk mund te ndr"shoje. ,ur perdorim !jalen celes !inal
me re!erensat e objekteve ne !akt nisin te komplikohen pak idete.
,ur kemi te bejme me nje primitive !inal e ben kete vlere konstante por me re!erensat e objekteve !jala
celes !inal e ben referensen konstante. ,jo do te thote se kur nje re!erense !inale i jepet si vlere nje
objekt ajo nuk do ndr"shoje per te shenjuar ne nje objekt tjeter dhe pse objekti vete mund te
ndr"shoje. Java gjithashtu lejon te krijohen dhe !inale IbosheG te cilat jane !usha 'e deklarohen si !inale
por te cilave nuk iu eshte dhene nje vlere !illestare. :jithsesi keto te dhena !inale duhet te iniciali#ohen
para se te perdoren. Ja nje shembull per keto !inale IbosheG
class Elere {
private int i&
Elere(int ii {
i 7 ii&
'
'
public class Zinal<osh {
private final int i 7 1& // Zinale e inicializuar
private final int $& // Zinale bosh
private final Elere p& // referense finale bosh
// final$a bosh 0\/VU te inicializohet ne konstruktor.
public Zinal<osh( {
$ 7 1& // inicializimi i finales bosh
p 7 ne5 Elere(1& // inicializimi i referenses finale
'
public Zinal<osh(int 8 {
$ 7 8& // inicializimi i finales bosh
p 7 ne5 Elere(8& // inicializimi i referenses finale
'
public static void main(String[] args {
ne5 Zinal<osh(&
ne5 Zinal<osh(>J&
'
'
*e Java ju mund te percaktoni dhe argumenta !inale. ,jo gje behet duke i deklaruar ato ne listen e
argumentave te nje !unksioni. ," perdorim i !jales celes !inal ka e!ektin 'e brenda metodes ju nuk mund
te modi!ikoni argumentin me shenimin !inal.
@etodat finale
*je metode behet !inale per d" ars"e .
%. 0er ti vendosur nje IcelesG per te penguar cdo ndr"shim 'e mund ti behet metodes nga klasat 'e
mund ta trashegojne ate. ,jo behet per ars"e projektimi kur nuk doni te arrihet mbivendosja e metodes.
FL
Java I Sidita Duli
/. =rs"e per e!iciense ne men"re 'e duke bere metoden !inale kompilatori e kalon thirrjen e metodes
ne thirrje te brendshme inline.
Cdo metode private e klases tuaj eshte gjithashtu ( ne men"re implicite) dhe !inale.
Duke mos patur akses ne metode ju ne !akt nuk mund ta dr"shoni ate. *'s doni te shtoni dhe !jalen
celes !ianel nje metode private kjo ne !akt nuk do jepte ndonje e!ekt shtese.
Klasat finale
,ur ju percaktoni nje klase si !inale ajo 'e ju percaktoni eshte se ju nuk doni te trashegoni klasa nga kjo
klase. E thene ndr"she per ars"e projektimi klasa juaj eshte e tille 'e askush nuk duhet ta modi!ikoje.
1ini re 'e atributet e nje klase !inale mund edhe te mos jene !inale varet si doni ta projektoni ju klasen.
:jithsesi per shkak se parandalon trashegimine te gjihta metodat e nje klase !inale percaktohen ne
men"re implicite si !inale per te shmangur mbivendosjen e t"re. Ju mund ti shtoni !jalen celes !inal nje
metode te tille por nuk do jape ndonje e!ekt shtese.
-jala celes final
Duhet te jeni te kujdesshem kur te perdorni !jalen celes !inal ne klasen tuaj. *donjehere e dini se askush
nuk duhet ta perdore klasen tuaj por duhet patur kujdes ne kete supo#im. Shpesh eshte e veshtire te
percaktohet !akti nese nje klase do perdoret apo jo nga nje klase tjeter. Duke perdore !jalen celes !inal ju
hi'ni mundesine e riperdorimit te klases nepermjet trashegimise. 0er kete kjo gje duhet pare mire nese
kjo klase do riperdoret apo jo.
Anicializimi dhe ngarkimi i klasave
*e disa gjuhe programimi programet ngarkohen i teri dhe me pas vijon iniciali#imi dhe me pas nis
programi. 0rocesi i iniciali#imit ne keto gjuhe programimi duhet kontrolluar mire ne men"re 'e rendi i
inicali#imi i !ushtve statie te mos shkaktoje probleme. *e Java nuk shkaktohen keto probleme. Java
perdor nje tjeter proces ngarkimi.
Duke 'ene se ne Java cdo gje trajtohet si objekt k" proces eshte me i thjeshte. Cdo klase ndodhet ne nje
kod te kompilueshem ne nje skedar me vete. ," skedar ngarkohet vetem atehere kur kodi duhet. E
thene ndr"she kodi i klases ngarkohet ne rastin e pare kur perdoret. 8e gjithe objektet statike do
iniciali#ohen ne rendin ne te cilin jane te shkruar ne kod. @bjektet statike inicila#ohen vetem nje here
sepse jane te ruajtur vetem ne nje vend ne memorje.
Shembulli me poshte tregon rreth iniciali#imit te elementeve te klasave te trashegueshme.
=!ishimi ne konsole do jete .
static !nse"tx# i inicializuar
static $luturx% e inicializuar
&onstru"tori i flutures
i ' (, j ' )
$lutura" e inicializuar
" ' *+
j ' ,(
class 9nsekt {
private int i 7 S&
protected int $&
9nsekt( {
S!stem"out"println(#i 7 # : i : #2 $ 7 # : $&
$ 7 +S&
'
FN
Java I Sidita Duli
private static int 81 7 print (#static 9nsekt"81 i
inicializuar#&
static int print(String s {
S!stem"out"println(s&
return >J&
'
'
public class Zlutur e8tends 9nsekt {
private int k 7 print(#Zlutura"k e inicializuar#&
public Zlutur( {
S!stem"out"println(#k 7 # : k&
S!stem"out"println(#$ 7 # : $&
'
private static int 8) 7 print (#static Zlutur"8) e
inicializuar#&
public static void main(String[] args {
S!stem"out"println(#Tonstruktori i flutures#&
Zlutur b 7 ne5 Zlutur(&
'
'
*e !illim kerkohet per te nisur ek#ekutimin me metoden statike -lutur.main(). 0er kete ne !illim gjendet
kodi perkates ne klasen -lutur 'e ndodhet ne skedarin -lutur.class *e procesin e ngarkimit vihet re 'e ka
nje klase ba#e ( kjo tregohet nga !jala k"ce e5tends). *'s edhe klasa ba#e ka nje klase ba#e atehere edhe
kjo klase e d"te ba#e do ngarkohet. $e pas jepen vlera per elementet staike te klases ba#e ( ne kata reast
klasa insekt) dhe me pas te klases se derivuar. 0asi jane ngarkuar te gjitha klasat e nevojshme atehere ne
mund te krijojme nje objekt.
Se pari te gjitha primitivat ne kete objekt vendosen ne vleren !illestare de!ault ne varesi te tipit te
primitives kurse re!erensat vendosen me vlere !illestare null. $e pas thirret konstruktori i klases ba#e.
*dertimi i klases ba#e eshte analog me ate te klases se derivuar.
0asi mbaron konstruktori i klases ba#e variablat iniciali#ohen ne rendin me te cilin jane shkruar ne kod.
$e pas ek#ekutohen pjesa e mbetur e konstruktorit.
Leksioni 13
Klasat finale' a#strakte dhe polimorfizmi
Klasat a#strakte
*e shembujt e leksionit te kaluar pame 'e klasat ba#e permbanin vec metoda 'e nuk benin thuajse
asgje. ,jo sepse keto klasa krijohen vec me 'ellimin per te krijuar nje nder!a'e te perbashket 'e
!unksionon per te gjitha klasat e derivuara nga keto klasa. [ellimi eshte te krijohet nje !orme ba#e per te
percaktuar te perbashketat 'e kane keto klasa dhe me pas per te kaluar tek speci!ikja. ,eto 'uhen dhe
klasa ba#e abstrakte ose thjesht klasa abstrakte.
Ju vendosni te perdorni kete strukture me klasa ba#e ne momentin kur vini re metoda te perbashketa per
disa klasa por 'e secila nga keto i implementon ndr"she keto metoda. *e !akt krijimi dhe perdorimi i
objekteve te ket"re klasave absrakte nuk ka nje kuptim logjik domethenes. Ju doni 'e ne nje!are men"re
te parandaloni gabimin 'e mund te behet duke krijuar objekte te ket"re klasave. *je parandalim te tille
mund ta beni duke i vendosur !jalen celes a#stract .
*je klase 'e permban nje metode abstrakte 'uhet klasa abstrakte. *'s nje klasa permban nje ose me
shume metoda abstrakte klasa vete duhet te percaktohet si abstrakte perndr"she kompilatori ju jep
mesa#h gabimi. =jo 'e ka per det"re te reali#oje kompilatori me nje klase abstrakte eshte te ndaloje
krijimin e objekteve per klasat abstrakte.
FO
Java I Sidita Duli
Eshte mire te behet krijimi i klasave dhe i metodave abstrakte per ars"en se i tregohet kompilatorit dhe
perdoruesit se si presupo#ohet te perdoret klasa ne !jale pra te tregoje 'e nuk do krijohen objekte te
kesaj klase.
Polimorfizmi
,onstruktori i klases ba#e thirret gjithmone gjate konstruktorit te klases se derivuar. ,jo sespe det"ra e
nje konstruktori eshte te ndertoje objektet ne men"ren e duhur dhe vetem konstruktori i klases ba#e e
di !ort mire se si duhet te krijohet nje objekt me elementet e klases se tij.
Projektimi
Duket sikur polimor!i#mi eshte nje teknike e mire e cila na sht"n te trashegojme cdo gje. Shkaku per te
cilin duhet te trashegojme klasat duhet te jete !akti se ne kemi riperdorim te elementeve te klasave. *je
praktike e mire eshte te perdorni se pari perberjen si lidhje mes klasave sidomos kur nuk e keni ende te
'arte nese duhet perdore perberje apo trashegimi. *je udhe#im mund te jete te perdorni trashegimine
per te para'ite ndr"shimet ne sjellje.
>rashegimia dhe polimorfizmi
,emi d" lloje trashegimie.
%. 8rashegimi te paster ne rastin kur klasat e derivuara permbajne te njejtat metoda si klasa ba#e
por te modi!ikuara pra te mbivendosura.
/. 3gjerim ne rastin kur klasat e derivuara permbajne metodat e trasheguara plus metoda shtese.
*e rastin e pare nder!a'ja e projektuar ne klasen ba#e eshte e njejte dhe per klasat e derivuara
nga ajo. :jate perdorimit te kesaj trashegimie ju nuk keni nevoje aspak te dini in!ormacion shtese per
klasat e derivuara. *e kete rast klasa ba#e dhe klasa e derivuar kane te njejten nder!a'e prandaj nje
objekt i klases ba#e mund te marre te njetat mesa#he si objekt i klases se derivuar. Ju duhet vetem te
beni kalimin lart (nga klasa e derivuar te klasa ba#e) dhe te mos sh'etesoheni se c!are duhet te shtoni.
E pare ne kete men"re duket sikur kjo lloj trashegimie eshte men"ra me e mire per ti reali#uar
gjerat. 0or ne !akt ajo 'e shpesh ju doni te reali#oni eshte nje #gjerim i klases ba#e. Shpesh keni te beni
me nje trashegimi !eshte e njashme me ! sesa me nje trashegimi !eshte nje !. 0ra me shpesh keni te
beni me nje #gjerim te klasave se sa me nje trashegimi te paster. Duket sikur dhe !jala celes extends ju
kujton kete gje. -akti 'e keni te beni me nje #gjerim te klases ba#e do thote se klasa e derivuar eshte e
ngjashme me klasen ba#e por 'e ka elemente shtese pra implementohen metoda shtese.
:jate kalimit lart per te klasa ba#e ju humbisni mundesine per te thirre metodat e shtuara te
klasa ba#e. 0erderisa gjate kalimit lart ne hierarkine e klasave trasheguese ju humbni in!ormacion
para'itet nevoja te ri!itoni gjate kalimit te kundert gjate kalimit poshte nga klasa ba#e per te klasa e
derivuar.
*e !akt kalimi lart per te klasa ba#e nuk para'et problem sepse kjo klase ba#e nuk ka asnje
metode me shume se klasa e derivuar. 0or ne rastin e kalimit poshte per te klasa e derivuar ne nuk e
dime se ciles klase se derivuar i perket k" objekt. *e shembullin tone nje rreth dihet me siguri 'e eshte
!orme gjeometrike nga e cila derivon por nje !orme gjeometrike mund te jete rreth trekendesh ose
drejtkendesh. Duhet gjetur nje men"re 'e te reali#ojme me saktesi kalimin nga klasa ba#e drejt klases se
trasheguar. :jate kohes se ek#ekutimit behet kontrolli per cdo kalim dhe n's k" kalim eshte i gabuar
atehere ju merrni nje perjashtim te tipit ClassCastE5ception.
Leksioni 14
"derfa.et
F&
Java I Sidita Duli
-jala celes interface prodhon nje klase abstrakte e cila nuk permban implementim. ,jo !jale celes
e con konceptin e klases abstrakte nje hap me tutje duke pase paras"sh !aktin 'e nje nder!a'e eshte nje
klase abstrakte e paster.
*je nder!a'e mundeson krijimin e !ormes per nje klase duke speci!ikuar emrat e metodave
listen e argumentave dhe tipet e vlerave kth"ese por nuk percakton trupin e metodes(instruksionet
brenda saj ) . *je nder!a'e gjithashtu permban !usha por keto jane te percaktuara ne men"re implicite
statike dhe !inale. E thene ndr"she nje nder!a'e percakton vetem !ormen por jo implementimin.
*je kod 'e perdor nje nder!a'e te caktuar e di se c!are metodash mund te therriten. 0er te
krijuar nje nder!a'e perdorni !jalen celes inter!ace ne vend te !jales celes class. Ju mund te lini nje
nder!a'e pa nje ku!i#im aksesimi ( me package access) ose mund ta percaktoni si nje nder!a'e publike.
0er te mundesuar 'e klasa te perdore nje nder!a'e te percaktuar perdorim !jalen celes implements. ,jo
!jale celes nenkupton kete gje.
I*der!a'ja me tregon se si nga se do perbehet klasa por tani po percaktojme se si do funksionoje kjo
klaseG.
$etodat e nder!a'es jane automatikisht publike dhe kur ju nuk i deklaroni kete gje ne men"re
implicite. ,ur ju imlementoni kete nder!a'e keto metoda duhet te percaktohen si publike sepse
automatikisht ato jane me akses vetem brenda paketes ku ndodhen. *je nder!a'e nuk eshte thjesht nje
klase tipike abstrakte. Duke mos pase implementim nuk ka memorje 'e i takon takon kesaj nder!a'eje
dhe mund te kombinojme disa nder!a'e ne nje klase. Shpesh na para'itet nevoja te themi . I *je 5 eshte
njekohesisht nje a nje b nje cG .
*je klase ba#e e cila trashegon elemente nga nga nje klase ba#e ajo mund te trashegoje
elemente vetem nga nje klase ba#e. *je klase mund te implementoje disa nder!a'e njeheresh. ,jo gje
reali#ohet duke vendosur emrin e klases !jelen celes implements dhe ndajme me presje emrat e
nder!a'eve 'e implementon kjo klase.
Shembull
interface ?anZight {
void fight(&
'
interface ?anS5im {
void s5im(&
'
interface ?anZl! {
void fl!(&
'
class ;ction?haracter {
public void fight( {
S!stem"out"println(#;ction?haracter"fight(#&
'
'
class /ero e8tends ;ction?haracter
implements ?anZight2 ?anS5im2 ?anZl! {
public void s5im( {
S!stem"out"println(#/ero"s5im(#&'
public void fl!( {
S!stem"out"println(#/ero"fl!(#&'
'
'
KQ
Java I Sidita Duli
public class ;dventure {
public static void t(?anZight 8 {
S!stem"out"println(#t(?anZight#&
8"fight(&
'
public static void u(?anS5im 8 {
S!stem"out"println(#u(?anS5im#&
8"s5im(&
'
public static void v(?anZl! 8 {
S!stem"out"println(#v(?anZl!#&
8"fl!(&
'
public static void 5(;ction?haracter 8 {
S!stem"out"println(#5(;ction?haracter#&
8"fight(&
'
public static void main(String[] args {
/ero h 7 ne5 /ero(&
t(h& // Ura$tohet si ?anZight
u(h& // Ura$tohet si ?anS5im
v(h& // tra$tohet si ?anZl!
5(h& // Ura$tohet si ;ction?haracter
'
Secila prej ket"re nder!a'eve eshte e panvarur nga njera+tjetra dhe disa nder!a'e te tilla prodhojne nje
klase konkrete. ,a d" ars"e 'e na sht"jne te perdorim nder!a'et dhe klasat 'e i implementojne ato.
%. *e mund te derivojme klasa nga me shume se nje tip ba#e. ,eto nder!a'e 'e implementohen
jane tipe ba#e nga te cilat derivon klasa ba#e.
/. Duke perdore nder!a'et ne parandalojme nder"shimin 'e mund ti behet klases gje 'e
mundesohej dhe nga klasat abstrakte.
Shtrohet p"etja nese duhet te perdorim nje klase abstrakte apo nje nder!a'e\ *je nder!a'e
perban avanta#het e veta plus avanta#het e klasave abstrakte. ,eshtu kur te para'itet mundesia per te
krijuar nje klase ba#e pa ndonje impelmentim metode atehere eshte me mire te perku!i#oni kete klase si
nje nder!a'e sesa nje klase abstrakte.
Ju mund te perdorni tekniken e trashegimise dhe mes d" nder!a'eve ku nje nder!a'e shton nje
deklarim te nje metode te re pervec atr"re metoda 'e trashegon. Duke perdore trashegimine ju mund
te kombinoni disa nder!a'e ne nje nder!a'e te vetme. Cdo !ushe 'e ju vendosni ne nje nder!a'e eshte
automatikisht !inale dhe statike. 0er kete nje nder!a'e vlen dhe per te grupuar vlera konstante. -ushat e
percaktuara ne nder!a'e jane automatikisht statike dhe !inale. -inalet nuk mund te jene !inale boshe( te
painiciali#uara) por mund te iniciali#ohen me nje shprehje jo+konstante.
Sic kemi thene keto !usha statike iniciali#ohen ne momentin kur ngarkohet klasa. *je nder!a'e
mund te jete edhe e nder!utur brenda nje klase ose brenda nje nder!a'eje tjeter. ,eto nder!a'e mund
te kene akses publik ose brenda paketes. ,ur ju implementoni nje nder!a'e ju nuk jeni te det"ruar te
implementoni cdo nder!a'e te nder!utur brenda saj. *der!a'et private nuk mund te implementohen
jashte klases kur eshte percaktuar.
K%
Java I Sidita Duli
Klasat e #rendshme
Eshte e mundur te percaktoni nje klase brenda nje klase tjeter. *je klase e tille 'uhet klase e
brendshme (inner class). ,eto klasa ju mundesojne te gruponi klasat 'e logjikisht i perkasin njera +tjetres
dhe mund te aksesoni elementet e nje klase brenda tjetres. *'s doni te krijoni nje objekt te klases se
brendshme ju duhet te speci!ikoni tipin e objektit si "mriKlasesSe#ashtme."mriKlases$rendshme
*e metodat jo+statike ju nuk keni nevoje te beni kete speci!ikim. ,ur ju krijoni nje klase te
brendshme nje objekt i kesaj klase ka nje lidhje me objektin me te cilin u krijua dhe mund te aksesoje
elementet e ketij objekti. *e kete men"re klasat e brendshme mund te kene akses ne te gjithe elementet
e klasave te cilave iu perkasin. *'s nuk doni te ndertoni nje lidhje mes objektit te klases se brendshme
dhe klases se jashtme atehere ju mund te beni kete klase te brendshme si klase statike. $abni mend 'e
objektet e klasave t"e brendshme mbajne re!erense per objektin e klasave te jashtme.
*je klase e nder!utur do thote.
%. *uk ka nevoje per nje objekt te klases se jashtme per ta krijuar objektin e klases se nder!utur.
/. *uk mund te aksesohet nje objekt i klases se jashtme jostatike prej nje objekti te klases se
nder!utur.
*e me te drejte mund te shtrojme p"etjen. pse perdorim klasat e brendshme cilat jane rastet e
perdorimit te t"re\ ,lasat e brendshme trashegojne emente prej nje klase tjeter ose implementojne nje
nder!a'e. ,odi i klasave te brendshme manipulon objektin e klasave te jashtme brenda te cilit u krijua. Ju
mund te shihni klasat e brendshme si nje lloj dritareje 'e te lidh me klasat e jashtme. *e kete moment
'endron dhe p"etja. n's dua te marr nje re!erense per nje nder!a'e pse nuk e reali#oj kete me ane te
klases se jashtme. 0ergjigja eshte. n's nuk ke nevoje per klasen e brendshme atehere mos e perdor. 0o
atehere c!are e dallon implementimin te nje nder!a'eje nga klasa e brendshme nga implementimi i kesaj
nder!a'eje nga klasa e jashtme\ ,lasat e brendshme mund te trashegojne ne men"re te panvarur
elemente nga disa klasa abstrakte ose joabstrakte. *je kendveshtrim per klasat e brendshme eshte si
mundesi per #gjidhjen e problemit te trashegimise te shume!ishte. *de!a'et #gjidhnin pjeserisht kete
problem por klasat e brendshme ne !akt lejojne trashegimine e shume implementimeve. ,lasat e
brendshme ju lejojne te trashegoni elemente nga me shume se nje Rjo+nder!a'eP.
K/