PJV011 X36PJV ( Programování v JaVě ) Cílem předmětu je probrat: - základy jazyka a systému Java - nejdůležitější standardní balíčky (packages j2sdk) Organizace předmětu: Přednášky, cvičení, samostudium, semestrální práce, zkouška Studijní pomůcky: Vývojové prostředky: JBuilder9 Personal nebo JBuilderX Foundation
PJV012 Java Java je: –jednotný univerzální jazyk ( což neznamená, že je vhodná pro cokoli ) –rozsáhlý, otevřený, rozvíjející se softwarový systém –právně chráněná –normotvorná - zavádí řadu užitečných norem, uzancí a přístupů –expanzivní, vykázala (od května 1995) dosud nevídaný rozmach –velmi efektivní při tvorbě software –spolehlivá, robustní, přesně specifikovaná a znamenitě dokumentovaná –portabilní, (Windows/Linux/Solaris...) –deterministická - úlohy končí či havarují určitelným způsobem –silně objektová - obsahuje však i neobjektové primitivní typy –síťová –internetová a internacionální –multithreadová - více úkolů může běžet (jakoby) současně –interpretovaná ( s adaptací pro platformu ) –zdarma
PJV013 Verze Javy a IDE Tvůrcem a vlastníkem práv Javy je firma Sun Microsystems, která vydává jdk, jre, j2sdk, j2ee, j2me a další produkty po verzích Lze stahovat ze sítě: javasoft.com jdk (byla první), (nový modelu událostí) j2sdk 1.2. (zahrnuje JFC), 1.3., (aktuální) 1.5 (chystá se na léto 2004, beta je již vydaná) jre - Java Runtime Environment (bez vývojových prostředků) Tento software neobsahuje žádné IDE. S Javou lze pracovat (nepohodlně) řádkově: j2sdk1.4.2/bin/javac A.java B.java j2sdk1.4.2/bin/java A Řada firem vytvořila velmi pokročilá vývojová prostředí SUN ONE, Netbeans (Sun), JBuilder (Borland), JDeveloper(Oracle), VisualJ (IBM), JCreator, BlueJ
PJV014 Primitivní typy Typ Formát Zabalující (wrap) třída Celá čísla - dvojkový komplement se znaménkem byte 8-bit -128 … 127 Byte short 16-bit … Short int 32-bit … Integer long 64-bit … Long "Reálná" čísla - floating point podle normy IEEE 754 float 32-bit … ( )*2 127, NaN, pos/neg Infinity Float double 64-bit … ( )*2 1023, NaN, pos/neg Infinity Double Další typy char 16-bit Unicode '\u0000' to '\uffff' 0 to Character boolean true false Boolean
PJV015 Konverze mezi primitivními typy Rozšíření: byte -> short -> int -> long -> float -> double char -> int -> long -> float -> double Rozšíření lze provést přímo přiřazením. Zúžení vyžaduje přetypování ( povoluje se tím ztráta informace) např: double d = 3.14; float f = (float) d; char c = (char) 65.4; byte b = (byte) 97; Pro všechny primitivní typy existují v java.lang zabalující třídy (wrap class). Tyto třídy nemají z hlediska jazyka žádné zvláštní postavení - obsahují řadu užitečných metod, atributů a konstruktorů, které usnadňují práci s primitivními typy a tvoří most k referenčním typům.
PJV016 Použití zabalovacích tříd int imax = Integer.MAX_VALUE; // zjištění max. hodnoty int k = Integer.parseInt("123"); // konverze řetěz - číslo String s = Integer.toHexString(k); // konverze do hexadec. tvaru // obdobně pro byte,short,long double dmax = Double.MAX_VALUE; // zjištění max. hodnoty double x = Double.parseDouble(" "); // konverze řetěz - číslo boolean b = Double.isNaN(x); // test na nečíslo // obdobně pro typ float char c =Character.toLowerCase('Z'); // převod znaku boolean b = // je znak písmeno nebo číslice? int i = Character.digit(''f", 16); // hexadecimální hodnota znaku
PJV017 Standardní aritmetiky Integrální pro celá čísla s těmito operátory: + - * / % > >>> & | ^ ~ Pozor však na přetečení! Vyhazuje se pouze výjimka při dělení nulou: java.lang.ArithmeticException. Floating point pro "reálná" čísla s těmito operátory: + - * / % Tato aritmetika nevyhazuje žádné výjimky, avšak zahrnuje tři speciální hodnoty: NaN - Not a Number, tj. nečíslo nebo neurčitý výraz POSITIVE_INFINITY NEGATIVE_INFINITY S těmito hodnotami lze provádět další operace, avšak již nelze získat opravdové číslo.
PJV018 Matematické operace K dispozici jsou standardní třídy: Pro počítání v typech int, long, float a double: java.lang.Math java.lang.StrictMath Pro celá čísla s libovolnou přesností java.math.BigInteger Pro reálná čísla s libovolnou přesností java.math.BigDecimal
PJV019 Numerické literály Obsahuje-li literál pouze číslice a případně znaménko ukládá se do typu int. např.: -123, 123, +123 Pro uložení do typu long připojíme písmenný sufix l či L např.: L nebo l Obsahuje-li literál desetinnou tečku nebo exponent,ukládá se do typu double např.: 123., , -123E2, -123e2, 12300e-2 Pro uložení do typu float připojíme písmenný sufix f či F např.: f, F Oktalový literál se vyznačuje prefixem 0 (nula) např.: 077 (dekadicky 63), L Hexadecimalní literál se vyznačuje prefixem 0x (nula iks) např.: 0x77 (dekadicky 119), 0x1DADA2CAFE3FEEL
PJV0110 Znakové a řetězové literály Znakový literál představuje právě jeden znak v Unicodu a uvádí se v apostrofech, např.: 'A' 'Ř' Lze ho vyjádřit až čtyřmi hexadecimálními číslicemi uvozenými prefixem \u, např.: '\uCafe' Řetězový literál je posloupnost znaků v Unicodu (i prázdná) v uvozovkách, např.: "Abc123" "Řeřicha" "". Lze vkládat i znaky Unicodu, např.: "My \uCafe & Tea".
PJV0111 Jména a konvence Jméno tvoří libovolná neprázdná posloupnost písmen Unicodu (tedy i z národních abeced), znaků $ _ ( dolar a podtržítko = underscore) a číslic, která nezačíná číslicí a není klíčovým slovem. Jména je vhodné volit mnemotechnická, pouze z písmenek ASCII a číslic, s dolarem a podtržítkem velmi šetřit (mají totiž i jiný význam). Jmény se označují: package (balíček) - jen malá písmena, i několik jmen oddělených tečkou: abc def2.gh3 class (třída) a její konstruktory - podstatné jméno začínající velkým písmenem String FileInputStream BankAccount Výjimky by měly mít sufix Exception MySpecialException
PJV0112 Jména a konvence interface (rozhraní) - přídavné jméno začínající velkým písmenem Comparable Serializable method (metoda) - sloveso začínající malým písmenem reset parseDouble isLetterOrDigit variable (proměnná) - začínající vždy malým písmenem count totalTax currentFrequency final variable (konstanta) - jen z velkých písmen, číslic a event. s podtržítkem ORIGIN MAX_VALUE BASE_POINT
PJV0113 Klíčová slova Klíčová slova jsou tvořena jen malými písmeny: abstract default if private this boolean do implements protected throw break double import public throws byte else instanceof return transient case extends int short try catch final interface static void char finally long strictfp volatile class float native super while const * for new switch continue goto * package synchronized a dále literály: false true null * - vyhrazená - leč nefunkční