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

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

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

Java Řetězce Java, zimní semestr

Úvod do programovacích jazyků (Java)

Iterator & for cyklus

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

Java Výjimky Java, zimní semestr

Java Enum Java, zimní semestr ,2017 1

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

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

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

Teoretické minimum z PJV

Generické programování

typová konverze typová inference

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Principy objektově orientovaného programování

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

JAVA. Krátke poznámky:

Seminář Java IV p.1/38

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/

Abstraktní datové typy: zásobník

Výčtový typ strana 67

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

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

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

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

Seminář Java II p.1/43

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

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

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 Javě I. Únor 2009

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

Programování v Javě I. Leden 2008

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

20. Projekt Domácí mediotéka

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

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

Jazyk C# (seminář 6)

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

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

Algoritmizace a programování

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.

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

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

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

PREPROCESOR POKRAČOVÁNÍ

Dědění, polymorfismus

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

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

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

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.

Dědičnost (inheritance)

Úvod do programovacích jazyků (Java)

Abstraktní třída a rozhraní

Konstruktory a destruktory

Dynamicky vázané metody. Pozdní vazba, virtuální metody

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

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

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

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

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

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

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

1. Programování proti rozhraní

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Jazyk C++ I. Šablony 2

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

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

Jazyk C# (seminář 3)

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

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

11. Dědičnost. Dědičnost strana 103

Java - řazení objektů

5. Ř etězce (třída String)

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

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

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Programování v C++ VI

Objektově orientované programování

Více o konstruktorech a destruktorech

Úvod do programování - Java. Cvičení č.4

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

Algoritmizace a programování

Regulární výrazy. Vzory

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

1. Dědičnost a polymorfismus

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

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

Algoritmizace a programování

Typický prvek kolekce pro české řazení

Základy objektové orientace I. Únor 2010

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

IRAE 07/08 Přednáška č. 1

Zápis programu v jazyce C#

Programovací jazyk Java

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

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

Datové typy strana 29

První kapitola úvod do problematiky

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

Transkript:

JAVA Třídy

Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky 2

