OTVORENO RA^UNARSTVO
JAVA
MARIO @AGAR
Otvoreno računarstvo
Otvoreno računarstvoJavao Svijet Javeo Osnove jezika Java
o Paketi, Core Java Classes, Iznimke, Sučeljao Prilozi
o Svojstva, Kolekcije, JNI, JAR, Višenitnost, Grafika, Mario Žagar
Svijet Jave
Otvoreno računarstvo - Java4
Predgovor - kojim putem dalje?
Otvoreno računarstvo - Java5
Svijet Jave - ZAŠTO?o Dinamičan razvoj (računarstvo se razvija “prebrzo”)o Manjak znalacao OTVORENO RAČUNARSTVO
o prenosivo sklopovlje o prenosiva programska podrška (programi, alati)o prenosivi ljudi, znalci
Otvoreno računarstvo - Java6
Svijet Jave - ŠTO? - filozofija (I)o Stvoriti prenosivi kôdo Izvođenje na svim platformama od najmanje do
najveće o JVM (Java Virtual Machine)o Java Platform - ME (Micro Edition), SE (Standard
Edition), EE (Enterprise Edition)o Objediniti prošlost, sadašnjost i budućnost
o C, C++, Javao Omogućiti nadogradnju, modularnost
o JavaBeans, …
Otvoreno računarstvo - Java7
Svijet Jave - ŠTO? - filozofija (II)o Totalno umrežavanje
o paralelizam, udaljeni kôd, objektio Objektni pristup
o varijable i postupci zajednoo Lokalni i globalni programi
o aplikacije i appletio Svi frontovi
o programska podrška (Java, JavaOS, real-time Java)o sklopovlje (picoJava)o integracija u postojeća rješenja (JVM)
Otvoreno računarstvo - Java8
Svijet Jave - KAKO? - metodologijao Koristi se općeniti kôd
o bytecodeo Nadogradnja na jezik Co Objektni pristup
o jednostruko nasljeđivanjeo Mrežni pristup
o pomoć WWW-ao Svaki preglednik JVM (Java Virtual Machine)o Arhitektura (trorazinska) picoJave
Otvoreno računarstvo - Java9
Svijet Jave - ČIME? - tehnologijao Nova generacija čipova - picoJava?o Prilagodba postojećih procesorao JVMo Pametne kartice, mobilni aparatio Skaliranje API-jao Jezik Java, JavaBeans, aplikacije, appleti, servleti,
midleti, agleti,...o Java JINI - koncept - svaki uređaj ima dvije žice
Otvoreno računarstvo - Java10
Neki uređivač teksta (vi,...)
javac
java
JVM + okolina
Svijet jave - JVM (I)
Bytecode(*.class)
Java(*.java)
Strojni kod
Prevoditelj za javu(javac) JVM
Prevođenje Izvođenje
Otvoreno računarstvo - Java11
Svijet Jave - JVM (II) Datoteke*.class
Izvodbena okolina (runtime)
Dobavljeni kôd
Tumač bytecodea
pozivisustava
syst. call .dllJVM
Otvoreno računarstvo - Java12
Izvođenje kod korisnika - Appleti, Midleti
Izvorni kôd u Javi
Prevoditelj za Javu
bytecode loader
Provjera bytecodea
Tumač bytecodea
Javin bytecode
Mreža
Izvodbena okolina
Prevoditelj «just-in-time»
Sklopovlje
Osnove jezika Java
Otvoreno računarstvo - Java14
Operatorio Slični operatorima jezika Co Bolje definiran redoslijed evaluacijao Evaluacija s lijeva na desnoo Asocijativnost ( 6*4%3 )o >> aritmetički posmak (predznak se širi)
o u jeziku C nekad 1111... ili 000..o >>> shift right and zero fill
o nepotreban u jeziku C
Otvoreno računarstvo - Java15
Osnovni tipovi podataka (I)o boolean
o 1 bit (false, true)o char
o 16-bitovni, Unicode (UTF-16, UTF-8), modified UTF-8o byte
o 8-bitovni, dvojni komplement (-128, +127)o short
o 16-bitovni, dvojni komplement (-32768, 32767)o int
o 32-bitovni, dvojni komplement (-2147483648, 2147483647)o long
o 64-bitovni, dvojni komplement (-9223372036854775808, 9223372036854775807)
264= Bubbabyte
Otvoreno računarstvo - Java16
Osnovni tipovi podataka (II) o float
o 32-bitovni, IEEE-754 (single precision)o -3.4E38, +3.4E38, 6 -7 točnih znamenaka (ovisi o broju)
o double o 64-bitovni , IEEE-754 (double precision)
o -1.7E308, +1.7E308, 14 -15 točnih znamenaka
(kažu da je broj protona u vidljivom dijelu svemira - oko 1078)
o int i ;o literali \b, \t, \n, \r, \\, ...\uxxxx (\u2bf3)o za objekte treba više:
o Voće jabuka;o pokazivači implicitni u Javi
o Voće jabuka = new Voće();
Otvoreno računarstvo - Java17
Java, što je što (I)o razred
o se sastoji iz polja (fields, members)o polja
o su podaci i metode (data members, methods)o ugrađeni tipovi podataka
o char, int, boolean, ..... o složeni tipovi podataka
o razred - Auto, Voće, GeometrijskiLik,....
Otvoreno računarstvo - Java18
Java, što je što (II)o objekt
o instanca razreda o referentna varijabla
o pokazivač na objekt (mojGolf)o metoda konstruktor
o new stvara objekt i poziva konstruktor koji inicijalizira objekt (Auto mojGolf = new Auto();)
o poziv metode o mojGolf.potrošnja();
o nema destruktora o automatski - garbage collection
Otvoreno računarstvo - Java19
Komponente jezika Java (I)o Elementi jezikao Razredi, stvaranje objekatao Jednostruko nasljeđivanje razreda
o stablo nasljeđivanja aplikacije definirano hijerarhijom nasljeđivanja klasa, korijen je klasa java.lang.Object
o Pod-razredio public class MojOkvir extends java.awt.Frame { ... }
o Višestruko nasljeđivanje moguće kod sučeljao Razredi implementiraju sučeljao Čvrsta provjera “Strongly checked type”
o statički i dinamički o Zaštita pristupa za razrede, podatke i metode
Otvoreno računarstvo - Java20
Komponente jezika Java (II)o Kontrolne strukture ANSI C-a
o polja(arrays) i nizovi(strings) su objektio Nema pristupa memorijskim adresama
o niti C/C++ pointer aritmetike o Memoriju oslobađa sakupljač smeća
o garbage collector o Podrška iznimkama
o exceptionso Podrška nitima i kontroli paralelnog izvođenja
unutar objekta
Otvoreno računarstvo - Java21
Modifikatori razredaModifikator class ime.......o abstract
o mora biti proširena prije uporabeo final
o ne može se proširivatio public
o razred vidljiv drugim paketima
o abstract public class Voće {...o final public class Limun extends Voće {...
Otvoreno računarstvo - Java22
Modifikatori varijabli - vidljivost o public
o varijabla vidljiva svima (razred mora biti također public) o prazno
o varijabla vidljiva unutar paketao protected
o kao prazno ali varijabla vidljiva u pod-razredima u drugim paketima proširenim iz ovog razreda
o privateo varijabla vidljiva samo u ovom razredu
Otvoreno računarstvo - Java23
Modifikatori varijabli - način korištenjao static
o jedna varijabla za razred (ne za svaki objekt)
o final o ne mijenja vrijednost (konstanta)
o transient o za budućnost
o volatileo više izvora može mijenjati vrijednost, prilikom
izvođenja potrebno osvježiti sadržaj prije čitanja
o protected static final int br_karata = 32;
Otvoreno računarstvo - Java24
Modifikatori metoda - vidljivost o public
o metoda vidljiva od svakud
o “prazno” o isto kao i za varijable
o protected o isto kao i za varijable
o private o vidljiva unutar razreda, ne može biti i abstract
Otvoreno računarstvo - Java25
Modifikatori metoda - način korištenja o static
o implicitno “final”o final
o ne može biti “overriden”o abstract
o mora biti “overriden” da bude korisnao native
o nije pisana u Javi (nema tijelo već će ono biti napisano u nekom drugom jeziku)
o synchronized o samo jedna nit može izvoditi metodu u jedinici
vremena, ulaz u metodu zaštićen monitorom o protected abstract int potrošnja() { .. }
Otvoreno računarstvo - Java26
Ključne riječi (keywords) IBuilt-in tipovi:o boolean, true, falseo charo byte, short, int, longo float, doubleo void
Otvoreno računarstvo - Java27
Ključne riječi (II)u izrazimao null, new, this, super
u naredbama (selekcija)o if, elseo switch, case, break, default
u naredbama (iteracije)o for, continue,o do, while
Otvoreno računarstvo - Java28
Ključne riječi (III)u naredbama (prijenos kontrole)o returno throw
u naredbama (niti i iznimke)o synchronizedo try, catch, finally
Otvoreno računarstvo - Java29
Ključne riječi (IV)promjena deklaracije (vidljivosti, namjene,..)o statico abstract, finalo private, protected, publico transient, volatile
Otvoreno računarstvo - Java30
Ključne riječi (V)namijenjene metodama i razredimao class, instanceof, throws, native
namijenjene blokovima većim od razredao extendso interface, implementso package, import
za budućnosto cast, const, future, generic, gotoo inner, operator, outer, rest, var
Otvoreno računarstvo - Java31
Java - primjero Pozdrav svima!
% vi Pozdrav.java//Primjer 1class Pozdrav{ public static void main(String args[]){ System.out.println("Pozdrav svima!"); }}% javac Pozdrav.java% java PozdravPozdrav svima!
Otvoreno računarstvo - Java32
Java - primjer*public class PentiumBug { public static void main(String args[]) { double x,y,z; x = 4195835.0; y = 3145727.0; z = x - (x / y) * y; System.out.println("Rezultat je " + z); }}
% java PentiumBugRezultat je 0.0 *1993. Intel inside - Pentium
1994-10-30 g. T. Nicely bio je nezadovoljan s dijeljenjem,ponekad, ponegdje to je 256.000000 :-)
Otvoreno računarstvo - Java33
Jezik Java - okolinao Stabilne, moćne biblioteke, paketi (packages) o Grafička sučelja za sve platforme o Jednostavna izgradnja GUI klijenatao Slike i audio o Podrška za obradu slika (filtari)o Dinamički dohvat razredao Mrežno programiranjeo Događaji (events), iznimke (exceptions),....
Otvoreno računarstvo - Java34
Java je - kao švicarski nožić:o Programski jeziko Simulacija sklopovlja, sklopovljeo Mrežno računarstvoo Aplikacije, appleti, midleti, JavaCard,... o JavaBeans, JNI, RMI, o Alati (JDK, Eclipse, NetBeans,....)
o Glavna osobina Javeo Svijet Jave (skup modula - dijelova koji se upotpunjuju)
o Dobri temelji za nadogradnju
o PRIJE SVEGA .... filozofija, metodologija!/primjeri/Uvod
Paketi
Otvoreno računarstvo - Java36
Paketi (Packages)o Paket omogućuje organizaciju razreda i sučelja u
logičnu cjelinuo Paket = skup povezanih tipova, uređuje:
o prava pristupao prostor imena
o Pod tipovima se misli na:o razredeo sučeljao pobrojenja (enumeracija)o anotacije
Otvoreno računarstvo - Java37
Paketi - prostor imenao Ako će se koristiti javno, ime razreda mora biti
jedinstvenoo Jednostavan način za osigurati jedinstvenost
o nazvati paket po vlastitoj domeni u obrnutom redoslijedu o npr. za razrede primjera s geometrijskim likovima
o hr.fer.rasip.or.primjeri.likovio puno ime razreda Citac glasilo bi
o hr.fer.rasip.or.primjeri.likovi.Citaco a nalazio bi se u kazalu
o hr/fer/rasip/or/primjeri/likovi
Otvoreno računarstvo - Java38
Paketi - kontrola pristupao Razredi u paketu zaštićeni su od pristupa izvanao Dvije razine kontrole pristupa:
o za razred o public
o razred vidljiv iz svih drugih razreda, iz bilo kojeg paketao package-private (ne navodi se)
o razred vidljiv samo unutar svojeg paketao za member varijablu
o publico package-private (ne navodi se)
o slično kao i za razrede (varijabla vidljiva ili ne izvan vlastitog paketa)o private
o varijabla vidljiva samo unutar vlastitog razredao protected
o varijabla vidljiva i podrazredima iz drugih paketa
Otvoreno računarstvo - Java39
Paketi - tablica vidljivosti
Objekt je: default public protected private
vidljiv razredima iz istog paketa da da da ne
vidljiv pod-razredima iz istog paketa da da da ne
vidljiv razredima iz drugih paketa ne da ne ne
vidljiv pod-razredima iz drugih paketa ne da ne ne
nasljeđuju ga pod-razredi istog paketa da da da ne
nasljeđuju ga pod-razredi drugih paketa ne da da ne
Otvoreno računarstvo - Java40
Paketi - korištenjeo Svi razredi predstavljaju paket
o po definiciji sve u standardni paket (ako nema imena)o U WindowsXX
o varijabla CLASSPATH .;\mojeklase;c:java\classes;...o import
o umjesto unosa cijelog imena razredao ako puno ime, prevoditelj prije gotovo uobičajeno:
o import java.awt.*; za sve razrede ilio import java.lang.Math; za pojedini razred
class MojaMatematika extends java.lang.Math
/primjeri/Paketi
Core Java Classes (CJC)
Otvoreno računarstvo - Java42
Core Java Classes (CJC) o Sastavni dio Javine okolineo Resursi sustava (razred System)
o iznimke, događaji,...o niti
o Postavljanje programskih atributao naredbeni redak za jednokratne promjene,o svojstva (properties) za trajne promjene
o Rad sa znakovima (specifičnost Jave): o poljima (Arrays), znakovnim nizovima (Strings), U/I
tokovima podataka (Input/Output Data Streams),...
Otvoreno računarstvo - Java43
Polja u Javi (I)o Polja i znakovni nizovi su osnovni razredi u Javi
o za usporedbu, u C-u kontinuirana grupa podataka s pristupom preko imena polja i relativne adrese (prvi element Ime[0])
o U C-u nema provjere granicao moguć je pristup preko pokazivačao izvor grješaka !!!
o U Javi (ako izvan granica) poruka: java.lang.ArrayOutOfBoundsException
Otvoreno računarstvo - Java44
Polja u Javi (II)o Stvaranje polja (deklaracija - tip i ime):
o int[] mojePolje; // polje cijelih brojeva
o Dodjela memorije:o mojePolje = new int[velicina];
o velicina je int dakle “samo” 232 elemenatao 2.147.483.647 //:-)
o int mojePolje = { 1, 2, 3,...};o Vrijedi:
o char[] mojePolje = new char[200]; io char mojePolje[] = new char[200];
o Pažnja:o int a[], b, c;o int[] a, b, c; // nije isto
Otvoreno računarstvo - Java45
Polja u Javi (III)o Višedimenzionalna polja:
o float mojePolje[] [] = new float [10][20];o O polju dodatne informacije kao npr:
o mojePolje.length; // duljina poljao Nije postupak (metoda) dakle ne:
o mojePolje.length(); //KRIVO!!
Otvoreno računarstvo - Java46
Znakovni nizovi u Javio Znakovni niz je objekt razreda Stringo Postoji i razred StringBuffero Dio paketa java.lango Za usporedbu u C-u je znakovni niz definiran kao
polje znakova koje završava s ‘\0’ (NULL)o Znakovi 16-bitovni zapis (Unicode)
o Konstruktor: String mojNiz = new String(“abc”);
Otvoreno računarstvo - Java47
Znakovni nizovi u Javi - Stringo Duljina:
mojNiz.length(); // razlika od poljao Zbrajanje:
String mojNiz2 = mojNiz + “cde”; // abccde (preopterećivanje operatora “+”)
o Uspoređivanje znakovnih nizova: mojNiz.equals(mojNiz2); mojNiz.equalsIgnoreCase(mojNiz2);
o Nije dobro: mojNiz == mojNiz2; // KRIVO!!
(uspoređuju se referentne varijable - pokazivači)
Otvoreno računarstvo - Java48
Znakovni nizovi u Javi - Stringo Pronalaženje znakovnih nizova:
mojNiz.indexOf(‘b’); // 2
mojNiz.indexOf(“bc”); // 2
mojNiz.lastIndexOf(‘c’); // 3o Sortiranje nizova:
mojNiz.compareTo(mojNiz2)
o Svaki objekt ima neke karakteristične postupkeo equals - usporedba jednakosti objekatao getClass() - finalni postupak, vraća razred objekta iz kojeg se pozivao toString - vraća reprezentaciju objekta u obliku znakovnog nizao ....
Otvoreno računarstvo - Java49
Znakovni nizovi - StringBuffero Objekt razreda StringBuffer
o ima svoj kapacitet, sadržaj i veličinuo sličan razredu String ali dozvoljava umetanje i
promjenu znakova, dodavanje znakova na kraj niza...
o Konstruktori:o StringBuffer mojNiz = new StringBuffer(20);o StringBuffer mojNiz = new StringBuffer(“abc cde fgh”);
o mojNiz - abc cde fgho mojNiz.length() - 11o mojNiz.capacity() - 20 // za prvi slučajo ...
Otvoreno računarstvo - Java50
Znakovni nizovi - StringBuffero ...o mojNiz.charAt(n); // n-ti znak u nizu
o mojNiz.charAt(n, ‘c’); // n-ti znak u ‘c’
o mojNiz.insert(n, “tekst”); // ubaci “tekst” nakon n-tog znaka
o mojNiz.append(“tekst”); // dodaj na kraj
o mojNiz.append(“a=“).append(5).append(“;”).toString() // a=5;
Iznimke
Otvoreno računarstvo - Java52
Iznimke (Exceptions)o Što bi se dogodilo da je kao parametar appleta iz
prošlog predavanja predan niz znakova koji se ne može protumačiti kao broj?
public class AppletDemo extends Applet{ int brojKvadratica, delay; public void init(){ setForeground (Color.green); brojKvadratica=Integer.parseInt
(getParameter("BrojKvadratica"));delay=Integer.parseInt (getParameter("Delay"));
} ...}
Otvoreno računarstvo - Java53
Iznimkeo Dogodila bi se grješka i applet bi se prestao izvoditio Iznimke u Javi omogućuju sistematsko upravljanje
grješkamao ispravan način pretvaranja parametra:
try{ brojKvadratica=Integer.parseInt(getParameter("BrojKvadratica"));}catch (NumberFormatException nfe){ brojKvadratica=100;}
o Metoda parseInt podiže instancu razreda NumberFormatException
o Izvođenje programa nastavlja se naredbama iz bloka catch
/primjeri/AppletDemo.java
Otvoreno računarstvo - Java54
Iznimkeo Što znači "podizati" iznimku?
public static int parseInt(String s, int radix) throws NumberFormatException { //... // provjera da li je niz 's' broj ili ne, ako nije: throw new NumberFormatException(s); ...}
o Upravljanje iznimkama u Javi postiže se:o blokovima try-catcho ključnim riječima throw i throwso razredom Exception i razredima koji ga nasljeđuju
o Iznimka je "običan" objekt čiji razred nasljeđuje od razreda java.lang.Exception!
java.lang.Integer
Otvoreno računarstvo - Java55
Vrste iznimakao Dvije kategorija iznimaka:
o opće (general)o izvršne (run-time)
o Opće iznimke moraju biti obrađeneo poziv metode koja podiže iznimku mora biti unutar
try-catch bloka, ilio metoda mora eksplicitno navesti da iznimku prosljeđuje
prethodnoj metodi (pozivatelju) korištenjem ključne riječi throws u retku deklaracije metode
o Izvršne (run-time) iznimke ne moraju se obrađivatio "hvatati" one za koje postoji realna šansa da se pojave
Otvoreno računarstvo - Java56
Blok try-catch-finally
try{ //... kod koji podiže iznimke} catch ( NumberFormatException e){ //...} catch (IOException e) { //...} catch (Exception e) { //...} finally { // nije obavezan //...uvijek se izvodi (nakon koda u odgovarajućem catch bloku), čak i ako nije bilo iznimke}
Sučelja
Otvoreno računarstvo - Java58
Sučelja (interfaces)o Ugovor između razreda i vanjskog svijeta
o razred koji implementira sučelje obećaje ponuditi ponašanje objavljeno tim sučeljem
o Zanima nas određena funkcionalnost, a NE način na koji je ostvarena o npr. kod kupnje auto radija zanima nas ima li
standardni (ISO) konektor, a ne električna shema)o Sučelja ne dijele hijerarhiju razreda
o više razreda može istovremeno implementirati isto sučelje, jedan razred može implementirati više sučelja
o jedno sučelje može naslijediti više sučeljao korištenje slično apstraktnim razredima
Otvoreno računarstvo - Java59
Sučeljao Sučelje se sastoji od
o konstanti i o predložaka (potpisa, praznih definicija metoda) koje
nemaju tijela (razred ih mora implementirati)o Razredi se nasljeđuju, sučelja implementiraju
class A extends B implements Co Svako sučelje u zasebnoj datotecio Namjena - podržavanje dinamičkog pronalaženja
metoda tijekom izvođenja programa
Otvoreno računarstvo - Java60
Sučeljainterface suc1{
tip varijabla1 = vrijednosta;tip varijabla2 = vrijednostb;tip metoda1 (...);tip metoda2 (...);
}
o Metoda mora biti publico Ako razred ne implementira sve metode iz sučelja,mora
biti deklariran kao abstract
abstract class A implements B {...}
/primjeri/Sucelja_primjeri
interface I{ public void pisi(int a);
} class Test implements I { public void pisi(int a){
System.out.println(a); }
}
Otvoreno računarstvo - Java61
public interface MouseListener extends EventListener {/**
* Invoked when the mouse button has been clicked (pressed * and released) on a component. */
public void mouseClicked(MouseEvent e);/** ...public void mousePressed(MouseEvent e);public void mouseReleased(MouseEvent e);public void mouseEntered(MouseEvent e);public void mouseExited(MouseEvent e);
} public class Okvir implements MouseListener{ public void mouseClicked(MouseEvent e) { if (e.getButton()==MouseEvent.BUTTON1) {...} } //...}
java.awt.event.MouseListener
Sučelja
Otvoreno računarstvo - Java62
Sučeljao Razred Okvir mora implementirati sve metode
sučelja MouseListener ili mora biti proglašen apstraktnim
o Razred u Javi:o nasljeđuje samo jedan razred
(implicitno java.lang.Object)o implementira nula ili više sučelja
o Sučelje se ne može instancirati, kao ni apstraktni razred
o Zato apstraktni razred može implementirati svoje (ne-apstraktne) metode, a sučelje ne.
Otvoreno računarstvo - Java63
Sučeljao Jednom definirano sučelje ne mijenjati!o Zašto?
o svi razredi koji ga implementiraju više se ne bi prevodili ispravno (budući da više ispravno ne implementiraju to sučelje)o rješenje = promijeniti sve razrede – ne može se baš uvijek
o Ako je potrebna dodatna funkcionalnost, sučelje se proširuje novim sučeljem, npr:
public interface MojMouseListenerextends MouseListener{
public void mouseDoubleClicked(MouseEvent e);}
Otvoreno računarstvo - Java
Pitanja?
Osobine sustava
Otvoreno računarstvo - Java66
Osobine sustava (Properties)o Okolina - stroj, kazalo, boje, font itd. su atributi
sustava (runtime atributes)o Atributi vezani uz program (veličina prozora, opcije
kod pokretanja) (preferences)o Kontrola preko
o propertieso command line argumentso applet parameters
Otvoreno računarstvo - Java67
Osobine sustava (II)o Kako iz Javine aplikacije saznati:
o na kojem operacijskom sustavu se izvodi, ilio koji VM je izvodi (1.1, 1.4 ili 1.5?), ilio korisničko kazalo?
o Prilikom izvođenja, JVM doznaje informacije o sustavu na kojem se izvodi
o Razred System čuva objekt tipa Properties (generički Javin razred za baratanje postavkama) popunjen osobinama sustava
Otvoreno računarstvo - Java68
Osobine sustava (III)o Svojstva programa
o java.util.Propertieso Parovi ime/vrijednost (objekti razreda String)
o java.lang.System, java.langRuntimeo Postupci:
o static Properties getProperties(); Properties osobineSustava = System.getProperties();
o static String getProperty(String imeSvojstva); System.getProperty("file.separator");o static void setProperties(Properties prop);
/primjeri/Properties.java
Otvoreno računarstvo - Java69
file.separator=\java.awt.graphicsenv=sun.awt.Win32GaphicsEnvironmentjava.home=C:\Program Files\Java\jre1.6.0_03java.io.tmpdir=c:\Temp\java.runtime.version=1.6.0_03-b05java.specification.name=Java Platform API Specificationjava.specification.vendor=Sun Microsystems Inc.java.specification.version=1.6...os.arch=x86os.name=Windows XPos.version=5.1path.separator=;sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium...sun.desktop=windowssun.management.compiler=HotSpot Client Compilersun.os.patch.level=Service Pack 2user.country=HRuser.dir=D:\EclipseWrkSp\Kukuuser.home=C:\Documents and Settings\korisnikuser.language=hruser.name=korisnik /Primjeri/PropList
Osobine sustava (varijable okoline)
Otvoreno računarstvo - Java70
java.util.Dateo Nadnevak i vrijemeo postupci Date(), o Date(long datum) (ms od 1970-01-01)o int getDate(), int getHours(),..... void
setSeconds(int sekunde)o System.currentTimeMillis();o String toGMTString(),o String toLocaleString();
/primjeri/Nadnevak.java
Otvoreno računarstvo - Java71
java.util.Randomo Slučajni brojevio Random() // sjeme je trenutni broj milisekundi o Random(long sjeme)o nextDouble(), nextFloat(), nextInt(), nextLong()
/primjeri/Slucajni.java
Otvoreno računarstvo - Java72
java.lang.Runtimeo Razred Runtime - interakcija sa sustavomo exec, exit, freeMemory, totalMemoryo gc - garbage collectoro itd.
Kolekcije
Otvoreno računarstvo - Java74
Skupovi objekata (Collections)o Kolekcija = objekt koji sadrži druge objekteo Kolekcija omogućuje:
o spremanje objekatao dohvat objekatao manipulaciju objektima
o Obično predstavlja podatke koji su grupirani i u stvarnom svijetuo npr. imenik je skup zapisa o kontaktima
Otvoreno računarstvo - Java75
Javin okvir kolekcijao Okvir kolekcija (collections framework)
o jedinstvena arhitektura za predstavljanje i manipulaciju skupovima objekata
o Sastoji se od:o sučelja
o predstavljaju razne kolekcije, omogućuju manipulaciju skupom objekata neovisno o implementaciji
o implementacijao implementacije sučelja, ponovno iskoristive strukture
podatakao algoritama
o algoritmi za korisne operacije nad kolekcijamao npr. sortiranje i pretraga
Otvoreno računarstvo - Java76
Prednosti okvira kolekcijao Olakšava kodiranje
o ne treba implementirati vlastite kolekcijeo Povećava kvalitetu i brzinu programa
o isprobane i optimirane standardne implementacijeo Omogućuje suradnju između nepovezanih
programskih sučeljao različita sučelja (API) komuniciraju razmjenjujući kolekcije
objekatao Olakšava učenje i primjenu novih programskih
sučeljao ako ta sučelja koriste standardne kolekcija (umjesto vlastitih),
lakše ih je shvatiti
Otvoreno računarstvo - Java77
Osnovna sučelja
o Sortirani skup je poseban slučaj skupa, koji je poseban slučaj kolekcije
o Mapa je posebna vrsta kolekcije
Collection
Set List Queue
SortedSet SortedMap
Map
Otvoreno računarstvo - Java78
Osnovna sučeljao Collection
o općeniti skup objekata, nema direktne implementacijeo Set
o kolekcija koja ne dozvoljava iste elementeo List
o uređena kolekcija – elementi se mogu indeksirati, može sadržavati iste elemente
o Queueo red, organiziran po FIFO principu
o Mapo skup parova ključ-vrijednost, o ne dozvoljava dva ista ključa: jedan ključ, jedna vrijednost
Otvoreno računarstvo - Java79
Osnovna sučeljao SortedSet
o skup (Set) u kojem su elementi poredani u uzlaznom redoslijedu
o SortedMapo mapa (Map) u kojoj su ključevi poredani u uzlaznom
redoslijedu
Otvoreno računarstvo - Java80
Generički tipovi (Generics)o U primjeru s geometrijskim likovima prolazili smo
kroz sve objekte u skupu (Vector)o Prije generičkih tipova:...Vector kontejner= new Vector();...kontejner.add(new Pravokutnik(linija));...for(int i = 0; i < kontejner.size(); i++){
povrsina=((Lik)kontejner.get(i)).izracunajPovrsinu();...
}...
/Primjeri/Likovi/Citac.java
U skup objekata dodajemo objekt tipa Lik (razred Pravokutnik
nasljeđuje razred Lik)
Skup objekata ne razlikuje tip – metoda Vector.get(i) vraća objekt
tipa java.lang.Object
java.lang.Object ne zna za metodu izracunajPovrsinu()
- potreban cast na Lik
Što ako ne znamo tip objekta pohranjenog u skupu ili pogrešno pridjelimo tip (cast)?
Otvoreno računarstvo - Java81
Generički tipovio U slučaju pogrešne dodjele tipa (cast) u
prethodnom primjeru, prevoditelj ne bi prijavio greškuo rješenje = tipizirati svaki skup objekata
o Generički tipovi postoje od Jave 5 (1.5)
Otvoreno računarstvo - Java82
Generički tipovio prethodni primjer s generičkim tipovima:
...Vector<Lik> kontejner= new Vector<Lik>();...kontejner.add(new Pravokutnik(linija));...for(int i = 0; i < kontejner.size(); i++){
povrsina=kontejner.get(i).izracunajPovrsinu();...
}...
/Primjeri/Likovi/Citac.java
Skup objekata koji može sadržavati samo objekte tipa Lik
Metoda Vector.get(i) je tipizirana i vraća objekt tipa Lik
Nema dodjele tipa ni mogućnosti grješke
Otvoreno računarstvo - Java83
Sučelje Collectiono najvažnije metode:public interface Collection<E> extends Iterable<E> { // Basic operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator<E> iterator();
...} java.util.Collection
deklaracija formalnog parametra tipa
Otvoreno računarstvo - Java84
Obilaženje elemenatao Najčešće korištena funkcionalnost kolekcije –
obilazak svih elemenatao Dva načina:
o petlja for-eacho razred Iterator
Otvoreno računarstvo - Java85
Petlja for-eacho poseban oblik for petljeo npr:class ForEach { public static void main(String[] args){ int[] brojevi = {1,2,3,4,5}; for (int broj : brojevi) { System.out.println(broj+"/5"); } }} /Primjeri/ForEach.java
1/52/53/54/55/5
o ispis:
Otvoreno računarstvo - Java86
Iteratoro Svaki skup objekata moguće je obilaziti pomoću
sučelja Iterator:public interface Collection<E> extends Iterable<E> { Iterator<E> iterator();
...}
public interface Iterator<E> { boolean hasNext(); E next(); void remove();}
java.util.Collection
java.util.Iterator
o Sučelje Iterator, osim pomicanja na sljedeći element (next()), omogućuje i provjeru da li element postoji (hasNext()) , i brisanje iz kolekcije (remove()):
Otvoreno računarstvo - Java87
Vector<Lik> kontejner= new Vector<Lik>();...kontejner.add(new Pravokutnik(linija));...for(int i = 0; i < kontejner.size(); i++){ povrsina=kontejner.get(i).izracunajPovrsinu(); ukupna+=povrsina; System.out.print(kontejner.get(i)); System.out.print(" \tpovrsina=[" + (povrsina) + "]cm^2\n");}
for(Iterator<Lik> iterator=kontejner.iterator(); iterator.hasNext();){ Lik trenutniLik=iterator.next(); povrsina=trenutniLik.izracunajPovrsinu(); ukupna+=povrsina; System.out.print(trenutniLik); System.out.print(" \tpovrsina=[" + (povrsina) + "]cm^2\n");}
/Primjeri/Likovi/Citac.java
Koristimo sučelje List za izdvajanje elemenata skupa
Ali kad bi koristili sučelje Iterator za obilaženje skupa ...
Java Native Interface (JNI)
Otvoreno računarstvo - Java89
Veza Jave i okolineo Svijet Jave - prenosivost, otvorenost
o Kako ga povezati s okolinom (sklopovljem)?o Kako pročitati "stanje linije 3 na portu 8"?o Može li JVM biti u potpunosti napisan u jeziku Java?
o Vrijedi samo za aplikacije (ne applete - sigurnost)o Narušavanje prenosivosti
o R: Java Native Interface (JNI)
NativeIO.java:class NativeIO{ public native byte readIO(int adr); public native void writeIO(int adr, byte value); static{ System.loadLibrary("native"); }}
Otvoreno računarstvo - Java90
Veza s C-om/C++-om/.... okolinomo Što ako:
o trebamo pristup sklopovlju ilio želimo koristiti postojeću biblioteku funkcija napisanu u
C/C++a i dalje želimo koristiti Javu?
o Java Native Interface (JNI) omogućuje povezivanje s vanjskim kôdom
Otvoreno računarstvo - Java91
JNIo JNI omogućuje dvosmjerno povezivanje:
o pozivanje vanjskog koda iz Java programao vanjske metode označavaju se ključnom riječi native, npr. (iz
java.lang.System): public static native long currentTimeMillis();o alatom javah generira se header datoteka (.h) koja se koristi
za pisanje C/C++ koda o C kod, zajedno s generiranim headerom, kompajlira se u
dinamičku biblioteku (.DLL)o manipulaciju Java objektima iz vanjskog koda
o JNI definira funkcije u programskom jeziku C za manipulaciju nizovima znakova, poljima, poziv metoda, pristup varijablama objekta, etc ...
Java ARchive (JAR)
Otvoreno računarstvo - Java93
JAR - Java ARchiveo Sažeta ZIP datoteka
o smanjuje količinu podataka za prijenoso Slična naredbi tar u UNIX-u
o tar -cvf ime, tar -xvf ime, tar -tvf imeo jar -cvf ime.jar ime1.class ime2.jpeg ....o jar -xvf ime.jar
o Unutar HTML-a (appleta) ARCHIVE=ime.jar
o Microsoft CAB (MSZIP) - cabinet datoteke
/primjeri/Properties.java
Višenitnost
Otvoreno računarstvo - Java95
Višenitnost (Multithreading)o Nit, dretva, thread
o osnovni kontekst izvođenja programskog kôda (lightweight process)
o Sadrži:o vlastiti stog za lokalnu pohranu podatakao vlastitu memoriju (local heap)
o Višenitnost preko o razreda Thread ilio sučelja Runnablepublic class Thread extends Object implements Runnable
o Izvodi se metoda run u runnableObject
Otvoreno računarstvo - Java96
Proceso Proces:
o program u izvođenju (heavyweight process)o ima:
o vlastiti memorijski prostoro resurse (npr. opisnike otvorenih datoteka)o jednu ili više niti
o Globalni memorijski prostor procesao dostupan svim nitima
o Svaki Javin proces ima barem jednu nito onu koja izvodi metodu main
Otvoreno računarstvo - Java97
"Istovremeno izvođenje"o Privid istovremenog izvođenja više nitio Svaka nit ima prioritet (1-10, uobičajni=5)o Različiti operacijski sustavi različito dodjeljuju
procesor nitimao Mehanizmi:
o time slicingo preemption
Otvoreno računarstvo - Java98
"Istovremeno izvođenje"o Time - slicing
o svaka nit dobije period vremena u kojem se može izvršavati, zatim sve ostale niti istog prioriteta dolaze na red (operacijski sustavi Windows)
o nit višeg prioriteta također može početi izvršavanje odmah
o Preemption o nit određenog prioriteta izvodi se dok ne završi, ili dok
nit s višim prioritetom ne postane spremna za izvođenje (Sun Solaris)
o nit višeg prioriteta "krade" procesor = preemptiono mana – ako još jedna nit istog prioriteta čeka na
procesor, neće se moći izvesti
Otvoreno računarstvo - Java99
Razred Threado Razred java.lang.Thread
o Važniji konstruktori:o Thread()o Thread(String name)
o Sav posao niti unutar metode public void run() o Metoda run() se NIKAD ne poziva izravno
o umjesto toga, poziva se start()o JVM će pozvati run()
o Pokretanje niti (dvije tehnike ostvarenja višenitnosti):o naslijediti razred java.lang.Thread i
nadjačati njegovu metodu run()o implementirati sučelje Runnable i metodu run() specificiranu
sučeljem
Otvoreno računarstvo - Java100
import java.lang.Runnable;class ProbnaDretva2 implements Runnable {
public void run() { System.out.println("Dretva[2]: Implementirala Runnable!"); }}
import java.lang.Thread;
class ProbnaDretva1 extends Thread { public void run() { System.out.println("Dretva[1]: Naslijedila Thread!"); }}
Thread i Runnable
Otvoreno računarstvo - Java101
o rezultat izvođenja:d:\src>java PokretacDretva[1]: Naslijedila Thread!Dretva[2]: Implementirala Runnable!
public class Pokretac { public static void main(String[] args) { ProbnaDretva1 dretva1 = new ProbnaDretva1(); dretva1.start();
Thread dretva2 = new Thread(new ProbnaDretva2()); dretva2.start(); }}
/primjeri/Pokretac.java
o metoda run() je pozvana?
Otvoreno računarstvo - Java102
Kritični odsječako Dio programskog kôda koji smije izvršavati samo
jedna dretvao u Javi svaki objekt može kontrolirati ulaženje u kritični
odsječak (mutex, lock)o Blok
o synchronized(objektZaSinkronizaciju) {...}o Od Jave 5.0 još više na temu višenitnosti
o u paketu java.util.concurrent postoje implementacije:o sinkronizacijskih mehanizama – semafora, barijera, brava
(lock)o kolekcija objekata sigurnih za istovremeni pristup (HashMap,
LinkedList)o bazen niti (thread pool), itd.....
Grafika
Otvoreno računarstvo - Java104
Grafikao Java
o izvodi se na Windowsima, Solarisu, Linuxuo Grafički podsustavi različitih operacijskih sustava
potpuno različiti (ne samo izgledom već i arhitekturom)o npr. Unixi i Linux koriste model klijent/server X Window
sustavo Javine grafičke aplikacije isto rade i izgledaju na
svim platformama
Otvoreno računarstvo - Java105
AWT, Swingo Abstract Window Toolkit (AWT)
o tanki sloj apstrakcije nad grafičkim komponentama OS-a na kojem se program izvodi
o koristi grafičke komponente OS-a na kojem se izvodio Swing
o od Jave 1.2o definira vlastite grafičke komponenteo u potpunosti pisan u Javi (iscrtava komponente putem
Java 2D API-a)o različiti izgledi (look&feel) aplikacijeo i dalje koristi dijelove AWT-a
/Primjeri/Swing/SwingLaF.java
Otvoreno računarstvo - Java106
SWTo Standard Widget Toolkit (SWT)
o razvio IBM, sad Eclipse Software Foundation o koristi ga Eclipse razvojno okruženjeo sličan AWT-u, također koristi grafičke komponente OS-a
na kojem se izvodio kompromis između lakoće korištenja (Swing) te brzine i
prirodnog izgleda nativnih grafičkih komponenata (AWT)