Úvod do programovacích jazyků (Java) Michal Krátký 1 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/27
Michal Krátký Úvod do programovacích jazyků (Java) tel.: +420 596 993 239 místnost: A1004 mail: michal.kratky@vsb.cz web: http://www.cs.vsb.cz/kratky/ http://www.cs.vsb.cz/kratky/courses/ 2006-05/upr/ c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 2/27
Zápočet a zkouška Minimální počet bodů ze dvou semestrálních projektů 26b (z 50 možných). Z 1. projektu je nutné získat minimálně 8b (z 15), z 2. semestrálního projektu pak 18b (z 35). Projekty budou kontrolovány samostatným úkolem, jehož trvání bude časově omezeno. Předmět bude ukončen klasifikovaným zápočtem. Minimálně 25b z 50 možných. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 3/27
JDK a vývojová prostředí http://java.sun.com/ JDK Java Platforma, aktuální verze 1.5. http://java.sun.com/ NetBeans, vývojové prostředí. http://www.eclipse.org/ Eclipse, vývojové prostředí. http://jikes.sourceforge.net/ rychlý překladač. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 4/27
Literatura Úvod do programovacích jazyků (Java) R. Szturc: Introduction to Programming (Java). Department of Computer Science, VŠB Technical University of Ostrava, 2004, http://www.cs.vsb.cz/java/index.html B. Eckel: Thinking in Java. 2002, http://www.mindview.net/books/tij/ Sun MicroSystems: Sun Developer Network. 2005, http://java.sun.com/ c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 5/27
Příklad 1.1 Úvod do programovacích jazyků (Java) public class Example0101 { public s t a t i c void main ( S t r i n g [ ] args ) { System. out. p r i n t l n ( " Hello World1 \ n " ) ; } } c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 6/27
Překlad a spuštění Překlad: javac Example0101.java Spuštění: java Example0101 Spuštění s přesměrováním standardního výstupu do souboru file.txt: java Example0101 > file.txt c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 7/27
Překlad a spuštění ve vývojovém prostředí Ve vývojovém prostředí je často nutné založit projekt a do něj vkládat příslušné třídy. Jedna třída je tzv. spouštěcí, tj. její metoda main() spouští program. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 8/27
Ladění (debugging) - efektivní hledání chyb Ladění je jediný rozumný prostředek hledaní chyb v kódu. Můžeme použít řádkový debugger nebo ladění ve vývojových prostředích. Na významné řádky vkládáme breakpointy, chod programu se na těchto řádcích zastaví. Funkce: Step Into - zanoření do metody, Step Over - přechod na další řádek bez možného zanoření, Run - rozběhnutí programu až do nalezení dalšího breakpointu, Step Out - opuštění aktuální funkce. Můžeme sledovat: Stack Trace - zásobník volání metod, hodnoty lokálních proměnných i proměnných instancí a tříd. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 9/27
James Gosling, Sun Microsystems, 1990. Původní název Oak, v roce 1993 přejmenován na Java. V roce 1996 vyšla první implementace (JDK 1.0). Rysy jazyka Java: Objektově-orientovaný jazyk. Silně typovaný jazyk. Obsahuje garbage collector. Podporuje paralelní běh vláken. Podporuje výjimky. Bezpečný programovací jazyk. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 10/27
Překlad vs interpretace kódu Překladač zdrojový kód je přeložen do spustitelného souboru. Interpret vykonává jednotlivé příkazy ze zdrojového kódu. Java kombinuje oba způsoby. Kód (*.java) je přeložen do bytekódu (*.class) a ten je interpretován v java virtuálním stroji (javavm). Virutální stroj je reprezentován spustitelným souborem java. Veškeré využívané knihovny (jar archívy) musí být uvedeny v proměnné CLASSPATH. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 11/27
Java platforma Úvod do programovacích jazyků (Java) Platforma hardwarové a softwarové prostředí ve kterém program běží. Java platforma softwarová platforma nad daným hardwarem. Java API Java virtuální stroj Operační systém Hardware Java platforma Java API kolekce tříd vstupy/výstupy, práce se sítí, databázemi apod. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 12/27
Syntaxe a sémantika Syntaxe - popisuje jaké konstrukce jsou v jazyce možné. Jaký program je korektně napsaný a jaký ne. Sémantika - popisuje co které konstrukce znamenají. Např. co se provede při nějakém příkazu. Rozlišujeme mezi dvěma typy chyb: Chyby při překladu - hlášeny překladačem. Syntaktické - např. chybějící ; Sémantické - např. přiřazení mezi nekompatibilními datovými typy. Chyby při běhu programu - hlášeny virtuálním strojem při běhu programu. Můžeme zachytávat pomocí výjimek. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 13/27
Syntaxe jazyka Java Program se skládá ze tříd. Každá třída se skládá z definic dat a operací pracujícími nad těmito daty. Atributy: data objektu. Methody: operace nad těmito daty. Metody se skládají z hlavičky, definující jméno, parametry a návratový typ, a těla obsahující příkazy. Příkazy manipulují s proměnnými (atributy nebo lokálními proměnnými). Provádění příkazu zahrnuje vyhodnocování výrazů. Každá proměnná, hodnota nebo výraz je nějakého typu. Na nejnižší úrovni je program posloupnost lexikálních symbolů. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 14/27
Příklad 1.2 Úvod do programovacích jazyků (Java) public class Example0102 { public s t a t i c void main ( S t r i n g [ ] args ) { i n t i = 5 ; i n t j = i + 3 ; System. out. p r i n t l n ( " i = " + i + ", j = " + j + " \ n " ) ; } } c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 15/27
Lexikální symboly Bílé znaky a poznámky: Bílé znaky: space (SP), horizontal tab (HT), form feed (FF), newline (LF), carriage return (CR). Komentáře: /* komentář */ // komentář Základní typy lexikálních symbolů: identifikátory: i j System9 number_of_elements klíčová slova: while float int public class literály: 124 true d "hello" oddělovače: ( ) { } [ ] ; :,. operátory: + - * / && = *= <»= c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 16/27
Příklad 1.3 Úvod do programovacích jazyků (Java) / Trida Example0102 Author : Date : / public class Example0102 { public s t a t i c void main ( S t r i n g [ ] args ) { / / v y p o c i t e j 5 + 3 i n t i = 5 ; i n t j = i + 3 ; / / vypis vysledek System. out. p r i n t l n ( " i = " + i + ", j = " + j + " \ n " ) ; } } c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 17/27
Typy, hodnoty a proměnné V proměnných jsou uložena data. Každá proměnná je specifikována jménem a datovým typem (deklarace). Rozlišujeme dvě skupiny datových typů:. Proměnná primitivního datového typu obsahuje jednu hodnotu příslušné velikosti: boolean b = true; // booleovský typ int i = 456; // celé číslo float f = 2.71828; // reálné číslo Reference Adresa objektu (instance třídy) nebo pole. Hashtable h = new Hashtable(); int[] a = new int[20]; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 18/27
Celočíselné datové typy 1/2 Typ Rozsah Velikost v bitech byte -128..127 8 short -32768..32767 16 int -2147483648..2147483647 32 long -9223372036854775808..9223372036854775807 64 char 0..65535 16 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 19/27
Celočíselné datové typy 2/2 Operátory: Porovnání: <, <=, >, >=, ==,!= Unární plus a mínus: +, - Binární aritmetické operátory: +, -, *, /, % Prefixové a postfixové operátory pro dekrementaci a inkrementaci: ++, Znaménkové a neznaménkové operátory posuvu: <<, >>, >>> Bitový doplněk: ~ Bitové operátory: & (AND), (OR), ^(XOR) c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 20/27
Příklad 1.4 Úvod do programovacích jazyků (Java) public class Example0104 { public s t a t i c void main ( S t r i n g [ ] args ) { i n t i = 5 ; i + + ; / / i = 6 i n t j = i + 3; / / i = 5, j = 9 j = i + 3 ; / / i = 4, j = 7 j + = 6 ; / / j = 1 3 boolean b = ( j = = 1 ) ; / / b = f a l s e ; System. out. p r i n t l n ( " i = " + i + ", j = " + j + ", b= " + b + " \ n " ) ; } } c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 21/27
Příklad 1.5 Úvod do programovacích jazyků (Java) public class Example0105 { public s t a t i c void main ( S t r i n g [ ] args ) { i n t i = 1 ; / / i = 0001 i = i < < 1 ; / / i = 2 ( 0 0 1 0 ) i n t j = 1 ; i n t k = i j ; / / k = 3 ( 0 0 1 1 ) k = i & j ; / / k = 0 System. out. p r i n t l n ( " i = " + i + ", j = " + j + ", k= " + k + " \ n " ) ; } } c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 22/27
Reálné datové typy 1/2 Čísla tvaru s m 2 exp. Typ s m exp Velikost v bitech float {-1,1} 0.. 2 24 1-149..104 32 double {-1,1} 0.. 2 53 1-1075..970 64 Typ Min. hodnota Max. hodnota float 1.40239846e-45f 3.40282347e+38f double 4.94065645841246544e-324 1.79769313486231570e+308 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 23/27
Reálné datové typy 2/2 Operátory: Porovnání: <, <=, >, >=, ==,!= Unární plus a mínus: +, - Binární aritmetické operátory: +, -, *, /, % Prefixové a postfixové operátory pro dekrementaci a inkrementaci: ++, c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 24/27
Booleovský datový typ Booleovský datový typ má dvě možné hodnoty: true a false. Operátory: Porovnání: ==,!= Logický doplněk:! Binární logické operátory: &,, ^ Podmínkové AND resp. OR operátory: &&, Ternární podmínkový operátor:?: Booleovské výrazy určují řízení vykonávání v příkazech: if while do for c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 25/27
Příklad 1.6 1/2 public class Example0106 { public s t a t i c void main ( S t r i n g [ ] args ) { boolean f l a g = true ; f l a g =! f l a g ; / / f l a g = f a l s e boolean bvar = true ; boolean r1 = f l a g bvar ; / / r1 = t r u e boolean r2 = f l a g & bvar ; / / r2 = f a l s e i f ( r1 r2 ) / / t r u e or f a l s e = t r u e { System. out. p r i n t l n ( " r1 or r2 equals t r u e " ) ; } c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 26/27
Příklad 1.6 2/2 } } double f V a l = r1? 1. 0 : 2. 0 ; / / f V a l = 1. 0 System. out. p r i n t l n ( " f l a g = " + f l a g + ", bvar= " + bvar + ", f V a l = " + f V a l + " \ n " ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 27/27