1 / 85

JAVA Tutoriál

JAVA Tutoriál. Ing. Lumír Návrat, A1018 Tel: +420 59 732 3252 Email: lumir.navrat @vsb.cz ICQ: 64100582 Materi ály vycházejí z podkladů doc. Ing. Miroslava Beneše , Ph.D. ( 28.5.2005). D oporu čená literatura. Učebnice

donnelly
Download Presentation

JAVA Tutoriál

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. JAVATutoriál Ing. Lumír Návrat, A1018 Tel: +420 59 732 3252 Email: lumir.navrat@vsb.cz ICQ: 64100582 Materiály vycházejí z podkladů doc. Ing. Miroslava Beneše , Ph.D. (28.5.2005)

  2. Doporučená literatura • Učebnice • Eckel, B.: Myslíme v jazyce Java. Grada, 2000.http://www.eckelobjects.com/ • Herout, P.: Učebnicejazyka Java. KOPP, 2000. • Pecinovský R.: Myslíme objektově v jazyku Java 5.0 • Internet • Studijní materiály k tutoriáluhttp://www.cs.vsb.cz/navrat/vyuka/esf/ • Slidy z předchozích kurzů výuky jazyka JAVA na katedře http://www.cs.vsb.cz/java/

  3. Programové vybavení • http://java.sun.comJava SE Development Kit + dokumentace • http://ant.apache.orgNástroj pro správu projektů • Vývojová prostředí: Netbeans IDE, Eclipse, Borland JBuilder,Intelli JIdea... • Editory: JEdit, PSPad, TextPad, gvim, ..., Notepad 

  4. Vznik jazyka • Motivace: Jazyk pro tvorbu programového vybavení pro spotřební elektroniku – pračky, diáře, mikrovlnné trouby, ... • Požadavky: nezávislost na procesoru, spolehlivost, jednoduchost, robustnost. • 1990 - JamesGosling, Sun – jazyk Oak • 1993 – Internet + WWW = nové aplikace • Sun HotJava – prohlížeč s applety • 23. 1. 1996 – JDK 1.0 – první implementace • 2004 – JDK 1.5 -> JDK 5 Tiger – nové prvky jazyka • prosinec 2006 – JDK 6 – aktuální verze

  5. Překlad a spuštění programu Test.java zdrojový program zpětnýpřeklad javac Test.java Test.class javap Test *.html java Test javadoc Test.java výsledky JIT dokumentace JIT – Just-In-Time překlad

  6. Program Ant • Implementován v prostředí Java • Možnost rozšiřování • implementace akcí v jazyce Java • definované rozhraní • Činnost se řídí souborem v XML • build.xml • Integrován do vývojových prostředí • Eclipse, Netbeans, …

  7. Struktura řídicího souboru project 1 1 n name default basedir description n property target name value location name depends if unless description 1 n task

  8. Struktura řídicího souboru <?xml version="1.0"?> <project name="Test" default="all" basedir="."> <property name="src" location="src"/> <property name="build" location="classes"/> <target name="all" depends="init,compile,run"/> <target name="init"> <mkdir dir=“${build}”/> </target> <!-- … --> </project>

  9. Spuštění programu • ant • řídicí soubor build.xml • provedení implicitního cíle • ant compile • provedení zadaného cíle • ant –buildfile test.xml • použití zadaného řídicího souboru • ant –Dbuild.compiler=jikes • nastavení hodnoty vlastnosti • ant –logfile build.log • uložení logu do souboru

  10. Základní úlohy • Práce se soubory • <mkdir dir="${dist}/lib"/> • <delete dir="lib"/> • <delete> <fileset dir="." includes="**/*.bak"/> </delete> • <copy file="myfile.txt" tofile="mycopy.txt"/> • <move file="file.orig" todir="${dist}/lib"/>

  11. Základní úlohy • Překlad • <javac srcdir="${src}" destdir="${build}" classpath="xyz.jar" debug="on" /> • <javac srcdir="${src}" destdir="${build}"> <classpath> <pathelement path="${classpath}"/><pathelement location="lib/helper.jar"/> </classpath> </javac>

  12. Základní úlohy • Spuštění programu • <java classname="test.Main" > <arg value="-h"/> <classpath> <pathelement location="dist/test.jar"/> <pathelement path="${java.class.path}"/> </classpath> </java>

  13. Zdrojový program package Priklady; // soubor Priklady/Test.java publicclass Test { publicstaticvoid main(String args[]) { System.out.println(“Ahoj!”); } }

  14. Cílový program publicclassPriklady.Test extendsjava.lang.Object { publicPriklady.Test(); Code: 0: aload_0 1: invokespecial #1; //Methodjava/lang/Object."<init>":()V 4: return publicstaticvoidmain(java.lang.String[]); Code: 0: getstatic #2; //Fieldjava/lang/System.out:Ljava/io/PrintStream; 3: ldc #3; //String Ahoj! 5: invokevirtual #4; //Methodjava/io/PrintStream.println:(Ljava/lang/String;)V 8: return }

  15. Datové typy • Primitivní datové typy • booleanFalse, True • char ‘A’, ‘\n’ • int, long 123, 5L • float, double 3.14f, 6.67e-19 • Referenční datové typy • String“abc”, “ab\tcd” • pole String[ ], int[ ] [ ] • Objekty • Boolean, Integer, Float, … objektové obálky primitivních typů. Od verze 5.0 existuje automatická konverze

  16. Operátory • Aritmetické • x+y, x-y, x*y, x/y, x%y, -x • Relační • x == y, x != y, x < y, x <= y, x > y, x >= y • Logické • x && y, x || y, !x • Přiřazení • x = y • x += y, …, x++, x--

  17. Příkazy - • Podmíněnýpříkaz • if ( podmínka ) příkaz • if ( podmínka ) příkazelsepříkaz • Cyklus • while( podmínka ) příkaz • dopříkazwhile(podmínka) + - + + -

  18. Příkazy • for( inicializace; podmínka; krok ) příkaz for( inti = 0; i < 10; i++ ) { System.println(“i=“ + i); } for( Item i: kolekce) { System.println(“i=“ + i.toString()); } //Odverze JAVA 5.0 • break, continue for( inti = 0; i < 10; i++ ) { if( a[i] == x ) break; } - +

  19. Program public class VypisParametru { public static void main(String[] args) { for( int i = 0; i < args.length; i++ ) { System.out.println(i + ”: “ + args[i]); } } }

  20. Praktické cvičení – cviceni1.zip • Úloha 1 - Překlad a spuštění ukázkové třídy • Rozbalte v pracovním adresáři soubor priklad1.zip. • Prostudujte soubor Pokus.java. • Spusťte program ant, jenž vytvoří soubor Pokus.class a spustí jej. • Úloha 2 - Vytvoření vlastního programu • Na základě ukázkového programu vytvořte program pro řešení kvadratické rovnice, který z hodnot proměnných a, b, c typu double vypočítá hodnoty kořenů rovnice ax^2+bx+c=0. • Hodnoty proměnných a, b, c nastavte přímo v programu. • Pro výpočet druhé odmocniny použijte volání funkce Math.sqrt(x).

  21. Řešení: Kvadratická rovnice static void kr(double a,double b,double c){ double d = b * b – 4 * a * c; if( d < 0 ) System.out.println(“Nemá reálné kořeny”); else if( d == 0 ) { double x = - b / (2*a); System.out.println("x=" + x); } else { double x1 = (-b + Math.sqrt(d)) / (2*a); double x2 = (-b – Math.sqrt(d)) / (2*a); System.out.println("x1=" + x1); System.out.println("x2=" + x2); }}

  22. Praktické cvičení – cviceni2.zip • Úloha 1 – Prostudování práce s parametry příkazového řádku • Rozbalte v pracovním adresáři soubor priklad2.zip. • Prostudujte a vyzkoušejte způsob práce s parametry příkazové řádky, včetně chybové vstupu (Priklad1.java) • Úloha 2 – Seřazení obsahu pole • Vytvořte program, který vytiskne seřazené pole celočíselných hodnot zadaných jako parametry. (Priklad2.java) • Úloha 3 – Práce se standardním vstupem • Prostudujte práci se standardním vstupem • Upravte program pro výpočet kvadratické rovnice, aby načítal data ze vstupu.

  23. Dotazy

  24. Třídy a objekty T C E O

  25. Co mají společného? • Vlastnosti (stav) • souřadnice středu x, y • barva • obsah, obvod • Operace (chování) • přesunutí na jinou pozici • n-násobné zvětšení a zmenšení • vykreslení na obrazovku • Vztahy • sousedí, překrývají se, ...

  26. V čem se liší? • Druh obrazce • čtverec, trojúhelník, elipsa • Specifické vlastnosti • délka strany čtverce • velikosti poloos elipsy • Hodnoty vlastností • konkrétní souřadnice, barva, ... • Způsob provedení operací • vykreslení na obrazovku

  27. Grafická reprezentace třídy Jméno třídy Zlomek Vlastnosti čitateljmenovatel Zlomek přičti(Zlomek jinýZlomek) Zlomek násob(Zlomek jinýZlomek) void normalizuj() Operace

  28. Objekt = instance třídy Zlomek čitateljmenovatel z1 : Zlomek čitatel = 2 jmenovatel = 3 Zlomek přičti(Zlomek jinýZlomek) Zlomek násob(Zlomek jinýZlomek) void normalizuj() z3 : Zlomek z2 : Zlomek čitatel = 1 jmenovatel = 2 čitatel = -6 jmenovatel = 4

  29. Třídy v jazyce Java class Zlomek { // instanční proměnné int citatel; int jmenovatel; // metody Zlomek nasob(Zlomek jiny) { citatel *= jiny.citatel; jmenovatel *= jiny.jmenovatel;} }

  30. Vytvoření instance třídy public static void main(String[] args) { Zlomek z = new Zlomek(); // nastavení instančních proměnných z.citatel = 2; z.jmenovatel = 3;// volání metody z.nasob(z); // z *= z } reference

  31. Jak se instance zruší? • Pascal, C, C++ – je třeba volat speciální operaci, která uvolní paměť:Pascal:Dispose(ptr)C:free(ptr);C++: delete ptr; • Java, .NET– automatická správa paměti (garbage collector) • paměť se uvolní automaticky, pokud na ni neexistuje žádný odkaz

  32. Inicializace objektu • Zajištění definovaného stavu objektu po jeho vytvoření • všechny proměnné objektu se nastaví na nulu • je-li uvedena inicializace, provede se nastavení class Test { int x; // poč. hodnota je 0 int y = 10; // poč. hodnota je 10 int m() { int z; // POZOR! zde to neplatí! return z + 1; // chyba – neinicializovaná } // proměnná ‘z’}

  33. Konstruktor • Zajištění inicializace objektu po vytvoření public class Zlomek { Zlomek(int citatel, int jmenovatel) { this.citatel = citatel; this.jmenovatel = jmenovatel; } … } Zlomek z1 = new Zlomek(3, 4); // ¾ Zlomek z2 = z1.pricti(new Zlomek(1,2)); není typ výsledku! odkaz na aktuální objekt

  34. Příklad public classCitac{ inthodnota = 0; Citac(intpocatek) { hodnota = pocatek; } void krok() { hodnota++; } public static void main(String args[]) { Citacc = new Citac(10); c.krok(); System.out.println(c.hodnota); // 11 } }

  35. Jak si hlídat svá data? public classCitac{ // veřejné metody public void nastavHodnotu(int nova) { hodnota = nova; } public intvratHodnotu() { return hodnota; } public void krok() { hodnota++; } // soukromá proměnná private inthodnota = 0; ...

  36. Jak si hlídat svá data? public classTest { public static void main(String args[]) { Citac c = new Citac(); // c.hodnota = 10; -- není přípustné c.nastavHodnotu(10); c.krok(); System.out.println(c.vratHodnotu()); } }

  37. Statické členy třídy • Instanční proměnné a metody • jsou vázané vždy na nějaký objektobj.proměnná, obj.metoda() • Proměnné a metody třídy • společné pro všechny instanceTřída.proměnná, Třída.metoda() • označují se klíčovým slovem staticstatic int počet;static void main(String[] args) {…}

  38. Příklad public class Test { private static int pocet = 0; // vrátí počet vytvořených instancí třídy public static int pocetInstanci() { return pocet;} public Test() { pocet++;} ...

  39. Příklad - pokračování ... public static voidmain(String args[]) { System.out.println(“Počet instanci = “ + Test.pocetInstanci()); Test t2 = new Test(); System.out.println(“Počet instanci = “ + Test.pocetInstanci()); } }

  40. Dědičnost Obrazec int xint y presun(x1, y1) Elipsa Čtverec int a int b int a

  41. Dědičnost class Obrazec { int x, y; void presun(int x, int y) { this.x = x; this.y = y; }}class Ctverec extends Obrazec { int a;}

  42. Dědičnost • Je-li něco čtverec, pak je to i obrazec • Je-li něco obrazec, nemusí to být čtverec Ctverec c = new Ctverec();c.presun(10, 20); // dědí metodu presun()Obrazec o = c; // lze přiřadit • Obrazec o = new Ctverec();// o.a = 5; // nepřípustné • // Ctverec c = o; // nepřípustné

  43. Dědičnost • Není-li uvedena bázová třída, použije se java.lang.Object • StringtoString() převod objektu na textovou reprezentaci • booleanequals(Object obj) porovnání s jiným objektem • inthashcode() číselný kód objektu • Objectclone() vytvoření kopie objektu

  44. Zapouzdření prvků třídy • Soukromé proměnné/metody – private • přístupné pouze z vlastních metod • Chráněné proměnné/metody – protected • přístupné i z metod zděděných tříd • Veřejné proměnné/metody – public • přístupné i z metod jiných objektů

  45. Konstruktory a dědičnost • Konstruktor musí nejprve zavolat zděděný konstruktor – zajištění správné inicializace class Obrazec { public Obrazec(int x, int y) { this.x = x; this.y = y; } protected int x, y;}class Ctverec extends Obrazec { public Ctverec(int x, int y, int a) { super(x, y); this.a = a; } protected int a;}

  46. Konstruktory a dědičnost • Není-li zděděný konstruktor zavolán, zajistí se volání implicitního konstruktoru class Citac { public Citac() { hodnota = 10; } protected int hodnota;}public class CitacSKrokem extends Citac { public CitacSKrokem(int krok) { // super() -- zavolá se automaticky this.krok = krok; } protected int krok; public void volitelnyKrok() { nastavHodnotu(vratHodnotu()+krok); }}

  47. Příklad class Test {public static void main(String[] args) { CitacSKrokem lepsiCitac = new CitacSKrokem(5); lepsiCitac.volitelnyKrok(); System.out.println(lepsiCitac.vratHodnotu()); lepsiCitac.krok(); System.out.println(lepsiCitac.vratHodnotu()); } }

  48. Konstruktory a dědičnost • Neexistuje-li žádný konstruktor, vytvoří se prázdný implicitní konstruktor class Citac { // public Citac() {} -- vytvoří seprotected int pocet;} • Jak zajistit, aby nebylo možné vytvořit instanci třídy voláním operátoru new? class Citac { private Citac() {} ...}

  49. Evidence osob public class Osoba { public String login; public String jmeno; public String prijmeni; } Problémy? Osoba os = new Osoba(); System.out.println(os); os.login = “bon007”;

  50. 1. problém - inicializace class Osoba { public Osoba(String l,String jm,String p) { login = l; jmeno = j; prijmeni = p; } … } Osoba os = new Osoba(“aaa000”, “Johnny”, “Walker”);

More Related