Úvod do programování v jazyce Java Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 26. září, 2012 Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 1 / 18
Organizační informace email: petr.krajca@upol.cz konzultační hodiny středa 16:00 18:00 po dobu mé nepřítomnosti přes email www: http://phoenix.inf.upol.cz/~krajca/ slidy budou k dispozici online, ale není to vhodný primární zdroj pro studium pro udělení zápočtu je potřeba vyřešit všechny úkoly zadané na cvičení a nejpozději do jednoho týdne je poslat na email petr.krajca@upol.cz s předmětem UP3J implementovat netriviální projekt v jazyce Java (lze použít i ročníkový projekt) plagiátorství, vydávání cizích výsledků za vlastní je zakázano a bude řešeno dle vnitřních předpisů UP odevzdání dvou identických prací je považováno za plagiátorství bez ohledu na to, že se liší formátováním nebo názvy proměnných Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 2 / 18
Literatura SUN. Java Tutorial. 2010. Eckel B. Mysĺıme v jazyce Java - příručka programátora. Grada Publishing, 2000. Bloch J. Java efektivně 57 zásad softwarového 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čebnice jazyka Java. Kopp, 2000. Kiszka B. 1001 tipů a triků pro programování v jazyce Java. Computer Press, 2003. Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 3 / 18
Java jako programovací jazyk objektově orientovaný jazyk (dědičnost s jedním rodičem) syntaxí podobný C/C++ (není to C/C++!) portabilita (Write-Once-Run-Anywhere) snaha o omezení chyb automatická správa paměti silně a staticky typový jazyk (není to CommonLisp!) omezení dostupných prvků jazyka na ty bezpečné systém vyjímek kontrola mezí poĺı Další vlastnosti několik nezávislých implementací (Oracle/SUN, IBM, IcedTea, GCJ, Harmony) rozsáhlá standardní knihovna, řada API množství dostupných knihoven a nástrojů třetích stran (Apache Foundation) Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 4 / 18
Java jako platforma Infrastruktura Edice Java Development Kit (JDK): překladač, knihovny + související nástroje Java Virtual Machine (JVM): vykonává kód vygenerovaný překladačem (Java Byte Code) Java Runtime Environment (JRE): běhové prostředí (JVM, knihovny, atd.) Java Applety propojení JRE s prohĺıžečem JavaScript vůbec nesouvisí s Javou s JDK/JRE: lze provozovat další jazyky, např. Scala, Groovy, Clojure, Jython, JRuby Java ME mobilní zařízení (definuje řadu omezení) Java SE nejčastěji používaná Java EE jako SE + knihovny a rozhraní Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 5 / 18
Historický přehled 1990 původně vyvíjeno SUN Microsystems jako projekt OAK 1996 JDK 1.0 (první verze) 1997 JDK 1.1 1998 J2SE 1.2 (JIT překlad, kolekce) = Java2 (J2SE) 2000 J2SE 1.3 (HotSpot JIT překladač) 2002 J2SE 1.4 (řada nových API) 2005 J2SE 5.0 (řada rozšíření generické typy, metadata, for-each, atd.) 2006 Java SE 6 (nové API, vylepšení JVM) 2010 SUN je koupen Oraclem 2011 Java SE 7 (mírné úpravy jazyka, rozšířené API) Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 6 / 18
IDE Eclipse Netbeans IntelliJ IDEA proprietární: JBuilder, JDeveloper, XCode,... ve výuce je možné používat libovolné IDE používání IDE nebude součástí výuky seznamte se s IDE a využívejte jeho možností IDE generování kódu formátování kódu refactoring (přejmenování proměnných) nápověda Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 7 / 18
Konvence důraz na čitelnost kódu (konvence vynucené standardem, zaběhlá praxe, návrhové vzory) každá veřejná třída v samostatném souboru, rozdělení baĺıčků do adresářů (požadavek jazyka) projekt má typicky tři podadresáře (src/, bin/ lib/) zaužívaný 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ávané práce musí být formátovány podle daných konvencí, jinak budou vráceny k dopracování (s formátováním vám pomůže IDE) Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 8 / 18
Základní datové typy (1/2) Primitivní datové typy (hodnotové) čísla: byte, short, int, long (velikost 1, 2, 4, 8 bytů); neexistují unsigned varianty čísla s plovoucí řádovou čárkou: float, double (4, 8 bytů; jednoduchá/dvojitá přesnost) pravdivostní hodnoty: boolean (může mít hodnoty true, false) znaky: char (pole znaků řetězec!, char byte) implicitní inicializace (překladač může neinicializaci označit za chybu) operátory jako v C: +, -, *, /, +=, -,..., ++, --, &, ==,!=, >, <, <=, &&, Ostatní datové typy (referenční) neexistují ukazatele pole (indexovány od 0, kontrola hranic) řetězce (neměnitelné), spojení řetězců operátorem + = nově alokovaný řetězec objekty Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 9 / 18
Základní datové 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ča (UP) KMI/UP3J: Seminář I. 26.9.2012 10 / 18
Obligatní Hello World package cz.upol.lecture01; public class Lecture01 { public static void main(string[] args) { System.out.println("Hello World!"); Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 11 / 18
Větvení programu (1/X) téměř identické jako v C blok { if prikaz_1; prikaz_2;... if podminka1 prikaz_1; if podminka2 prikaz_2; else prikaz_3; Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 12 / 18
Větvení 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ča (UP) KMI/UP3J: Seminář I. 26.9.2012 13 / 18
Větvení programu (3/X) switch switch (celočíselný_výraz){ case konstanta_1: příkazy_1 break;... case konstanta_n: příkazy_n break; default: příkazy_default_větve od Java 7 lze použít i řetězce Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 14 / 18
Větvení programu (3/X) int month = 8; String monthstring; switch (month) { case 1: monthstring = "January"; break; case 2: monthstring = "February"; break; case 3: monthstring = "March"; break; case 4: monthstring = "April"; break; case 5: monthstring = "May"; break; case 6: monthstring = "June"; break; case 7: monthstring = "July"; break; case 8: monthstring = "August"; break; case 9: monthstring = "September"; break; //... case 12: monthstring = "December"; break; default: monthstring = "Invalid month"; break; System.out.println(monthString); Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 15 / 18
Cykly (1/X) for for (inicializace; podmínka; inkrementace) { příkazy while (podmínka) { příkazy do { příkazy while (podmínka); cyklus jde přerušit příkazem break, popř. přeskočit na začátek smyčky příkazem continue Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 16 / 18
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ča (UP) KMI/UP3J: Seminář I. 26.9.2012 17 / 18
Podrobněji rozebraná problematika http://download.oracle.com/javase/tutorial/java/nutsandbolts/index.html Petr Krajča (UP) KMI/UP3J: Seminář I. 26.9.2012 18 / 18