7. Datové typy v Javě



Podobné dokumenty
Seminář Java II p.1/43

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

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

Programování v Javě I. Leden 2008

Úvod do programovacích jazyků (Java)

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

ADT/ADS = abstraktní datové typy / struktury

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

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

Úvod do programovacích jazyků (Java)

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

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

Algoritmizace a programování

Algoritmizace a programování

KTE / ZPE Informační technologie

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

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/

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

Programovací jazyk Pascal

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Algoritmizace a programování

5 Přehled operátorů, příkazy, přetypování

Algoritmy a datové struktury

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Jazyk C# a platforma.net

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Programování v jazyce JavaScript

Zápis programu v jazyce C#

Proměnné a datové typy

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Textové soubory. alg9 1

6. Příkazy a řídící struktury v Javě

Datové typy a jejich reprezentace v počítači.

Algoritmizace a programování

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

Java reprezentace dat, výrazy. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Teoretické minimum z PJV

Datové typy strana 29

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

MQL4 COURSE. By Coders guru -3 DATA TYPES. Doufám, že předchozí lekce SYNTAX se vám líbila. V té jsme se pokoušeli zodpovědět:

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

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

Úvod do programování - Java

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

Reprezentace dat v informačních systémech. Jaroslav Šmarda

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

Algoritmizace a programování

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Datové struktury. alg12 1

2. Základy jazyka. Proměnné. Základy jazyka

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Výčtový typ strana 67

Jak v Javě příkazy, operace a výrazy. BD6B36PJV 00 Fakulta elektrotechnická České vysoké učení technické

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

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

Principy objektově orientovaného programování

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

1. Programování proti rozhraní

Generické programování

PREPROCESOR POKRAČOVÁNÍ

Úvod do programování v jazyce Java

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 )/ ;

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Příkazy a řídicí struktury v Javě. Tomáš Pitner, upravil Marek Šabo

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

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

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

Výrazy, operace, příkazy

Čísla a číselné soustavy.

Typický prvek kolekce pro české řazení

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Základy jazyka C. Základy programování 1 Tomáš Kühr

Soubor jako posloupnost bytů

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

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

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

Jazyk C# (seminář 6)

Objektově orientované programování

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

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

DATOVÉ TYPY POKRAČOVÁNÍ

Konstruktory a destruktory

Data, výrazy, příkazy

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

Abstraktní datové typy: zásobník

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

