´ Uvod do programov´an´ı v jazyce Java Petr Krajˇca Katedra informatiky Univerzita Palack´ eho v Olomouci
5. ˇr´ıjen, 2011
Petr Krajˇ ca (UP)
KMI/UP3J: Semin´ aˇr I.
5.10.2011
1 / 17
Organizaˇcn´ı informace email:
[email protected] konzultaˇcn´ı hodiny u ´ter´y 15:00 – 16:00 stˇreda 15:00 – 16:00
www: http://phoenix.inf.upol.cz/~krajca/ slidy budou k dispozici online, ale ... pro udˇelen´ı z´apoˇctu je potˇreba vyˇreˇsit vˇsechny u ´koly zadan´e na cviˇcen´ı nejpozdˇeji do jednoho t´ydne od zad´an´ı implementovat netrivi´aln´ı projekt v jazyce Java (lze pouˇz´ıt i roˇcn´ıkov´y projekt)
plagi´atorstv´ı, vyd´av´an´ı ciz´ıch v´ysledk˚ u za vlastn´ı je zak´azano a bude ˇreˇseno dle vnitˇrn´ıch smˇernic UP
Petr Krajˇ ca (UP)
KMI/UP3J: Semin´ aˇr I.
5.10.2011
2 / 17
Literatura 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. SUN. Java Tutorial. 2010. 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/UP3J: Semin´ aˇr I.
5.10.2011
3 / 17
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/UP3J: Semin´ aˇr I.
5.10.2011
4 / 17
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/UP3J: Semin´ aˇr I.
5.10.2011
5 / 17
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)
Petr Krajˇ ca (UP)
KMI/UP3J: Semin´ aˇr I.
5.10.2011
6 / 17
Konvence, IDE 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) {
IDE Eclipse Netbeans IntelliJ IDEA propriet´arn´ı: JBuilder, JDeveloper, XCode, ... Petr Krajˇ ca (UP)
KMI/UP3J: Semin´ aˇr I.
5.10.2011
7 / 17
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 != ˇretˇezec!, char != 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/UP3J: Semin´ aˇr I.
5.10.2011
8 / 17
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/UP3J: Semin´ aˇr I.
5.10.2011
9 / 17
Obligatn´ı Hello World package cz.upol.lecture01; public class Lecture01 { public static void main(String[] args) { System.out.println("Hello World!"); } }
Petr Krajˇ ca (UP)
KMI/UP3J: Semin´ aˇr I.
5.10.2011
10 / 17
Vˇetven´ı programu (1/X) 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/UP3J: Semin´ aˇr I.
5.10.2011
11 / 17
Vˇetven´ı programu (2/X) 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/UP3J: Semin´ aˇr I.
5.10.2011
12 / 17
Vˇetven´ı programu (3/X) 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/UP3J: Semin´ aˇr I.
5.10.2011
13 / 17
Vˇetven´ı programu (3/X) 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/UP3J: Semin´ aˇr I.
break; break; break; break; break; break; break; break; break; break; break;
5.10.2011
14 / 17
Cykly (1/X) 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/UP3J: Semin´ aˇr I.
5.10.2011
15 / 17
Cykly (3/X) 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/UP3J: Semin´ aˇr I.
5.10.2011
16 / 17
Podrobnˇeji rozebran´a problematika
http://download.oracle.com/javase/tutorial/java/nutsandbolts/index.html
Petr Krajˇ ca (UP)
KMI/UP3J: Semin´ aˇr I.
5.10.2011
17 / 17