JAVA V Anotace Java, zimní semestr ,2014 1

Podobné dokumenty
JAVA V Anotace Java, zimní semestr ,2015 1

JAVA. Nástroje v JDK

JAVA V Anotace Java, zimní semestr ,2016 1

JAVA. Nástroje v JDK

Java Enum Java, zimní semestr ,2017 1

Semin aˇr Java N astroje Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Bˇrezen 2012 Radek Koˇc ı Semin aˇr Java n astroje 1/ 42

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Algoritmizace a programování

Ant aneb Ferda Mravenec, práce všeho druhu

Java Výjimky Java, zimní semestr

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Úvod do programovacích jazyků (Java)

12. Dokumentace a distribuce aplikací. speciálních dokumentačních komentářích vpisovaných před

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Výčtový typ strana 67

8 Třídy, objekty, metody, předávání argumentů metod

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Generické programování

Programování v Javě I. Únor 2009

Podmínky na zápočet. Java, zimní semestr

Správa projektů a testování

PŘETĚŽOVÁNÍ OPERÁTORŮ

Programování v Javě I. Leden 2008

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

3 KTE / ZPE Informační technologie

JAVA. Krátce o Reflection API

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Doxygen. Jakub Břečka

Seminář Java II p.1/43

Iterator & for cyklus

PREPROCESOR POKRAČOVÁNÍ

JAVA. Další jazyky kompilovatelné do Java byte-code

Teoretické minimum z PJV

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

JAVA Unit testing Java, zimní semestr

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský

JAVA Moduly Java, letní semestr 2018

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Java - řazení objektů

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

typová konverze typová inference

Java a XML. 10/26/09 1/7 Java a XML

1. Dědičnost a polymorfismus

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

20. Projekt Domácí mediotéka

3. Třídy. Základní pojmy objektového programování. Třídy

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Návrh softwarových systém. Návrh softwarových systémů

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

1. Programování proti rozhraní

Seminář Java IV p.1/38

První kapitola úvod do problematiky

