JAVA. Krátce o Reflection API

Podobné dokumenty
JAVA Moduly Java, letní semestr 2018

JAVA. Reflection API

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

Platformy NetBean a Eclipse. Úvod

JAVA Moduly Java, letní semestr 2019

Platformy NetBean a Eclipse. Úvod

Reflexe RTTI Runtime Type Identification

Swing. Vlastní kreslení

GUI. Systémová integrace pro desktopové aplikace

JAVA V jar Java, zimní semestr

Iterator & for cyklus

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

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

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

Programovací jazyk Java

Úvod do programovacích jazyků (Java)

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

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

UJO Framework. revoluční architektura beans. verze

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

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

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

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

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

Programování v Javě I. Leden 2008

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

Swing Vlákna Java, zimní semestr

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

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

JAVA. Java Management Extensions JMX

Doxygen. Jakub Břečka

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

Algoritmizace a programování. Terminálový vstup a výstup

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

JAVA Unit testing Java, zimní semestr

Textové soubory. alg9 1

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Programátorská příručka

Programování v jazyku C# II. 9.kapitola

Dědění, polymorfismus

Java Výjimky Java, zimní semestr

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

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

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

Jazyk C# (seminář 6)

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Remote Method Invocation RMI

Více o konstruktorech a destruktorech

Tvorba informačních systémů

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

Java Enum Java, zimní semestr ,2017 1

RMI Remote Method Invocation

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

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

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/

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Seminář Java II p.1/43

Úvod do programovacích jazyků (Java)

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

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

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

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

Vytváření uživatelských datových typů a funkcí v Javě

Programování II. Návrh programu I 2018/19

MBI - technologická realizace modelu

Regulární výrazy. Vzory

20. Projekt Domácí mediotéka

Soubor jako posloupnost bytů

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

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

TÉMATICKÝ OKRUH Softwarové inženýrství

Student s Life. Návrhová dokumentace (Design) Lukáš Barák, Jakub Ječmínek, Jaroslav Brchel, Jiří Zmeškal

Programování v jazyce JavaScript

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

Java. Platformy apod.

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

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

KMI / TMA Tvorba mobilních aplikací

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

InputStream. FilterInputStream

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

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

KAPITOLA 10. Implementace mezinárodní podpory a lokalizace. V této kapitole:

Generické programování

Teoretické minimum z PJV

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

Webová prezentační aplikace

Výčtový typ strana 67

Algoritmizace a programování

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

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

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

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice

PROGRAMOVÁNÍ PRO MS WINDOWS 2

6. PRÁCE S DATOVÝMI PROUDY

Algoritmizace a programování

JAVA V Anotace Java, zimní semestr ,2014 1

Transkript:

JAVA Krátce o Reflection API 1

Přehled reflection, introspection umožňuje zjišťování informací o třídách, atributech, metodách vytváření objektů volání metod... balík java.lang.reflect třída java.lang.class<t> 2

java.lang.class instance třídy Class reprezentuje třídu (interface, enum,...) v běžícím programu primitivní typy také reprezentovány jako instance třídy Class nemá žádný konstruktor instance vytvářeny automaticky při natažení kódu třídy do JVM třídy jsou natahovány do JVM až při jejich prvním použití 3

java.lang.class získání instance třídy Class getclass() metoda na třídě Object vrátí třídu objektu, na kterém je zavolána literál class JmenoTridy.class třída pro daný typ Class.forName(String classname) statická metoda vrátí třídu daného jména pro primitivní typy statický atribut TYPE na wrapper třídách Integer.TYPE literál class int.class 4

java.lang.class třídy do JVM natahuje classloader java.lang.classloader standardní classloader hledá třídy v CLASSPATH lze si napsat vlastní classloader Class.forName(String classname, boolean initialize, ClassLoader cl) natáhne třídu daným classloaderem a vrátí objekt třídy Class getclassloader() metoda na Class classloader, kterým byla třída natažena 5

