Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 1/26
Iterátory Úvod do programovacích jazyků (Java), 12 Iterátor umožňuje procházet prvky datové struktury, java.util.iterator: public interface I t e r a t o r boolean hasnext ( ) ; Object next ( ) ; void remove ( ) ; / / v o l i t e l n e C o l l e c t i o n c = new A r r a y L i s t ( ) ;... / / napln kolekce for ( I t e r a t o r i = c. i t e r a t o r ( ) ; i. hasnext ( ) ; ) Object o = i. next ( ) ;... / / zpracuj prvek c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 2/26
Generické typy L i s t i n t L i s t = new L i n k e d L i s t ( ) ; i n t L i s t. add (new I n t e g e r ( 3 4 ) ) ; I n t e g e r x = ( I n t e g e r ) i n t L i s t. i t e r a t o r ( ). next ( ) ; i n t value = x. i n t V a l u e ( ) ; Porovnej s L i s t < Integer > i n t L i s t = new L i n kedlist < Integer > ( ) ; i n t L i s t. add (new I n t e g e r ( 3 4 ) ) ; I n t e g e r x = i n t L i s t. i t e r a t o r ( ). next ( ) ; i n t value = x. i n t V a l u e ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 3/26
Generické typy definice public interface L i s t <E> void add (E x ) ; I t e r a t o r <E> i t e r a t o r ( ) ; public interface I t e r a t o r <E> E next ( ) ; boolean hasnext ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 4/26
Třída bez instance Definice třídy pro kterou není možné vytvořit instanci: Třída je deklarována jako final. Deklarujeme konstruktor bez argumentů a označíme jej jako private. Další konstruktor nedefinujeme. Taková třída obyčejně obsahuje třídní metody a proměnné, např. java.lang.math: public f i n a l class Math private Math ( )... / / t r i d n i promenne a metody c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 5/26
Garbage Collector Pokud garbage collector detekuje pamět, která již není používána (např. instance třídy na kterou byl ztracen ukazatel), nejprve volá metodu finalize() a poté je pamět vrácena. Metodu finalize() můžeme tedy využít pro určité akce, které chceme provést před jeho zničením. O tyto akce se musí postarat programátor, Java nezná pojem destruktor. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 6/26
Ukončení programu Program je ukončen, pokud je ukončena metoda main(). Ve skutečnosti je program ukončen, pokud jsou ukončena všechna vlákna. Pro ukončení programu můžeme použít metodu exit() třídy java.lang.system. Argumentem metody je návratový kód aplikace. Je zvykem vrátit nenulovou hodnotu v případě chyby. System. e x i t ( 0 ) ; System. e x i t ( 1 ) ; / / nastala chyba c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 7/26
Vehnízděná třída (Nested class) 1/4 Vehnízděná třída je třída definována jako člen jiné třídy. class EnclosingClass... class NestedClass... c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 8/26
Vehnízděná třída 2/4 Vehnízděná třída má neomezený přístup ke členům nadřazené třídy, dokonce i když jsou deklarovány jako private. Třída by měla být definována v jiné třídě, pokud dává smysl pouze v kontextu nadřazené třídy nebo pokud je vázána na funkcionalitu nadřazené třídy. Vehnízděná třída může být statická. Nestatická vehnízděná třída se nazývá inner class. Anonymní vehnizděná třída používá se např. v GUI jako adapter. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 9/26
Vehnízděná třída 3/4 public class Container1 private Object [ ] items ;... public I t e r a t o r i t e r a t o r ( ) return new C o n t a i n e r I t e r a t o r ( ) ; class C o n t a i n e r I t e r a t o r implements I t e r a t o r i n t index = 0 ; public boolean hasnext ( ) return index < items. l e n g t h ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 10/26
Vehnízděná třída 4/4 public Object next ( ) i f (! hasnext ( ) ) throw new NoSuchElementException ( ) ; return items [ index + + ] ;... c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 11/26
, Counter 1/12 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 12/26
Counter, CounterType.java 2/12 public interface CounterType public void increment ( ) ; public void decrement ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 13/26
Counter, Counter.java 3/12 import java. u t i l. ; public class Counter extends Observable implements CounterType private i n t mvalue = 0 ; public Counter ( Observer o ) addobserver ( o ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 14/26
Counter, Counter.java 4/12 public void setvalue ( i n t value ) this. mvalue = value ; setchanged ( ) ; notifyobservers (new I n t e g e r ( mvalue ) ) ; public i n t getvalue ( ) return mvalue ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 15/26
Counter, Counter.java 5/12 public void increment ( ) setvalue ( getvalue ( ) + 1 ) ; public void decrement ( ) setvalue ( getvalue ( ) 1 ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 16/26
Counter, CounterGUI.java 6/12 import javax. swing. ; import java. awt. ; import java. awt. event. ; import java. u t i l. ; public class CounterGUI extends JFrame implements Observer, A c t i o n L i s t e n e r protected JButton mbtninc = new JButton ( " Increment " ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 17/26
Counter, CounterGUI.java 7/12 protected JButton mbtndec = new JButton ( " Decrement " ) ; protected JLabel mlbllabel = new JLabel ( " Counter Value " ) ; protected J T e x t F i e l d mtfvalue = new J T e x t F i e l d ( " 0 " ) ; protected CounterType mcounter = new Counter ( this ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 18/26
Counter, CounterGUI.java 8/12 public CounterGUI ( ) setlayout (new BorderLayout ( 1 5, 1 5 ) ) ; s e t T i t l e ( " Counter " ) ; JPanel north = new JPanel ( ) ; north. setlayout (new BorderLayout ( ) ) ; north. add ( BorderLayout.NORTH, mlbllabel ) ; north. add ( BorderLayout.SOUTH, mtfvalue ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 19/26
Counter, CounterGUI.java 9/12 JPanel south = new JPanel ( ) ; south. setlayout (new GridLayout ( 1, 2, 1 5, 1 5 ) ) ; south. add ( mbtninc ) ; south. add ( mbtndec ) ; getcontentpane ( ). add ( BorderLayout.NORTH, north ) ; getcontentpane ( ). add ( BorderLayout. SOUTH, south ) ; pack ( ) ; mbtninc. addactionlistener ( this ) ; mbtndec. addactionlistener ( this ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 20/26
Counter, CounterGUI.java 10/12 public void actionperformed ( ActionEvent e ) i f ( e. getsource ( ) = = mbtninc ) mcounter. increment ( ) ; else i f ( e. getsource ( ) = = mbtndec ) mcounter. decrement ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 21/26
Counter, CounterGUI.java 11/12 public void update ( Observable c, Object arg ) mtfvalue. settext ( arg. t o S t r i n g ( ) ) ; public s t a t i c void main ( S t r i n g [ ] args ) new CounterGUI ( ). s e t V i s i b l e ( true ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 22/26
, Counter 12/12 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 23/26
GUI, Adapter public class CounterGUI extends JFrame implements Observer... public CounterGUI ( )... mbtninc. addactionlistener (new A c t i o n L i s t e n e r ( ) public void actionperformed ( ActionEvent e ) mcounter. increment ( ) ; ) ;... c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 24/26
Úvod do programovacích jazyků (Java), 12 Aplikace spouštěné ve webovém prohlížeči. Prace s GUI appletu je podobná jako práce s GUI desktopové aplikaci: public class CounterApplet extends JApplet implements MouseListener... V appletu nemůžeme použít některé třídy z Java API (bezpečnostní omezení). c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 25/26
Další Java technologie Vlákna. Serializace objektů. Datová vrstva: JDBC. Locales. XML technologie: SAX a DOM parser. Distribuované aplikace: RMI, CORBA. Webové aplikace: J2EE Servlet, JSP. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 26/26