Konstruktor konstruktor inicializace objektu deklarace jmenuje se jako třída žádný návratový typ modifikátor pouze viditelnost více konstruktorů různé parametry určí se podle parametrů za new class MyClass { int value; public MyClass() { value = 10; public MyClass(int v) { value = v; 3

Konstruktor konstruktor předka super() jiný konstruktor stejného objektu this() volání jiných konstruktorů jen jako první příkaz a pouze jednou vždy se nejdřív volá konstruktor předka i když není explicitně uveden výjimka this() třída bez definice konstruktoru standardní konstruktor jen volá předka 4

Likvidace objektů není operátor delete (dispose apod.) garbage collector metoda finalize() zavolá se před likvidací objektu není to destruktor jako v C++ a jiných jazycích!!! neví se, kdy se zavolá není zaručeno jeho volání objekty nemusí být zlikvidovány přes garbage collector např. při ukončení programu volání finalize se neřetězí 5

Inicializace atributů inicializace v konstruktoru přímá inicializace class MyClass { int a = 5; float b = 1.2; MyClass2 c = new MyClass2(); int d = fn(); int e = g(f); // spatne! int f = 4;... 6

Inicializace: static pouze jednou před prvním přístupem nebo před vytvořením první instance třídy přímá static int a = 1; static inicializator class MyClass { static int a; static { a = 10;... 7

Inicializace: "ne-static static" podobné jako static inicializátor nezbytné pro inicializaci anonymních vnitřních tříd class MyClass { int a; int b; { a = 5; b = 10;... 8

Třídy: dědičnost určení předka extends JmenoPredka jednoduchá dědičnost pouze jeden předek třída java.lang.object každá třída je jejím potomkem jediná třída která nemá předka vícenásobná dědičnost přes Interface přetypování automaticky potomek na předka class A { /*...*/ class B extends A { /*...*/ A a = new B(); 9

Třídy: viditelnost členů atributy a metody public viditelné odkudkoliv (pokud je viditelná i třída) protected viditelné ve stejném balíku a v potomcích private viditelné jen ve třídě, kde jsou definovány bez uvedení viditelné ve stejném balíku určuje se pro každý prvek (nejsou oddíly jako v C++) 10

Třídy: další modifikátory final atribut konstantní musí mít inicializátor po inicializaci nelze do něj nic přiřadit metoda nelze v potomcích předefinovat transient atribut není součástí persistentního stavu objektu volatile atribut přistupuje nesynchronizovaně několik vláken nelze provádět optimalizace 11

Třídy: modifikátory metod abstract není implementace metody třída musí být také abstract od třídy nelze vytvářet instance tělo metody středník synchronized volající vlákno musí nejdřív získat zámek na volaném objektu (pokud to je static metoda, tak na třídě) native nativní metoda implementace přímo ve strojovém kódu konkrétní platformy (externí knihovna) tělo metody středník static viz předchozí přednáška 12

Třídy: modifikátory metod není modifikátor virtual všechny metody jsou virtuální statické metody nejsou virtuální public class A { public void foo() { System.out.print( A ); public class B extends A { public void foo() { System.out.print( B );... A a = new B(); a.foo(); // vypíše B public class As { public static void foo() { System.out.print( A ); public class Bs extends As { public static void foo() { System.out.print( B );... A a = new B(); a.foo(); // vypíše A 13

Statické metody statické metody se volají na třídě nepatří žádnému objektu class As { public static void foo() {... As.foo(); lze je volat i na objektu (instanci třídy); ve skutečnosti se vezme typ podle reference hodnota objektu je nepodstatná typ (a tedy která statická metoda bude volaná) se určí už v době překladu viz předchozí slide 14

this reference na objekt právě volané metody lze použít pouze v těle metod nebo inicializátoru objektu public class MyClass { private int a; public MyClass(int a) { this.a = a; 15

super přístup k členům přímého předka pokud S je přímý předek C ((S) this).name ~ super.name nelze použít super.super class T1 { int x = 1; class T2 extends T1 { int x = 2; class T3 extends T2 { int x = 3; void test() { System.out.println(x); // 3 System.out.println(super.x); // 2 System.out.println(((T2)this).x); // 2 System.out.println(((T1)this).x); // 1 16

super super lze použít i na metody POZOR nefunguje přetypování this program lze přeložit, ale bude se rekurzivně volat stejná metoda class TX1 { public void foo() { /* */ class TX2 extends TX1 { public void foo() { /* */ public class TX3 extends TX2 { public void foo() { ((TX1) this).foo(); System.out.println("TX3.foo()"); 17

Java Interface 18

Interface pouze definice rozhraní žádná implementace od Java 8 i implementace může obsahovat hlavičky metod atributy vnitřní interface public interface Iterator { boolean hasnext(); Object next(); void remove(); 19

Interface: atributy implicitně jsou public, static a final musejí být inicializovány v inicializaci nelze použít super a this public interface Iface { int a = 5; String s = "ahoj"; 20

Interface: metody bez implementace implicitně jsou abstract a public nelze definovat synchronized native final default metody od Java 8 obsahují implementaci vhodné pro rozšiřování interfaců static metody od Java 8 stejné jako static metody ve třídách 21

Interface: dědičnost vícenásobná dědičnost interface Iface1 {... interface Iface2 {... interface Iface3 extends Iface1, Iface2 {... 22

Třídy a interface třídy implementují interface public interface Colorable { void setcolor(int c); int getcolor(); public class Point { int x,y; public class ColoredPoint extends Point implements Colorable { int color; public void setcolor(int c) { color = c; public int getcolor() { return color; Colorable c = new ColoredPoint(); 23

Třídy a interface třída musí implementovat všechny metody interface s výjimkou default metod neplatí pro abstract třídy jedna metoda ve třídě může implementovat více interfaců interface A { void log(string msg); interface B { void log(string msg); public class C implements A, B { public void log(string msg) { System.out.println(msg); 24

Interfacy a default metody implementace ve třídě má vždy přednost při implementaci dvou interfaců se stejnou default metodou nutno implementovat metodu ve třídě jinak třída nelze přeložit interface If1 { default void foo() { class Mixed implements If1, If2 { interface If2 { default void foo() { nelze přeložit 25

Java Pole 26

Definice pole pole ~ objekt proměnná ~ reference int[] a; // pole short[][] b; // dvourozm. pole Object[] c, // pole d; // pole long e, // skalar f[]; // pole 27

Inicializace pole "statická" int[] a = { 1, 2, 3, 4, 5 ; char[] c = { 'a', 'h', 'o', 'j' ; String[] s = { "ahoj", "nazdar" ; int[][] d = { { 1, 2, { 3, 4 ; 28

Incializace pole dynamická int[] array = new int [10]; float[][] matrix = new float[3][3]; nemusí se zadávat všechny rozměry stačí několik prvních rozměrů místo ostatních prázdné závorky float[][] matrix = new float[3][]; for (int i=0;i<3;i++) matrix[i] = new float [3]; // spatne int[][][][] a = new int[3][][3][]; 29

Inicializace pole "nepravoúhelníková" pole int a[][] = { {1, 2, {1, 2, 3, {1, 2, 3, 4, 5 ; int b[][] = new int [3][]; for (int i=0; i<3; i++) b[i] = new int [i+1]; 30

Inicializace pole při vytváření pole se nevolá žádný konstruktor prvky ve vytvořeném poli (pomocí new) defaultní hodnoty reference null int 0... výrazy při vytváření pole (new) postupně plně vyhodnocovány zleva int i = 4; int ia[][] = new int[i][i=3]; // pole 4x3 31

Přístup k poli pole[index] indexy pole vždy 0..délka-1 vždy se kontrolují meze nelze vypnout při překročení výjimka ArrayIndexOutOfBoundsException délka pole atribut length int[] a = { 1, 2, 3 ; for (int i=0; i<a.length; i++) {... 32

Java Řetězce 33

Řetězec instance třídy java.lang.string nejsou to pole znaků (jako v C/C++) kompilátor s nimi zachází téměř jako s primit. typy řetězcové konstanty = instance třídy String nezměnitelné!!! pro změny třídy StringBuffer, StringBuilder operátor + spojování řetězců pokud je ve výrazu aspoň jeden řetězec -> vše se zkonvertuje na řetězec metoda tostring() definována na třídě Object obvyklý kandidát na předefinování vznikne nový řetězec 34

java.lang.string konstruktory String(); String(char[] value); String(byte[] bytes); String(byte[] bytes, String charsetname); String(String value); String(StringBuffer value); String(StringBuilder value); 35

java.lang.string metody int length(); char charat(int index); IndexOutOfBoundException boolean equals(object o); porovnává řetězce == porovnává reference String a = new String("ahoj"); String b = new String("ahoj"); System.out.println(a==b); // false System.out.println(a.equals(b)); //true 36

java.lang.string metody int compareto(string s); porovnává lexikograficky int comparetoignorecase(string s); int indexof(char c); int indexof(string s); vracejí -1, pokud se nevyskytuje String substring(int beginindex); String substring(int beginindex, int endindex); String replacefirst(string regexp, String repl); String replaceall(string regexp, String repl); 37

Řetězce metody (pokrač.) String join(charsequence delimiter, CharSequence... elements); od Java 8 metody lze volat i na řetězcových konstantách String s;... if ("ahoj".equals(s)) {... 38

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