"Václav Klaus". public class Clovek { protected String jmeno; protected int roknarozeni; public Clovek(String j, int rn) {

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

Transkript:

7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů Primitivní vs. objektové datové typy - opakování Java striktně rozlišuje mezi hodnotami primitivních datových typů (čísla, logické hodnoty, znaky) a objektových typů (řetězce a všechny uživatelem definované [tj. vlastní] typy-třídy) Základní rozdíl je v práci s proměnnými: proměnné primitivních typů přímo obsahují danou hodnotu, zatímco proměnné objektových typů obsahují pouze odkaz na příslušný objekt Důsledek -> dvě objektové proměnné mohou nést odkaz na tentýž objekt Přiřazení proměnné primitivního typu - opakování Příklad: float a = 1.23456; float b = a; a += 2; a = 1.23456b2a3.23456b1.23456 Přiřazení objektové proměnné - opakování Příklad, deklarujeme třídu Cislo takto: public class Cislo { private float hodnota; public Cislo(float h) { hodnota = h; public void zvyso(float kolik) { hodnota += kolik; public void vypis() { System.out.println(hodnota); nyní ji použijeme: Cislo c1 = new Cislo(1.23456); Cislo c2 = c1; c1.zvyso(2);

c1.vypis(); c2.vypis(); 3.23456 3.23456 hodnotac1c2 Primitivní datové typy Proměnné těchto typů nesou elementární, z hlediska Javy atomické, dále nestrukturované hodnoty. Deklarace takové proměnné (kdekoli) způsobí: 1. rezervování příslušného paměťového prostoru (např. pro hodnotu int čtyři bajty) 2. zpřístupnění (pojmenování) tohoto prostoru identifikátorem proměnné V Javě existují tyto skupiny primitivních typů: 1. integrální typy (obdoba ordinálních typů v Pascalu) - zahrnují typy celočíselné (byte, short, int a long) a typ char; 2. typy čísel s pohyblivou řádovou čárkou (float a double) 3. typ logických hodnot (boolean). Integrální typy - celočíselné V Javě jsou celá čísla vždy interpretována jako znaménková "Základním" celočíselným typem je 32bitový int s rozsahem -2 147 483 648 až 2147483647 větší rozsah (64 bitů) má long, cca +/- 9*10^18 menší rozsah mají short (16 bitů), tj. -32768..32767 byte (8 bitů), tj. -128..127 Pro celočíselné typy existují (stejně jako pro floating-point typy) konstanty - minimální a maximální hodnoty příslušného typu. Tyto konstanty mají název vždy Typ.MIN_VALUE, analogicky MAX... Viz např. Minmální a maximální hodnoty Integrální typy - "char" char představuje jeden 16bitový znak v kódování UNICODE Konstanty typu char zapisujeme v apostrofech - 'a', 'Ř' pomocí escape-sekvencí - \n (konec řádku) \t (tabulátor) hexadecimálně - \u0040 (totéž, co 'a') oktalově - \127 Typ char - kódování

Java vnitřně kóduje znaky a řetězce v UNICODE, pro vstup a výstup je třeba použít některou za serializací (převodu) UNICODE na sekvence bajtů: např. vícebajtová kódování UNICODE: UTF-8 a UTF-16 osmibitová kódování ISO-8859-x, Windows-125x a pod. Problém může nastat při interpretaci kódování znaků národních abeced přímo ve zdrojovém textu programu. Ve zdroj. textu správně napsaného javového vícejazyčného programu by žádné národní znaky VŮBEC neměly vyskytovat. Je vhodné umístit je do speciálních souborů tzv. zdrojů (v Javě objekty třídy java.util.resourcebundle). Čísla s pohyblivou řádovou čárkou Kódována podle ANSI/IEEE 754-1985 float - 32 bitů double - 64 bitů Možné zápisy literálů typu float (klasický i semilogaritmický tvar) - povšimněte si "f" za číslem - je u float nutné!: float f = -.777f, g = 0.123f, h = -4e6f, 1.2E-15f; double: tentýž zápis, ovšem bez "f" za konstantou!, s větší povolenou přesností a rozsahem Vestavěné konstanty s pohyblivou řádovou čárkou Kladné a záporné nekonečno: Float.POSITIVE_INFINITY, totéž s NEGATIVE... totéž pro Double obdobně existují pro oba typy konstanty uvádějící rozlišení daného typu - MIN_VALUE, podobně s MAX... Konstanta NaN - Not A Number Viz také Minimální a maximální hodnoty Typ logických hodnot - boolean Přípustné hodnoty jsou false a true. Na rozdíl od Pascalu na nich není definováno uspořádání. Typ void Význam podobný jako v C/C++. Není v pravém slova smyslu datovým typem, nemá žádné hodnoty. Označuje "prázdný" typ pro sdělení, že určitá metoda nevrací žádný výsledek. Pole v Javě Pole v Javě je speciálním objektem Můžeme mít pole jak primitivních, tak objektových hodnot

pole primitivních hodnot tyto hodnoty obsahuje pole objektů obsahuje odkazy na objekty Kromě pole v Javě existují i jiné objekty na ukládání více hodnot - tzn. kontejnery, viz dále Syntaxe deklarace typhodnoty[]jménopole na rozdíl od C/C++ nikdy neuvádíme při deklaraci počet prvků pole - ten je podstatný až při vytvoření objektu pole Syntaxe přístupu k prvkům jménopole[indexprvku] Používáme jak pro přiřazení prvku do pole: jménopole[indexprvku] = hodnota; tak pro čtení hodnoty z pole proměnná = jménopole[indexprvku]; Syntaxe vytvoření objektu pole: jako u jiného objektu - voláním konstruktoru: jménopole = new typhodnoty[početprvků]; nebo vzniklé pole rovnou naplníme hodnotami/odkazy jménopole = new typhodnoty [] {prvek1, prvek2,... ; Pole (2) Pole je objekt, je třeba ho před použitím nejen deklarovat, ale i vytvořit: Clovek[] lidi; lidi = new Clovek[5]; Clovek Nyní můžeme pole naplnit: lidi[0] = new Clovek("Václav Klaus", Clovek.MUZ); lidi[1] = new Clovek("Libuše Benešová", Clovek.ZENA); lidi[0].vypisinfo(); lidi[1].vypisinfo(); Nyní jsou v poli lidi naplněny první dva prvky odkazy na objekty. Zbylé prvky zůstaly naplněny prázdnými odkazy null. Pole - co když deklarujeme, ale nevytvoříme? Co kdybychom pole pouze deklarovali a nevytvořili: Clovek[] lidi; lidi[0] = new Clovek("Václav Klaus", Clovek.MUZ); Toto by skončilo s běhovou chybou "NullPointerException", pole neexistuje, nelze

do něj tudíž vkládat prvky! Pokud tuto chybu uděláme v rámci metody: public class Pokus { public static void main(string args[]) { String[] pole; pole[0] = "Neco"; překladač nás varuje: Pokus.java:4: variable pole might not have been initialized pole[0] = "Neco"; ^ 1 error Pokud ovšem pole bude proměnnou objektu/třídy: public class Pokus { static String[] pole; public static void main(string args[]) { pole[0] = "Neco"; Překladač chybu neodhalí a po spuštění se objeví: Exception in thread "main" java.lang.nullpointerexception at Pokus.main(Pokus.java:4) Pole - co když deklarujeme, vytvoříme, ale nenaplníme? Co kdybychom pole deklarovali, vytvořili, ale nenaplnili příslušnými prvky: Clovek[] lidi; lidi = new Clovek[5]; lidi[0].vypisinfo(); Toto by skončilo také s běhovou chybou NullPointerException: pole existuje, má pět prvků, ale první z nich je prázdný, nelze tudíž volat jeho metody (resp. vůbec používat jeho vlastnosti)! Kopírování polí V Javě obecně přiřazení proměnné objektového typu vede pouze k duplikaci odkazu, nikoli celého odkazovaného objektu. Nejinak je tomu u polí, tj.: Clovek[] lidi2; lidi2 = lidi1; V proměnné lidi2 je nyní odkaz na stejné pole jako je v lidi1. Zatímco, provedeme-li vytvoření nového pole + arraycopy, pak lidi2 obsahuje duplikát/klon/kopii původního pole. Clovek[] lidi2 = new Clovek[5]; System.arraycopy(lidi, 0, lidi2, 0, lidi.length); viz též Dokumentace API třídy "System"

Samozřejmě bychom mohli kopírovat prvky ručně, např. pomocí for cyklu, ale volání System.arraycopy je zaručeně nejrychlejší a přitom stále platformově nezávislou metodou, jak kopírovat pole. Také arraycopy však do cílového pole zduplikuje jen odkazy na objekty, nevytvoří kopie objektů!