Z´aklady programovan´ı 3 (Java) Petr Krajˇca Katedra informatiky Univerzita Palack´ eho v Olomouci
2. ˇr´ıjen, 2013
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
1 / 21
Organizaˇcn´ı informace email:
[email protected] konzultaˇcn´ı hodiny stˇreda 17:00 – 18:00, ˇctvrtek 13:30 – 14:30 v pˇr´ıpadˇe m´e nepˇr´ıtomnosti pˇres email
www: http://phoenix.inf.upol.cz/~krajca/
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
2 / 21
Z´apoˇcet vyˇreˇsit vˇsechny u ´koly zadan´e na cviˇcen´ı a nejpozdˇ eji do jednoho t´ ydne je poslat na email
[email protected] s pˇredmˇetem ZP3JV v od˚ uvodnˇen´ych pˇr´ıpadech je moˇzn´e (emailem) poˇz´adat o prodlouˇzen´ı term´ınu pozdn´ı odevzd´an´ı bez omluvy je ch´ap´ano jako neodevzd´an´ı u ´kolu
implementovat netrivi´aln´ı projekt v jazyce Java (lze pouˇz´ıt i roˇcn´ıkov´y projekt) projekt by mˇel b´yt skuteˇcnˇe pouˇzitelnou aplikac´ı projekt by mˇel pokr´yvat uˇcivo probran´e v dan´em semestru
u ´ˇcast na semin´aˇr´ıch nen´ı nutn´a, ale je silnˇe doporuˇcovan´a
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
3 / 21
Upozornˇen´ı plagi´ atorstv´ı, vyd´ av´ an´ı ciz´ıch v´ ysledk˚ u za vlastn´ı je zak´ azano a bude ˇreˇseno dle vnitˇrn´ıch pˇredpis˚ u UP odevzd´ an´ı dvou identick´ ych prac´ı je povaˇ zov´ ano za plagi´ atorstv´ı bez ohledu na to, ˇ ze se liˇs´ı form´ atov´ an´ım nebo n´ azvy promˇ enn´ ych pokud nˇeˇcemu nerozum´ıte, zeptejte se na semin´aˇri nebo vyuˇzijte konzultaˇcn´ıch hodin!
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
4 / 21
Upozornˇen´ı plagi´ atorstv´ı, vyd´ av´ an´ı ciz´ıch v´ ysledk˚ u za vlastn´ı je zak´ azano a bude ˇreˇseno dle vnitˇrn´ıch pˇredpis˚ u UP odevzd´ an´ı dvou identick´ ych prac´ı je povaˇ zov´ ano za plagi´ atorstv´ı bez ohledu na to, ˇ ze se liˇs´ı form´ atov´ an´ım nebo n´ azvy promˇ enn´ ych pokud nˇeˇcemu nerozum´ıte, zeptejte se na semin´aˇri nebo vyuˇzijte konzultaˇcn´ıch hodin!
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
4 / 21
Obsah pˇredmˇetu 1
´ Uvod, datov´e typy, promˇenn´e, ˇr´ıd´ıc´ı struktury
2
Tˇr´ıdy, objekty, rozhran´ı
3
Pole a seznamy
4
Kolekce a generick´e typy
5
Kolekce, v´yˇctov´e typy, pr´ace s ˇretezci
6
Vyj´ımky, dokumentace
7
Vstupy a v´ystupy
8
Vnoˇren´e a anonymn´ı tˇr´ıdy
9
Vl´akna
10
Bal´ıˇcky, sestaven´ı komplexn´ıho programu
11
Testov´an´ı (JUnit)
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
5 / 21
Literatura SUN. Java Tutorial. 2010. Eckel B. Mysl´ıme v jazyce Java - pˇr´ıruˇcka program´atora. Grada Publishing, 2000. Bloch J. Java efektivnˇe 57 z´asad softwarov´eho experta. Grada Publishing. Lewis J., Loftus W. Java Software Solutions, Foundations of Program Design. Addison Wesley Longman Ltd., 2000. Gosling J., Joy B., Steele G., and Bracha G. The Java Language Specification, Third Edition. Herout P. Uˇcebnice jazyka Java. Kopp, 2000. Kiszka B. 1001 tip˚ u a trik˚ u pro programov´an´ı v jazyce Java. Computer Press, 2003.
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
6 / 21
Java jako programovac´ı jazyk objektovˇe orientovan´y jazyk (dˇediˇcnost s jedn´ım rodiˇcem) syntax´ı podobn´y C/C++ (nen´ı to C/C++!) portabilita (Write-Once-Run-Anywhere) snaha o omezen´ı chyb automatick´a spr´ava pamˇeti silnˇe a staticky typov´y jazyk (nen´ı to CommonLisp!) omezen´ı dostupn´ych prvk˚ u jazyka na ty bezpeˇcn´e syst´em vyj´ımek kontrola mez´ı pol´ı Dalˇs´ı vlastnosti nˇekolik nez´avisl´ych implementac´ı (Oracle/SUN, IBM, IcedTea, GCJ, Harmony) rozs´ahl´a standardn´ı knihovna, ˇrada API mnoˇzstv´ı dostupn´ych knihoven a n´astroj˚ u tˇret´ıch stran (Apache Foundation) Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
7 / 21
Java jako platforma Infrastruktura Java Development Kit (JDK): pˇrekladaˇc, knihovny + souvisej´ıc´ı n´astroje Java Virtual Machine (JVM): vykon´av´a k´ od vygenerovan´y pˇrekladaˇcem (Java Byte Code) Java Runtime Environment (JRE): bˇehov´e prostˇred´ı (JVM, knihovny, atd.) Java Applety – propojen´ı JRE s prohl´ıˇzeˇcem JavaScript – v˚ ubec nesouvis´ı s Javou s JDK/JRE: lze provozovat dalˇs´ı jazyky, napˇr. Scala, Groovy, Clojure, Jython, JRuby Edice Java ME – mobiln´ı zaˇr´ızen´ı (definuje ˇradu omezen´ı) Java SE – nejˇcastˇeji pouˇz´ıvan´a Java EE – jako SE + knihovny a rozhran´ı Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
8 / 21
Historick´y pˇrehled 1990 – p˚ uvodnˇe vyv´ıjeno SUN Microsystems jako projekt OAK 1996 – JDK 1.0 (prvn´ı verze) 1997 – JDK 1.1 1998 – J2SE 1.2 (JIT pˇreklad, kolekce) =⇒ Java2 (J2SE) 2000 – J2SE 1.3 (HotSpot JIT pˇrekladaˇc) 2002 – J2SE 1.4 (ˇrada nov´ych API) 2005 – J2SE 5.0 (ˇrada rozˇs´ıˇren´ı – generick´e typy, metadata, for-each, atd.) 2006 – Java SE 6 (nov´e API, vylepˇsen´ı JVM) 2010 – SUN je koupen Oraclem 2011 – Java SE 7 (m´ırn´e u ´pravy jazyka, rozˇs´ıˇren´e API) (bˇrezen) 2014 – Java SE 8
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
9 / 21
IDE Eclipse Netbeans IntelliJ IDEA propriet´arn´ı: JBuilder, JDeveloper, XCode, ... ve v´yuce je moˇzn´e pouˇz´ıvat libovoln´e IDE pouˇz´ıv´an´ı IDE nebude souˇc´ast´ı v´yuky seznamte se s IDE a vyuˇz´ıvejte jeho moˇznost´ı generov´an´ı k´ odu form´atov´an´ı k´ odu refactoring (pˇrejmenov´an´ı promˇenn´ych, metod, tˇr´ıd) n´apovˇeda
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
10 / 21
Konvence d˚ uraz na ˇcitelnost k´odu (konvence vynucen´e standardem, zabˇehl´a praxe, n´avrhov´e vzory) kaˇzd´a veˇrejn´a tˇr´ıda v samostatn´em souboru, rozdˇelen´ı bal´ıˇck˚ u do adres´aˇr˚ u (poˇzadavek jazyka) projekt m´a typicky tˇri podadres´aˇre (src/, bin/ lib/) zauˇz´ıvan´y coding style: class NazevTridy { } int lokalniPromenna = 1; int a = b + (x / 2); void metodaFoo(Object object) {
v´ıce zde: http://www.oracle.com/technetwork/java/codeconv-138413.html odevzd´ avan´ e pr´ ace mus´ı b´ yt form´ atov´ any podle dan´ ych konvenc´ı, jinak budou vr´ aceny k dopracov´ an´ı (s form´ atov´ an´ım v´ am pom˚ uˇ ze IDE) Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
11 / 21
Z´akladn´ı datov´e typy (1/2) Primitivn´ı datov´ e typy (hodnotov´ e) ˇc´ısla: byte, short, int, long (velikost 1, 2, 4, 8 byt˚ u); neexistuj´ı unsigned varianty ˇc´ısla s plovouc´ı ˇr´adovou ˇc´arkou: float, double (4, 8 byt˚ u; jednoduch´a/dvojit´a pˇresnost) pravdivostn´ı hodnoty: boolean (m˚ uˇze m´ıt hodnoty true, false) znaky: char (pole znak˚ u 6= ˇretˇezec!, char 6= byte) implicitn´ı inicializace (pˇrekladaˇc m˚ uˇze neinicializaci oznaˇcit za chybu) oper´atory jako v C: +, -, *, /, +=, -, ..., ++, --, &, | ==, !=, >, <, <=, && , || Ostatn´ı datov´ e typy (referenˇ cn´ı) neexistuj´ı ukazatele pole (indexov´any od 0, kontrola hranic) ˇretˇezce (nemˇeniteln´e), spojen´ı ˇretˇezc˚ u oper´atorem + =⇒ novˇe alokovan´y ˇretˇezec objekty Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
12 / 21
Z´akladn´ı datov´e typy (2/2) byte a = 1; int b = 42 + 2; char c = ’a’; boolean d = true; float f = 12; int[] e = new int[3]; e[0] = 1; String s = "Foo"; StringBuilder stringBuilder = new StringBuilder("Foo");
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
13 / 21
Obligatn´ı Hello World package cz.upol.lecture01; public class Lecture01 { public static void main(String[] args) { System.out.println("Hello World!"); } } Pˇreklad zdrojov´y soubor Lecture01.java (n´azev mus´ı odpov´ıdat n´azvu tˇr´ıdy) mus´ı b´yt v adres´aˇri cz/upol/lecture01 (adres´aˇr odpov´ıd´a package) pˇreklad do Lecture01.class (tˇr´ıda pˇreloˇzen´a do JBC)
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
14 / 21
Vˇetven´ı programu (1/4) t´emˇeˇr identick´e jako v C blok { prikaz_1; prikaz_2; ... } if if podminka1 prikaz_1; if podminka2 prikaz_2; else prikaz_3;
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
15 / 21
Vˇetven´ı programu (2/4) int a = 2; int b; if (a == 42) { System.out.println("Promenna ’a’ obsahuje tajemstvi vesmiru!"); } if (a == 42) b = 10; else b = a + 1; b = (a == 42) ? 10 : a + 1; if (a) b = 10; // NEJDE!!!
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
16 / 21
Vˇetven´ı programu (3/4) switch switch (celoˇ c´ ıseln´ y_v´ yraz){ case konstanta_1: pˇ r´ ıkazy_1 break; ... case konstanta_N: pˇ r´ ıkazy_N break; default: pˇ r´ ıkazy_default_vˇ etve } od Java 7 lze pouˇz´ıt i ˇretˇezce
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
17 / 21
Vˇetven´ı programu (4/4) int month = 8; String monthString; switch (month) { case 1: monthString = "January"; case 2: monthString = "February"; case 3: monthString = "March"; case 4: monthString = "April"; case 5: monthString = "May"; case 6: monthString = "June"; case 7: monthString = "July"; case 8: monthString = "August"; case 9: monthString = "September"; //... case 12: monthString = "December"; default: monthString = "Invalid month"; } System.out.println(monthString); Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
break; break; break; break; break; break; break; break; break; break; break;
2.10.2013
18 / 21
Cykly (1/2) for for (inicializace; podm´ ınka; inkrementace) { pˇ r´ ıkazy } while (podm´ ınka) { pˇ r´ ıkazy } do { pˇ r´ ıkazy } while (podm´ ınka); cyklus jde pˇreruˇsit pˇr´ıkazem break, popˇr. pˇreskoˇcit na zaˇc´atek smyˇcky pˇr´ıkazem continue Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
19 / 21
Cykly (2/2) for for(int i = 0; i < 10; i++){ System.out.println("Hodnota ’i’: " + i); } int i = 0; while (i < 10) { System.out.println("Hodnota ’i’: " + i); i++; } int i = 0; do { System.out.println("Hodnota ’i’: " + i); i++; } while (i < 10); Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
20 / 21
Podrobnˇeji rozebran´a problematika
http://download.oracle.com/javase/tutorial/java/nutsandbolts/index.html
Petr Krajˇ ca (UP)
KMI/ZP3JV: Semin´ aˇr I.
2.10.2013
21 / 21