1 / 27

Pro č Java

Pro č Java. jednotný , univerzální jazyk ( n e však vhodný pro cokoli ) definovaný specifikací: je to p ře dev ší m norma , pak i produkt y rozsáhlý, otevřený, rozvíjející se , s návaznými technologie mi právně chráněný normotvorný - zavádí řadu užitečných norem, uzancí a přístupů

parson
Download Presentation

Pro č Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Proč Java • jednotný, univerzální jazyk ( ne však vhodný pro cokoli ) • definovaný specifikací: je to především norma,pak i produkty • rozsáhlý, otevřený, rozvíjející se, snávaznými technologiemi • právně chráněný • normotvorný - zavádí řadu užitečných norem, uzancí a přístupů • expanzivní, od května 1995 vykázal nevídaný rozmach • velmi efektivní při tvorbě software • spolehlivý, robustní, velmi dobře dokumentovaný • portabilní, (Windows/Linux/Solaris ...) • bezpečný • deterministický - úlohy končí či havarují určitelným způsobem • silně objektový – avšak hybridní - obsahuje i primitivní typy • síťový • Internetový, internacionální a návazný na nativní platformu • multithreadový - více vláken (tj.úkolů) běží [ jakoby]současně • interpretovaný - s adaptací pro platformu ( JIT ) • vhodný pro úvod do objektového programování • zdarma C00

  2. Java & IDE • Tvůrcem a vlastníkem práv je fa. Sun Microsystems a Oracle, která vydává JavaSE, JavaEE, JavaME a další produkty po verzích - zdarma stáhnutelné z: http://java.oracle.com/ resp. http://www.netbeans.org 1.0.2 – 1995, 1.1 – delegační model událostí, 1.2 – JFC, 1.3, 1.4 - assert • 1.5 - 2004:rozšíření jazyka: for, enum, autoboxing, generika, anotace • 1.6- 2006: rozšíření API, • 1.7 - 2011:rozšíření čísla, switch, try, catch, diamond • 1.8-2014: funkcionální interfejsy, ->, :: , default, lambdavýrazy • jre - Java Runtime Environment ( bez vývojových prostředků ) • obsahuje JVM alenikoli IDE,databázi či aplikační server. • S Javou lze pracovat velmi nepohodlně řádkově s programy v jdk1.8**/bin/ • javac A.java B.java ... kompilace zdrojů .java na .class • java A běh aplikace dané třídy • appletviewer A.htmltesterapletů • javadoc … tvorba dokumentace, tzv. docletů v html či velmi pohodlně a bezpečně ve vyspělých IDE: • Netbeans – 8.0April 2014 • Eclipse - IBM, JBuilder-Borland, IntelliJIDEA - JetBrains... C00

  3. Podpora Javy Sun Microsystems velmi podporuje Javu tím, že vydává: • různé softwarové svazky – ke stažení a instalaci lze doporučit: http://java.sun.com/javase/downloads/index.jsp • ke každé hlavní verzi dokumentaci ve formě html stránek. Ta obsahuje zejména popis API, který je radno připojit nerozzipovaný IDE. Viz: http://java.sun.com/docs/ http://download.oracle.com/javase/7/docs/ • tématické tutoriály: http://java.sun.com/docs/books/tutorial/index.html http://java.sun.com/docs/books/jls - Java specification 3rd edition popisuje i verze >= 1.5 Zakhour, S. et al.: Java 6 výukový kurz, Computer Press, Brno, 2007, s. 534,ISBN 978-80-251-1575-6 http://www.saeedsh.com/resources/Thinking%20in%20Java%204th%20Ed.pdf C00

  4. Dodržujte jmenné konvence Prosté jméno je posloupnost znaků UNICODE:písmen, $ _ číslic jež nezačíná číslicí a není klíčovým slovem. Jména voltemnemotechnická, nejlépe z kódu ASCII a anglická. S dolarem a podtržítkem šetřte : dolar se užívá v automatické generaci kódu, podtržítko ve víceslovných konstantách. Kvalifikované jméno obsahuje uvnitř také tečky. UJmenSloženýchZVíceslovDodržujteVelbloudíKonvenciKvůliČitelnosti. package (balíček) - jen malá písmena, číslicea tečka, např.: projekt1projekt2.util java.util.zip class (třída) - a její konstruktory - podstatné jméno začínající velkým písmenem, např.: String FileInputStream BankAccount Rectangle2D.Double - pro vnořené či vnitřnítřídy Třídy výjimek / chyb vyznačujte sufixem Exception / Error, např.: MySpecialException CommonStrangeError C00

  5. Dodržujte jmenné konvence interface(rozhraní) - přídavné jméno začínající velkým písmenem, ( což se přetěžko hledá a dodržuje ) např.: Comparable Serializable Cloneable Runnable Readable Iterable AutoCloseable Scrolable method (metoda) - sloveso začínající malým písmenem, např.: reset( ) getX( ) parseDouble( ) compareTo( ) vrací-li typ boolean, vhodný je prefix is nebo has isLetterOrDigit( ) hasNextElement( ) variable (proměnná) – podstatné jméno začínající malým písmenem: j counter totalTax currentFrequency final variable (konstanta) a návěští: - jen velká písmena, číslice a podtržítka, např.: PI MAX_VALUE POINT_123 CYCLE3 Bezejmenné jsou: hodnoty, výrazy, příkazy, objekty. C00

  6. Primitivní typy ( 8+1 ) Typ Formát Obalové (wrap) třídy bit Celá čísla - dvojkový komplement se znaménkem byte8-128 … 127Byte short16-32768 … 32767Short int32-2147483648 … 2147483647 (2.1E+9 = 2.1 miliard) Integer long64-9223372036854775808 … 9223372036854775807Long (9.2E+18 = 9.2 trilionů /EU = 9.2 quintillions /US) char16znaky Unicode '\u0000‘ … '\uffff' ~ 0 ... 65535Character jsou v dvojkovém kódu bez znaménka "Reálná" čísla -dle normy IEEE 754 float322-149… ( 2-2-23 )*2127, +/-0.0F, pos/neg Infinity, NaN Float Float.MIN = +1.4E-45 Float.MAX =3.4028235E+38 double642-1074… ( 2-2-52 )*21023, +/-0.0, pos/neg Infinity, NaN Double Double.MIN = +4.9E-324 Double.MAX =1.7976931348623157E+308 boolean?true falseBoolean void pomocný prázdný typ Void C00

  7. Konverze primitivních typů Primitivní typy jsou vzájemně nekompatibilní, ale jejich hodnoty lze převádět. 8 rozšíření ( widening ) znaménkový bit 0je + 1 je- se rozšiřuje byte zúžení ( narrowing ) přetypování odkrojí horní bity, znaménkem se stane nejvyšší z dolních char 16 16 short 32 int minimální aritmetika 64 long 32 float exp IEEE 754 mantissa (+127 ) 1 8 23 64 double exp IEEE 754 mantissa (+1023 ) 1 11 52 C00

  8. Integrální aritmetika int a long 000..0111 7 n/0 či n%0způsobí ArithmeticException + Sudá čísla končí n nulami a jsou dělitelná 2n. znaménkový bit Lichá čísla končí jedničkou. pro lichá n<0 : n/2 != n>>1 důsledek: -1>> == -1 2 000..0010 1 000..0001 011..1111 MAX_VALUE overflow 000..0000 0 111..1111 100..0000 -1 MIN_VALUE -2 100..0001 111..1110 MIN_VALUE+1 MAX+1 -> MIN k * MAX -> - k k * MAX -> MAX-k+1 MAX * MAX -> 1 MIN-1->MAX MIN * k -> 0 MIN * k -> MIN MIN == - MIN MAX + MIN -> -1 MIN / -1->MIN 111..1101 -3 pro sudé k pro liché k 111..1001 -7 -8 chybné výpočty 111..1000 pro sudé k - negace: - n = ~ n + 1 pro liché k ~ inverze: 0 -> 1, 1 -> 0 -> true - samonegace: - n = n - inverze znaménka C00 Hádanky:n&-n, n&=n-1, n^=n&-n,

  9. Numerické literály • Obsahuje-li literáljenčíslice a případně znaménko ukládá se jako int, se sufixem L jako long. Vyjadřuje jen celá čísla zapsána jako: dekadicky [ +| - ]10289 [ L] oktalově[ +| - ]000567 [ L] hexadecimálně [ +| - ]0x012DEF [ L] binárně [ +| - ]0b0101 [ L] Vložit hodnotu do typu byte či short lze jen s přetypováním, např.: byte b =(byte) 0xFF; // má hodnotu -1 . inti = b; // • Obsahuje-li literál tečku či exponent, ukládá se jakodouble. Sufix F či D vynutí typ float či double . Např.: 123.0, 0123., .5, +123.45, -00123e2, -123e2, 12300e-2, -123.0F , 0123.f, .5F, +123.45e+3F, 125D, -333fapod. • Písmena v literálech mohou být libovolně velká či malá. • Mezi číslice lze pro čitelnost vložit podtržítka, např: -10_289, 5.123_789, 0x0123_ABCD, 0b1111_11111__0000_0000 C00

  10. Integrální a „reálná“ aritmetika Na hodnotytypuint,long,float a doublelzeužít operátory: ( Hodnoty typu byte,shorta charse převedou na typ int .) ++ -- inkrementace tj. přičtení 1, dekrementace tj. odečtení 1, + - * sčítání či unární plus, odčítání či negaci, násobení, Přetečení přitom se nijak nehlásí ! / % dělení, modulo tj. zbytek po dělení Jsou-li oba a operandyint,longdojde na integrální dělení ! Je-li dělitel integrálního dělení nula, dojde k vyjímce! Na hodnotytypuintalonglzeužít navíc operátory posunu a logické : << >> >>> aritmetické posuny a logický posun & | ^ ~ AND OR XOR INVERZE pobitech Operátory pro hodnotytypufloat a double: + - * / % • Nevyhazuježádné výjimky, avšakzahrnujetřispeciá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šakjiž nelze získat • opravdové číslo. Krom x != NaN je každé porovnání s NaN vždy false. HW HW HW HW HW C00

  11. Další operátory HW =přiřazení += -= *= /= %= <<= >>=>>>= &= ^= |= aktualizace a pak přiřazení Např. pro inti = 0, i += 2 odpovídái= (int) (i+2) a tedyi+=2.9 je ekvivalentní i += 2. ++ -- inkrement/dekrementjako prefix/sufix, např.-- i / i++znamená aktualizace pak použití / použití pak aktualizace. << >> aritmetické posuny int/longo 0..31 / 63 bitů vlevo / vpravo, >>> logický posun vpravo ( zleva se přidávají nuly ) přičemžhodnotaposunu se maskuje 0b1_1111 / 0b11_1111 + zřetězení – je-li alespoň jeden z operandů řetěz instanceof - test referenčního typu vrací hodnotu boolean (type) - přetypování HW HW C00

  12. Komparace Výsledkem porovnání je logická hodnota ( true, false ). • Porovnání primitivních typů: == != rovno, nerovno, > >= větší než, větší nebo rovno, < <= menší než, menší nebo rovno, <> - tzv. diamond, symbol generické inference ( vnesení ) nikoli != . Ku podivu lze ho psát i jako <> . • Test identity referenčních typů je pouhý test referencí: == !=nikoli hodnot objektů. Objekty, tj. jejich hodnoty, se porovnají metodami v patřičné třídě,typicky: boolean equals( Object o ) - java.lang.Object int compare( … o1, … o2 ) … dle typu 8 obalových tříd int compareTo( Object o ) - java.lang.Comparable int compare( Object o1, Object o2 ) - java.util.Comparator int compare( Object o1, Object o2, Comparator c ) - java.util.Objects C00

  13. Bitové a logické operátory Bitové a logické unární operátory: sestupně podle priority: ! pro negaci typu boolean ~ pro bitovouinverzi celého čísla Logické binární operátory: • Operandy musejí být buď oba celočíselné anebo obaboolean. & pro AND,| pro OR , ^ pro XOR • Pro zkrácené vyhodnocení typůboolean: && pro AND, || proOR Je-li výsledekdán prvním operandem, zbytek výrazu se nevyhodnocuje. Pozor na vedlejší efekty, je-li dalším operandem např. volání metody. • Pozor na nizší priority && a || : false && true| true dá false false && true|| true dá true ( false && true) | true dá true HW C00

  14. Ternární výraz je podmíněný - vrátí jednu ze dvou hodnot dle podmínky podmínka ? hodnotaProTrue : hodnotaProFalse • První operand musí být typu boolean. • Druhý a třetí operand mohou být různých typů. • Podmíněný operátor je zprava asociativní, tedy: • a ? b : c ? d : e ? f : g odpovídá a ? b : (c ? d : (e ? f : g)) Příklad užití: intabs( inti ) { return i >= 0 ? i : - i; } Object o = cond ? 1.23 : "ABC" ; System.out.print( cond ? new Thread( ) : "ABC" ); C00

  15. Priorita a asociativita operátorů 1. ++ --++ -- unární operátory prefixní resp. sufixní • + - ~ ! (datový typ)unární operátory • * / % násobení, dělení, modulo • - +binární operátory, +také pro zřetězení • << >> >>> posunyaritmetické a posun logický • < > <= >= instanceof porovnáníprimitivních hodnot a typu • == !=primitivních i referenčních hodnot • &AND bitový, logický • ^ XOR bitový, logický • |OR bitový, logický • && AND logický zkrácený • ||OR logický zkrácený • ? ternární operátor primitivní či referenční hodnota • = += -= *= /= %= <<= >>=>>>= &= ^= |=s následným přiřazením kde: levá asociativita: a / b * c je ( a / b ) * c pravá asociativita: - ++ a je - ( ++a ), a = b = c je a = (b = c) C00

  16. Složené přiřazovací operátory • += -= = /= = <<= >>= >>>= &= ^= |= • jsou zkratky zápisu, např. pro intresp. String s lze napsat výraz: • i += 2 místo i = i + 2 resp. s += “XYZ” místo s = s +“XYZ” • Hodnotou operace přiřazení je hodnota proměnné po provedeném přiřazení a proto je následující příklad chybný: double d; inti = d = 10; // Error: possible loss of precision: double, required int Java 8zavádí dalšísymboly: -> šipka („arrow token“) typová inference (vnesení, úsudek, vyvození) :: reference metod a konstruktorů C00

  17. Vyhodnocení výrazu = 7 pořadí 1 2 3 4 5 6 7 x + 6 1 – / 1 5 1 – * 3 4 5 << 4 6 2 2 3 syntaktický strom Výrazy jen s literály a operátory vyhodnotí již kompilátor. se provádí v zásobníkovém automatu. Např. výraz: x = -1 + ( 2 << 3 ) * 4 / ( 5 – 6 ) infix forma x 1– 2 3 << 4 * 5 6 – / + = postfix forma (polish reversal) Zásobník (horizontální): x 1 – x –1 2 3<< x –1 16 4 * x –1 64 5 6 – x –1 64 –1/ x –1 –64 + x –65 = –65 a ulož do x C00

  18. Použití obalový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 hexa • Integer i = new Integer( "123"); // konverzeřetěz - číslo • inti = Integer.compare( 3, 5 ); // komparace // obdobně pro typy byte,short,long • double dMax = Double.MAX_VALUE;// zjištění max. hodnoty • double x = Double.parseDouble("-123.45");// konverzeřetěz - číslo • boolean b = Double.isNaN(x);// test nanečíslo • inti = Double.compare( 3.0, 5.0 ); // komparace // obdobně pro typ float • char c =Character.toLowerCase('Z' );// převod znaku • boolean b = Character.isLetterOrDigit('@');// je to písmeno / číslice? • int i = Character.digit(''f", 16);// hexadec. hodnota znaku Tzv. autoboxing automaticky za/roz-baluje primitivní typy do/z příslušných obalových objektů, např.: Double dd=2.71; double d=dd; C00

  19. Třídy pro matematické operace • Pro typy int, long, float a double třída java.lang.Math obsahuje statické funkce: abs, min, max, sqrt, cbrt, pow, exp, log, ceil, floor, random, sin, sinh, asin, tan, tanh, toDegrees, toRadians, hypot … a řadu dalších, jakož i významné konstanty PI=3.14… a E=2.71… • java.lang.StrictMath je identická strictfp – dodržuje přesně normu IEEE 754, byť by hardware umožňovalo více. • Pro čísla s libovolným rozsahem a přesností: • java.math.BigInteger - pro celá čísla • java.math.BigDecimal - pro desetinná racionální čísla • Výpočty se provádějí pouze metodami patřičných tříd - nikoli operátory. C00

  20. Literály • Logický: true a false . • Typový: je typu Class a lze tedy přiřadit např.: Class x =int.class, int[ ].class,Point.class,Point[ ][ ].class, Comparable.class, apod. • Znakový: znak Unicodu v apostrofechnapř.: ' ' = 0x0020 = 32, '0' = 0x0030 = 48, 'A' = 0x0041 = 65, 'a' = 0x0061 = 97 Též pomocí escape chars: '\'''\\''\uCafe' ale: \n či \r\n. • Řetězový: posloupnost znaků Unicodu (i prázdná) v uvozovkách např.: "Abc123" "Řeřicha" "@" "" "My \uCafe\101 Tea\n " . Je to objekt typu java.lang.String a lze volat metody třídy String. • Escape chars (ASCII):\’ \" \\ \r \n \f \t \b \ooo \uhhhh pro: apostrof 0x27 = 39, uvozovku 0x22 = 34, backslash 0x2F = 47, carriagereturn (CR 0x0D), line feed (LF 0x0A), formfeed (FF 0x0C), horiz. tabulator (HT 0x09), backspace (BS 0x08), o - octal, h - hexadec C00

  21. Unicode – viz www.unicode.org kóduje světové symboly na 16-ti bitech (čínské znaky na 21 bitech) takto: stránka_znak v rozsahu: 0x00_00 – 0xFF_FF (=0–65535), 00 – ASCII angličtina, 01 – Latin1 – jazyky románské, germánské, 02 – Latin2 – slovanské, ugrofinské, baltické, 03 – řečtina, 04 – kyrilice, 05 – arménština, hebrejština, 06 - arabština … E0 – F8ConScript Unicode Registry … F8D0 – F8FF klingonština (plaqaD) ASCII 7: 0x00_00 – 0x00_7F( = 0-127 ), 00-1F (=0-31) řídící znaky 20(=32)mezera binárně: 010_0000 … !"#$%&'()*+,-./ 30-39 (=48-57), číslice‘0’ – ’9’ binárně: 011_0000 - 011_1001 … :;<=>?@ 41-5A (=65-90), písmena ‘A’ – ’Z’ binárně: 100_0001 - 101_1010 … [\]^_` 61-7A (=97-122), písmena ‘a’ – ’z’ binárně: 110_0001 - 111_1010 …-7F {|}~ C00

  22. Klíčová slova a reservované literály literály: logické: false true referenční: null typy:primitivní[8]: boolean byte shortintlong char float double řídící příkazy:if else for do while break continue switch case default return pro výjimky a chyby: throwtry catch finally assert operátory: instanceof newthis super strukturální: package import importstatic class enum interface extends implements modifikátory:přístupu:public protected friend se nepíše private atributů, metod, tříd: final static metod, tříd, interfejsů: abstract strictfp static metod: native void throws default* metod, bloků: synchronized atributů:transient volatile nefunkční: constgoto Toto rozdělení neodpovídá zcela přesně specifikaci Javy.* - Java 8 C00

  23. Základní konstrukty (1/3) [public | protected | private ][ static ][ transient ][ volatile ]// pro atributy [final]typ [ [ ] ]id [= výraz ], id [= výraz ] , ...; // lokální var. s inicializací { příkaz; blok; definice ... ; příkaz; ... ; } // blok if ( podmínka ) příkaz1 [elsepříkaz2 ]// podmíněný příkaz podmínka ? výraz1 : výraz2 // ternární výraz pro true : false [návěští:]// jen před cykly while( podmínka ) příkaz do příkaz while ( podmínka ) ; for([ initList ] ; [podmínka ] ; [ modifList ] ) příkaz for([ final] typ elem // jen v cyklu : ( Iterable| pole ) ) příkaz typicky kolekce continue [návěští]; // jen v těle cyklu – přechod na test podmínky break[návěští]; // ukončenípříkazu cyklu, switch (v case, default) return[výraz];// jen v metodě, konstruktoru, inicializátorech C00 - metasymboly

  24. Základní konstrukty(2/3) -switch ( index ) { // typ indexu:char, byte, short či int, enum, // Character, Byte, Short, Integer, String. [case k1 : [příkazy ] // k musí být konstantní výrazy různých case k2 : [ příkazy ]// hodnot typu int či enum konstanty case k3 : [příkazy ]// či typu String - ale ne obalenéhodnota ... ] [default : [ příkazy] ]//Nezávisle volitelné a kdekoli v pořadí [case k4 :[příkazy ] ... ] }//typ indexu indukuje typ konstant k - try [ (zdroj[ ; zdroj] … ) ]// zdroje musí být AutoCloseable {[ příkazy]} [ catch ([final]t1 [It2] … parm ) {[ příkazy]}// Ivertical bar catch ([final]t3 [It4] … parm ) {[ příkazy]}// značí alternaci ... ]// t musí být typu Throwable [ finally {[ příkazy] }]// nelze vynechat catch i finally C00

  25. Základní konstrukty(3/3) -throw objekt// objekt typu Throwable - synchronized ( výraz ) blok // výraz musí referovat objekt - assert podmínka [ : výraz ] ; // kontrola podmínky - enum jméno {//výčtový typ ABC [ ( atributy ) ][ { metody } ] , DEF [ ( atributy ) ][ { metody } ] , GHI [ ( atributy ) ][ { metody } ] ; ... // další složky } - Class [<T>] = T.class // popisný objekt typu třídy C00

  26. Syntaxe metod ( bez generiky ) // modifikátory metod konkrétní, nativní, abstraktní v libovolném pořadí : [public|protected|private] [ static ] [ final ] [synchronized][ strictfp] [public|protected|private] [ static ] [ final ] [synchronized]native [ public| protected]abstract ( returnTyp|void)jménoMetody ( [ [ final ] Typparm, … [ [final] Typ ... varargs]]) //formální parametry [ throwsThw1, Thw2, ... ] // stigma: seznam neřešených nehod // Vynechání varargs při volání se vytvoří patřičné pole nulové délky. { ... } //  tělo konkrétní metody // pro návratový typ void může být tělo i prázdné ; //  jenstředník pro abstracti native metody Příklad volání: jmenoMetody( x, y, z1, z2, z3 ); Vrácená hodnota musí být kompatibilní s návratovým typem metody. possible autoboxing C00

  27. Důležité pojmy literál: ( literal ) sebevyjadřující konstantní hodnota proměnná: (variable) lokální (local variable) definována v metodě, konstruktoru, inicializátoru parametr – lokální proměnná definovaná v hlavičce třídní (class variable)static instanční (class variable) metoda funkce či procedura vrací hodnotu či nevrací nic ( void ) konkrétní - má tělo { … } event. i prázdné abstraktní - nemá tělo – má jen středník ( abstract ) signatura metody / konstruktoru: jméno a seznam typů parametrů stigma metody:throws seznam Throwable přetížení - shoda jmen leč rozdílné signatury překrytí - shoda signatur v předkovi a potomkovi inicializátorstatický: static{ … } anebo nestatický: { … } třída ( class) , výčet ( enum) interfejs rozhraní ( interface ) C00

More Related