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

Podobné dokumenty
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

Principy objektově orientovaného programování

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

Teoretické minimum z PJV

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

Programování v Javě I. Leden 2008

RMI Remote Method Invocation

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

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Generické programování

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

typová konverze typová inference

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

KTE / ZPE Informační technologie

Algoritmizace a programování

Úvod do programovacích jazyků (Java)

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

1. Téma 12 - Textové soubory a výjimky

Úvod do programovacích jazyků (Java)

Dědičnost (inheritance)

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

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

Programovací jazyk Java

Abstraktní datové typy: zásobník

Java - výjimky. private void vstup() throws IOException {... }

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

Java Výjimky Java, zimní semestr

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Datové struktury. alg12 1

Základy objektové orientace I. Únor 2010

Soubor jako posloupnost bytů

Abstraktní třída a rozhraní

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

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

11. Přehled prog. jazyků

Seminář Java II p.1/43

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

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

Remote Method Invocation RMI

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

Jazyk C# (seminář 6)

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

8. přednáška: Soubory a proudy

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

1. Dědičnost a polymorfismus

PREPROCESOR POKRAČOVÁNÍ

Textové soubory. alg9 1

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

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

1. Programování proti rozhraní

Výjimky. v C# a Javě

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

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/

Vláknové programování část V

JAVA. Třídy a classloader

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

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

Objektově orientované programování v PHP 5. Martin Klíma

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

Soketové připojení Klient InetAddress getbyname() UnknowHostException SecurityException Socket getinputstream() getoutputstream() IOException Server

Více o konstruktorech a destruktorech

JAVA V RMI Java, letní semestr

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

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

Iterator & for cyklus

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

Algoritmizace a programování

Konstruktory a destruktory

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

KTE / ZPE Informační technologie

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

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

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

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

17. Projekt Trojúhelníky

Katedra měřicí a řídicí techniky, VŠB - Technická univerzita v Ostravě, tř. 17. listopadu, Ostrava-Poruba, Česká republika

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

Objektově orientované programování

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Paměť počítače. alg2 1

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

9. přednáška - třídy, objekty

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

7.5 Diagram tříd pokročilé techniky

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Struktura programu v době běhu

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Jazyk C# a platforma.net

JAVA RMI Java, letní semestr 2018

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

Jazyk C# (seminář 5)

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

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

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

JAVA. Krátke poznámky:

7.5 Diagram tříd pokročilé techniky

Virtuální metody - polymorfizmus

Transkript:

Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16

JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní třída java.lang.classloader každá třída (java.lang.class) obsahuje referenci na svůj class loader Implementace class loaderu zajištění specifického chování při zavádění tříd více verzí stejné třídy Radek Kočí Seminář Java Zavádění tříd 2/ 16

Spuštění aplikace: java Test Kroky při spouštění: JVM zjistí, že třída Test není zavedena JVM použije zavaděč (class loader) pro zavedení třídy Test Proces zavádění třídy: načtení byte-code (loading) linkování (linking) inicializace (initialization) Radek Kočí Seminář Java Zavádění tříd 3/ 16

Loading vyhledání a načtení byte-code třídy různé zavaděče mají různou politiku (souborový systém, http,...) Linking operace nutné pro to, aby byla třída použitelná verification verifikace korektnosti binární reprezentace třídy preparation vytváří statické členy třídy, implicitní inicializace resolution (optional) závislosti na jiných třídách Radek Kočí Seminář Java Zavádění tříd 4/ 16

Initialization explicitní inicializace statických členů třídy před inicializací se musí inicializovat nadřazená třída (pokud ještě není) k inicializaci třídy/rozhraní T dochází před akcí: T je třída a instance T je vytvářena T je třída a její statická metoda je volána statická proměnna deklarovaná v T je přiřazena statická proměnna deklarovaná v T je použita Radek Kočí Seminář Java Zavádění tříd 5/ 16