java.lang.class: metody String getname() vrátí jméno třídy pro primitivní typy vrátí jeho jméno pro pole vrátí řetězec začínající znaky [ (tolik, kolik má pole dimenzí) a pak označení typu elementu Z..boolean, B..byte, C..char, D..double, F..float, I..int, J..long, S..short, Lclassname..třída nebo interface String.class.getName() // vrátí "java.lang.string" byte.class.getname() // vrátí "byte" (new Object[3]).getClass().getName() // vrátí "[Ljava.lang.Object;" (new int[3][4][5][6][7][8][9]).getclass().getname() // vrátí "[[[[[[[I" 6

java.lang.class: metody public URL getresource(string name) public InputStream getresourceasstream(string name) načte nějaký zdroj obrázky,..., cokoliv data načítá classloader => načítání se řídí stejnými pravidly jako načítání tříd jméno zdroje ~ hierarchické jméno jako u tříd oddělovací tečky jsou nahrazeny lomítky '/' 7

java.lang.class: metody is... metody boolean isenum() boolean isinterface() get... metody Field[] getfields() Method[] getmethods() Constructor[] getconstructors()... 8

Použití Reflection API informace o kódu dynamické načítání pluginy proxy třídy... 9

JAVA jar 10

Přehled vytváření archivů sdružujících.class soubory JAR ~ Java Archive soubor přípona.jar formát ZIP soubor META-INF/MANIFEST.MF popis obsahu použití distribuce softwaru do CLASSPATH lze psát.jar soubory lze přímo spouštět.jar soubory nemusí obsahovat jen.class soubory obrázky audio cokoliv 11

Použití vytvoření archivu jar cf soubor.jar *.class vytvoří soubor.jar se všemi.class soubory přidá do něj MANIFEST.MF soubor jar cmf manifest soubor.jar *.class vytvoří soubor.jar s daným MANIFEST souborem jar cf0 soubor.jar *.class nepoužije se komprese pro další parametry viz dokumentaci práce s jar archivy v programu java.util.jar, java.util.zip 12

MANIFEST.MF soubor seznam dvojic jméno : hodnota inspirováno standardem RFC822 dvojice lze seskupovat do skupin skupinu odděleny prázdným řádkem hlavní skupina (první) skupiny pro jednotlivé položky archivu délka řádků max. 65535 konce řádků CR LF, LF, CR 13

MANIFEST.MF soubor hlavní sekce Manifest-Version Created-By Signature-Version Class-Path Main-Class aplikace lze spouštět java -jar archiv.jar vedlejší sekce první položka Name: cesta_k_položce_v_archivu 14

Jar a Ant task jar v Antu parametry destfile, basedir, includes, excludes, manifest vnořené elementy manifest příklady <jar destfile="${dist}/lib/app.jar" basedir="${build}/classes" excludes="**/test.class" /> <jar destfile="test.jar" basedir="."> <include name="build"/> <manifest> <attribute name="built-by" value="${user.name}"/> <section name="common/class1.class"> <attribute name="sealed" value="false"/> </section> </manifest> </jar> 15

java.util.jar podobné jako java.util.zip JarInputStream, JarOutputStream potomci ZipInputStream a ZipOutputStream JarInputStream ma navíc metody getmanifest() JarEntry potomek ZipEntry získávání atributů Manifest reprezentace MANIFEST.MF souboru 16

Java Moduly 17

Modularizace modul explicitně definované co poskytuje i co požaduje proč koncept classpath je křehký chybí zapouzření 18

Modularizace modul explicitně definované co poskytuje i co požaduje proč koncept classpath je křehký chybí zapouzření 19

Modulární aplikace motivace proč aplikace více a více komplexní skládání aplikací vývoj v distribuovaných týmech komplexní závislosti dobrá architektura programu ví o svých závislostech spravuje závislosti 20

Modulární aplikace motivace Verze 1.0 vše dobře navrženo 21

Modulární aplikace motivace Verze 1.1...několik vynálezavých hacků...vyčistíme to ve 2.0 22

Modulární aplikace motivace Verze 2.0...oops...ale...funguje to! 23

Modulární aplikace motivace Verze 3.0 Pomoc! Oprava jakékoliv chyby přinese dvě další chyby! 24

Modulární aplikace motivace Verze 4.0 vše dobře navrženo. Kompletně přepsano, trvalo to o rok delé, ale funguje to... 25

Modulární aplikace motivace Version 4.1...tohle vypadá povědomě... 26

Deklarace modulu module-info.java module com.foo.bar { requires com.foo.baz; exports com.foo.bar.alpha; exports com.foo.bar.beta; } modular artifact modularní JAR JAR obsahující module-info.class nový formát JMOD ZIP s třídami, nativním kódem, konfigurací,... 27

Moduly a JDK standardní knihovna JDK také modularní java.base vždy required module java.base { exports java.io; exports java.lang; exports java.lang.annotation; exports java.lang.invoke; exports java.lang.module; exports java.lang.ref; exports java.lang.reflect; exports java.math; exports java.net;... 28

Module readability & module path Pokud modul přímo závisí na jiném modulu Modul čte (reads) jiný modul (nebo, jinak, druhý modul je čitelný (readable) prvním modulem) Module path ekvivalent ke classpath ale pro moduly -p, --module-path 29

Module graph module com.foo.app { requires com.foo.bar; requires java.sql; } 30

Kompatibilita se starou Javou Classpath stále podporováno v podstatě jsou moduly volitelné Nepojmenovaný modul cokoliv mimo jakýkoliv modul starý kód čte jakýkoliv jiný modul exportuje všechny svoje balíčky pro všechny jiné moduly 31

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