Testovací metoda. Testovací metoda. public class SimpleTest {

Java Řetězce Java, zimní semestr

JAVA V RMI Java, letní semestr

Úvod do programovacích jazyků (Java)

Soubor jako posloupnost bytů

NPRG031 Programování II 1 / :25:46

NMIN201 Objektově orientované programování 1 / :36:09

Pokročilé programování na platformě Java. Úvod

1 Návod na instalaci prostředí LeJOS-NXJ a přehrání firmwaru NXT kostky

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Programovací jazyk Java

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

GUI. Systémová integrace pro desktopové aplikace

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

PB161 Programování v jazyce C++ Přednáška 9

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

UJO Framework. revoluční architektura beans. verze

Jazyk XSL XPath XPath XML. Jazyk XSL - rychlá transformace dokumentů. PhDr. Milan Novák, Ph.D. KIN PF JU České Budějovice. 9.

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Z. Kotala, P. Toman: Java ( Obsah )

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jazyk C# (seminář 6)

Objektově orientované programování

Vytváření a použití knihoven tříd

KTE / ZPE Informační technologie

RMI Remote Method Invocation

10 Balíčky, grafické znázornění tříd, základy zapozdření

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Programování v C++ 3, 3. cvičení

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Projekty pro výuku programování v jazyce Java

Typický prvek kolekce pro české řazení

Úvod Vývojová prostředí Štábní kultura Dokumentace Konec. Programování v C# Prostředí a doporučení 1 / 39

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Programování v C++ 1, 6. cvičení

Pokročilé techniky tvorby sestav v Caché. ZENové Reporty

Obrázek 6.14: Prohlížec nápovedy

Transkript:

JAVA Anotace 1

Anotace (metadata) od Java 5 umožňují přidat informace k elementům v programu (ke třídám, metodám, atributům,...) obecně je lze použít všude tam, kde lze napsat nějaký modifikátor viditelnosti zapisují se @JmenoAnotace lze definovat vlastní určit, kde je lze napsat, jak používat,... předdefinované anotace v balíku java.lang @Deprecated @Override @SuppressWarnings... 2

Předdefinované anotace @Deprecated označení API, které by se nemělo používat náhrada za tag z dokumentačních komentářů @Override označení, že metoda v potomku předefinovává metodu z předka pokud nic nepředefinovává => kompilátor odmítne třídu přeložit @SuppressWarnings zamezí vypisování varování při překladu parametr třída varování 2 třídy unchecked varovaní při nevhodném používání generických typů deprecation varování při použití deprecated elementů př. @SuppressWarnings( unchecked ) @SuppressWarnings({ unchecked, deprecation }) 3

JAVA Lambda výrazy 4

Motivace obsluha událostí v GUI implementace komparátoru implementace vlákna vždy interface s jednou metodou běžně pomocí anonymní vnitřní třídy interface Comparator<T> { int compare(t o1, T o2); } class Arrays {... void sort(t[] a, Comparator<T> c); } Arrays.sort(array, new Comparator<AClass> () { public int compare(aclass o1, AClass o2) { return o1.x < o2.x; }}); 5

Motivace předchozí příklad pomocí lambda výrazů Arrays.sort(array, (o1, o2) -> o1.x < o2.x ); zjednodušeně lambda výraz ~ blok kódu s parametry od Java 8 6

Příklady lambda výrazů (int x, int y) -> x + y (x, y) -> x - y () -> 42 (String s) -> System.out.println(s) x -> 2 * x c -> { int s = c.size(); c.clear(); return s; } 7

Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu s jednou abstraktní metodou = funkcionální interface lambda výraz je instance funkcionálního interfacu ale lambda výraz neobsahuje informaci o tom, který funkcionální interface implementuje 8

Typ lambda výrazu stejný lambda výraz lze přiřadit do různých interfaců Runnable r = () -> {}; AutoCloseable r = () -> {}; lambda výrazy jsou objekty Runnable r = () -> {}; Object o = r; ale lambda výrazy nelze (přímo) přiřadit do typu Object Object r = () -> {}; 9

Funkcionální interface @FunctionalInterface anotace pro označení funkcionálního interface použití není nutné podobně jako @Override 10

Reference na metody String::valueOf reference na statickou metodu ekvivalent: x -> String.valueOf(x) Object::toString reference na nestatickou metodu ekvivalent: x -> x.tostring() x::tostring reference na metodu konkrétního objektu ekvivalent: () -> x.tostring() ArrayList::new reference na konstruktor ekvivalent: () -> new ArrayList<>() 11

Lambda výrazy lambda výrazy nepřidávají nový prostor (scope) viditelnosti proměnných Path first = Paths.get("/usr/bin"); Comparator<String> comp = (first, second) -> Integer.compare(first.length(), second.length()); this v lambda výrazu odkazuje na this metody, ve které je výraz vytvořen public class Application { public void dowork() { Runnable runner = () -> {System.out.println(this.toString());}; } } 12

JAVA Nástroje v JDK 13

Nástroje javac javadoc jdb javah jconsole... 14

JAVA javadoc 15

Přehled nástroj na automatické generování dokumentace ze zdrojových kódů deklarace tříd atd. plus dokumentační komentáře dokumentace je přímo v kódu snadno se udržuje aktualizovaná výstup (implicitně) HTML stránky dokumentační komentáře /** komentar */ před popisovaný element uvnitř text + speciální tagy + html kód program javadoc ve standardní distribuci vygeneruje dokumentaci 16

Komentáře dokumentační komentáře těsně před popisovaný element /** Komentar ke tride */ public class MyClass { /** Komentar k atributu */ public int a; /** Komentar k metode */ public void foo() {... } } 17

Komentáře jinde jsou ignorovány (jako normální komentáře) /** ignorovano */ import java.util.*; public class MyClass { void foo() { /** ignorovano */ } } 18

Víceřádkové komentáře komentáře typicky přes více řádků úvodní mezery a hvězdička na dalších řádcích jsou ignorovány bez hvězdičky mezery nejsou ignorovány (od 1.3) /** Tohle je viceradkovy komentar. * Uvodni mezery a hvezdicky * jsou ignorovany a odstraneny. */ /** Zde uvodni mezery ignorovany nejsou chybi hvezdicka. */ 19

Sekce komentářů dvě sekce v dokumentačních komentářích hlavní popis sekce s tagy nejdřív je hlavní popis, pak sekce s tagy pořadí sekcí nelze prohodit sekce s tagy začíná prvním tagem (@neco) /** Hlavni popis elementu. Stale hlavni * popis elementu * @see java.lang.object */ komentáře můžou mít pouze jednu sekci 20

Druhy tagů "block tags" @tag samostatné tagy můžou stát jen na začátku řádku (úvodní mezery a hvězdička ignorovány) znak @ jinde než na začátku řádku je normální znak "in-line tags" {@tag} můžou stát kdekoliv v textu i hlavním popisu @deprecated As of JDK 1.1, replaced by {@link #setbounds(int,int,int,int)} 21

Komentáře první věta komentáře = shrnutí věta končí první tečkou následovanou bílým znakem (nebo prvním tagem) zobrazena v přehledu členů třídy (metody, atributy) v krátkém popisu třídy jeden komentář k více atributům /** Komentar patri k obema atributum */ public int x, y; 22

HTML text komentářů HTML lze používat HTML tagy /** Tohle je <b>dokumentacni</b> * komentar */ znaky < > & zapisovat jako v HTML <... < >... > &... & není vhodné používat některé tagy např. hlavičky <h1> <h2> naruší strukturu vygenerované dokumentace 23

Dědění komentářů pokud není komentář definován, dědí se od nadřazené třídy u předefinovaných metod u implementovaných metod z interfaců dědí se ta část komentáře, která není definována platí od 1.4 do 1.3 přítomnost dokumentačního komentáře zamezila dědění z předků explicitní dědění {@inheritdoc} 24

Popis balíku dokumentační komentář k balíku soubor package.html ve stejném adresáři jako třídy obsahuje HTML stránku do dokumentace se vloží vše mezi <body> a </body> píše se bez /**... */ první věta krátký popis balíku popis skupiny tříd soubor overview.html jako package.html 25

Tagy Tag od JDK Tag od JDK @author 1.0 @return 1.0 @{code} 1.5 @see 1.0 @{docroot} 1.3 @serial 1.2 @deprecated 1.0 @serialdata 1.2 @exception 1.0 @serialfield 1.2 {@inheritdoc} 1.4 @since 1.1 {@link} 1.2 @throws 1.2 {@linkplain} 1.4 {@value} 1.4 {@literal} 1.5 @version 1.0 @param 1.0 26

Tagy u metod /** Hlavni popis. * @param p1 popis parametru p1 * @param p2 popis parametru p2 * @throws IOException kdy je vyhozena * @throws MyException kdy je vyhozena * @returns co vraci */ int foo(int p1, long p2) throws IOException, MyException; 27

Další tagy @since text lze použít všude význam: od jaké verze softwaru daný element existuje @since 1.4 @exception to samé jako @throws @author jmeno jméno tvůrce použití u třídy, balíku a v přehledu 28

Další tagy @see reference "See also" hlavička ve vygenerované dokumentaci tři formáty @see "retezec" @see "The Java language specification" @see <a href="url#value">label</a> @see package.class#member label @see String#equals(Object) equals @see java.io.file#exists() exists {@link package.class#member label} reference v textu podobné jako @see 29

Další tagy {@linkplain package.class#member label} stejné jako {@link...} použije se stejný font jako pro text pro {@link...} se použije jiný font @deprecated text označuje API, které by se už nemělo používat (přetrvává z předchozích verzí) text vysvětlení proč zpracovává ho i překladač varování při použití takového API od 1.5 anotace @deprecated {@docroot} relativní cesta ke kořenovému adresáři vygenerované dokumentace 30

Další tagy {@literal text} text se nebude nijak interpretovat {@literal a<b>c} v dokumentaci bude a<b>c <b> se nebude interpretovat jako tag {@code text} to samé jako <code>{@literal text}</code> 31

javadoc vygenerování dokumentace javadoc součást standardní distribuce spouštění javadoc [parametry] [baliky] [zdrojove_soubory] [-subpackages pkg1:pkg2:...] 32

Parametry pro javadoc -overview cesta/soubor jiné umístění pro soubor overview.html -public dokumentace bude obsahovat pouze public elementy -protected dokumentace bude obsahovat public a protected elementy implicitní chování -package dokumentace bude obsahovat public, protected a elementy bez označení -private dokumentace bude obsahovat všechny elementy 33

Parametry pro javadoc -doclet trida doclet generuje dokumentaci imlicitní doclet generuje HTML -source 1.4 pokud se používají assertions (pro JDK 1.4) -sourcepath seznam_cest kde se mají hledat zdrojové soubory -verbose -quiet uroveň výpisů při generování -locale jazyk_země_varianta musí být jako první parametr -encoding kodovani kódování zdrojových souborů 34

Parametry pro javadoc -d cesta kam vygenerovat dokumentaci -version zahrnout tag @version -author zahrnout tag @author -windowtitle text -doctitle text -header text bude na začátku každé stránky -footer text bude na konci každé stránky -nodeprecated -nosince 35

JAVA ANT 36

Přehled http://ant.apache.org/ nástroj (nejen) na překlad java programů obdoba make napsán v Javě rozšiřitelný přidáváním dalších tříd vstupní soubor (buildfile) (obdoba makefile u make) XML NetBeans interně Ant používají pro překlad, spouštění,... projektů 37

Buildfile implicitní jméno build.xml obsahuje jeden project a alespoň jeden target <?xml version="1.0" encoding="us-ascii"?> <project...> <target...>... </target> <target...>... </target> </project> 38

Project atributy name jméno projektu default implicitní target, který se bude provádět, pokud nebude žádný explicitně zadán povinný parametr basedir adresář, od něhož budou všechny cesty v souboru odvozeny volitelný element <description> popis projektu <project name="projekt" default="compile" basedir="."> <description>dlouhy popis projektu</description> 39

Target posloupnost činností (task), které se mají provést může záviset na jiných targets provede se až po těch, na kterých závisí atributy name jméno, povinné depends seznam targetů, na kterých závisí description krátký popis if jméno property, která musí být nastavena unless jméno property, která nesmí být nastavena 40

Target <target name="compile" depends="init" description="prelozi aplikaci">... </target> 41

Task kód, který může být vykonán různý počet parametrů podle druhu vestavěné volitelné vlastní <jmeno atr1="hodnota" atr2="hodnota".../> <javac srcdir="..." destdir="..."/> 42

Property jméno a hodnota jména rozlišování velikosti písmen získání obsahu property - ${property} vestavěné property basedir ant.file ant.version ant.project.name ant.java.version systémové properties Javy vlastní property <property name="jmeno"... /> 43

Příklad <?xml version='1.0' encoding='us-ascii'?> <project basedir="." default="compile" name="project"> <description>project description</description> <property name="src" location="src"/> <property name="classes" location="classes"/> <target name="init"> <mkdir dir="${classes}"/> </target> <target name="compile" depends="init" description="compile"> <javac debug="true" destdir="${classes}" srcdir="${src}" includes="**/*.java" classpath="${src}" /> </target> <!-- pokracovani --> 44

Příklad <!-- pokracovani --> <target name="run" depends="init,compile" description="execute"> <java fork="true" classname="main" classpath="${classes}" /> </target> </project> 45

Spouštění ant [parametry] [target [target2... ]] parametry -projecthelp, -p napověda projektu popis projektu + popis task -propertyfile <soubor> definuje property ze zadaného souboru -D<property>=<name> definice property -buildfile <soubor> -file <soubor> -f <soubor> buildfile 46

Task javac spouští překladač Javy překládá pouze ty soubory, které jsou potřeba k souboru.java není.class nebo je starší pozor! určuje pouze podle jmen souborů tj. neví o vnitřních třídách apod. atributy srcdir adresář s.java soubory povinný destdir kam ukládat.class soubory classpath CLASSPATH 47

Task javac atributy encoding kódování source -source parametr pro javac compiler jaký překladač pro Javu se má použít fork true nebo false (implicitně false) spustit překladač ve stejne JVM jako ant nebo v nové srcdir, classpath (a další) můžou být nahrazeny vnořenými elementy <src>, <classpath> (a další) 48

Task java spustí Java aplikaci atributy classname třída s metodou main jar jar-soubor ke spuštění povinně buď classname nebo jar classpath fork spustit aplikaci v nové JVM vnořené elementy <arg> parametry příkazové řádky 49

Task property nastaví property na danou hodnotu nelze měnit jejich hodnotu atributy name jméno property value hodnota property location absolutní cesta zadaného souboru file soubor, ze kterého se mají načíst property url url, ze kterého se mají načíst property 50

Task property příklady <property name="src" location="src"/> <property name="foo.dist" value="dist"/> <property file="foo.properties"/> <property url="http://..." /> 51

Task javadoc vytvoří javadoc dokumentaci atributy sourcepath adresáře se zdrojáky sourcefiles přímo vyjmenované zdrojáky packagenames pro které balíčku vytvářet destdir do jakého adresáře generovat public, protected,package, private pro které elementy se má dokumentace generovat author zahrnout tag autor version zahrnou tag version mnoho dalších 52

Ostatní mnoho dalších tasků delete maže soubory/adresáře move přesun/přejmenování souborů mkdir vytoření adresáře copy kopírování echo vypíše text na standardní výstup 53

Java, zimní semestr Verze prezentace 2014 J05.cz.2014.01 Tato prezentace podléhá licenci Creative Commons Uveďte autora-neužívejte komerčně 4.0 Mezinárodní License. 54