class Super { static { System.out.print("Super "); class One { static { System.out.print("One "); class Two extends Super { static { System.out.print("Two "); class Test { public static void main(string[] args) { One o = null; Two t = new Two(); System.out.println((Object)o == (Object)t); Radek Kočí Seminář Java Zavádění tříd 6/ 16

Super Two false Třída One nebude nikdy linkována (není aktivně použita). Radek Kočí Seminář Java Zavádění tříd 7/ 16

class Super { static int taxi = 1729; class Sub extends Super { static { System.out.print("Sub "); class Test { public static void main(string[] args) { System.out.println(Sub.taxi); 1729 (Sub neni inicializovana) Radek Kočí Seminář Java Zavádění tříd 8/ 16

class Super { static int taxi = 1729; class Sub extends Super { static { System.out.print("Sub "); class Test { public static void main(string[] args) { System.out.println(Sub.taxi); 1729 (Sub neni inicializovana) Radek Kočí Seminář Java Zavádění tříd 8/ 16

class Super { static int taxi = 1729; class Sub extends Super { static { System.out.print("Sub "); class Test { public static void main(string[] args) { Sub s = new Sub(); System.out.println(Sub.taxi); Sub 1729 Radek Kočí Seminář Java Zavádění tříd 9/ 16

class Super { static int taxi = 1729; class Sub extends Super { static { System.out.print("Sub "); class Test { public static void main(string[] args) { Sub s = new Sub(); System.out.println(Sub.taxi); Sub 1729 Radek Kočí Seminář Java Zavádění tříd 9/ 16

Zavaděče tříd (class loaders) vytvářejí hierarchickou strukturu každý zavaděč má svého předka (kromě vrcholového) zavaděč deleguje požadavky na svého předka každá třída je definována svým typem a svým zavaděčem každá třída je zavedena pouze jednou každá třída je uchována v zavaděči Radek Kočí Seminář Java Zavádění tříd 10/ 16

Hierarchie zavaděčů Hierarchie zavaděčů bootstrap loader zavádí základní třídy JVM (jr.jar) + extensions system loader zavádí třídy dostupné přes CLASSPATH (nebo -classpath) Radek Kočí Seminář Java Zavádění tříd 11/ 16

Hierarchie zavaděčů Bootstrap (BS) System CL (CP) CL: A1 CL: A1 CL: A1 CL: B1 CL: B1 Radek Kočí Seminář Java Zavádění tříd 12/ 16

Metody třídy java.lang.classloader loadclass() test, zda už je třída zavedena (findloadedclass) deleguje zavádění (loadclass) fail načte třídu (findclass) findclass() čte byte-code reprezentující třídu vytváří třídu (defineclass) odvozené zavaděče by měly předefinovat tuto metodu defineclass() jako parametr má pole bytů konvertuje pole bytů na třídu resolveclass() ověření symbolický referencí ze zaváděné třídy zavedení závislých tříd (volitelné) Radek Kočí Seminář Java Zavádění tříd 13/ 16

protected Class findclass(string pclassname) throws ClassNotFoundException { try { File lclassfile =... InputStream linput =... ByteArrayOutputStream loutput =... int i = 0; while ((i = linput.read()) >= 0) { loutput.write( i ); byte[] lbs = loutput.tobytearray(); return defineclass(pclassname, lbs, 0, lbs.length); catch (Exception e) { throw new ClassNotFoundException(...); Radek Kočí Seminář Java Zavádění tříd 14/ 16

Uvolnění třídy Uvolnění objektu (garbage collecting) pokud již neexistuje reference na objekt z živého vlákna finalizace objektu Třída může být uvolněna: pokud její zavaděč (class loader) podlehne garbage collectoru třídy zavedené bootstrap zavaděčem nemohou být nikdy uvolněny třída nemůže být uvolněna, pokud je její zavaděč potenciálně dostupný Radek Kočí Seminář Java Zavádění tříd 15/ 16

Shrnutí Třídy jsou zaváděny dynamicky Každá třída má svůj zavaděč Existují implicitní zavaděče Každá třída dědí zavaděč třídy, ze které bylo vyvoláno zavedení Je možné definovat vlastní zavaděče Radek Kočí Seminář Java Zavádění tříd 16/ 16