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/04.0006
Lekce 1 – Jazyk Java
„Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.“
Komentáře Klíčová slova (rezervovaná) ◦ Nemohou být využita k jiným než definovaným účelům
Příkazy – programy se skládají z různých typů příkazů, které reprezentují akce nebo skupiny akcí a končí středníkem Bloky – dvojice složených závorek – { } Proměnné – paměťová místa, ve kterých uchováváme informace
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Třídy ◦ Základní stavební kámen jazyka Java ◦ Každý program v jazyce Java se skládá alespoň z jedné třídy ◦ Třída – šablona (předpis) pro vytváření objektů
Metody ◦ Skupina příkazů pro vykonání operací Metoda main – speciální typ metody, výchozí bod při spouštění programu
Identifikátory ◦ Jednoznačný název pro označení proměnných, konstant apod. ◦ Musí být souvislé, nelze je přerušovat bílými znaky
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Java rozlišuje malá a velká písmena Konvence jazyka – Java Code Conventions, k dispozici na ◦ www.oracle.com/technetwork/java/codeconventions150003.pdf
Nepoužíváme znaky s diakritikou (editory ji většinou podporují, ale může být problém s výstupy programů) Třídy
◦ První písmeno je velké ◦ Pokud více slov v názvu – začátek každého slova velké písmeno ◦ Název třídy – ve většině případů podstatné jméno ◦ Příklad: Clovek, Ucet, SporiciUcet CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Metody ◦ Začínají malým písmenem ◦ Většinou se jedná o sloveso ◦ Příklad: main(), zalozUcet(), zrusUcet()
Proměnné ◦ Stejné zásady jako u metod – první písmeno malé, ostatní velká (více slov – camelCase) ◦ Příklad: pocetStudentu, znamkaProgramovani
Konstanty ◦ Všechna písmena velká, jednotlivá slova oddělena symbolem podtržení
◦ Příklad: MINIMALNI_VEK CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Java compiler ◦ Je součástí nástrojů obsažených v JDK ◦ Provádí kompilaci zdrojového kódu na bytecode javac [nastaveni] [soubory se zdroj. kodem] ◦ Příklad: javac HelloWorld.java
Výsledkem kompilace je bytecode uložený v souboru se stejným názvem (ve stejné složce) ◦ Příklad: HelloWorld.class ◦ Příklad nastavení: (do složky „classes“) javac –d classes HelloWorld.java
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Java Virtual Machine ◦ java [-nastaveni] class [argumenty] ◦ Příklad: java HelloWorld Program v jazyce Java Java API Java Virtual Machine Operační systém
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Nelze volit identifikátor s identickým názvem s některým rezervovaným slovem Jde o elementy definované přímo jako součást gramatiky jazyka Nelze je uživatelsky měnit – jsou součástí překladače
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Klíčová slova
Literály (doslovné hodnoty), které lze považovat za klíčová slova ◦ true, false, null CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Do konce řádku int i; //promenna je typu int
Víceřádkové /* * Toto je komentar na * vice radku */
Jednořádkové /* Toto je komentar na cely radek. */
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Dokumentační – JavaDoc /** * Tyto komentare lze * vyuzit pri vytvareni dokumentace * s vyuzitim nastroje JavaDoc */
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Primitivní
byte 8
short 16
int 32
long 64
float 32
double 64
int x = 7; //binarne 00000111
Referenční – odkazují na objekty v paměti, jejich velikost není pevně dána Student – objekt
Scanner– objekt
Student – referenční proměnná
vstup – referenční proměnná
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Nejzákladnější forma dat v jazyce Java Při deklaraci proměnné prim. dat. typu dochází k alokaci určitého počtu bitů v paměti Velikost alokované paměti záleží na datovém typu Začínají vždy malým písmenem (dle konvence)
Příklady:
◦ ◦ ◦ ◦
byte x = 10; char znak = ‘A’; boolean souhlas = true; double = 2563.5;
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Pri.
Operátor
Popis
Asoc.
1
(), []
Primární výrazový
L
2
++, --
Inkrement (post, pre)
P
2
+, -
Unární plus, minus (změna znaménka)
P
2
~
Bitový doplněk
P
2
()
Přetypování
P
2
!
Logická negace
P
3
*, /, %
Násobení, dělení, zbytek po dělení
L
4
+, -
Součet, rozdíl, spojování řetězců
L
5
<<, >>, >>>
Posun vpravo, posun vlevo
L
6
<, <=, >, >=
Menší, menší rovno, větší, větší rovno (vrací boolean)
L
6
instanceof
Porovnání typů (vrací boolean)
L
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Pri.
Operátor
Popis
Asoc.
7
==, !=
Rovno, není rovno (vrací boolean)
L
8
&
Logické a bitové AND
L
9
^
Logické a bitové XOR
L
10
|
Logické a bitové OR
L
11
&&
Podmínkové AND (vrací boolean)
L
12
||
Podmínkové OR (vrací boolean)
L
13
( ? : )
Podmínkový operátor
P
14
=, +=, /=, *=, %=, -=, <<=, >>=, >>>=, &=, ~=, ^=
Operátory přiřazení
P
Více operátorů se stejnou prioritou – rozhoduje asociativita int y = x += 1; // x = 2, vysledek bude 3 CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Základní tvar: if (vyraz) { prikaz;
}
Výsledkem výrazu musí být vždy true nebo false
Blok else je volitelný
if (vyraz) { prikaz1;
} else { prikaz2; } CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Obecný tvar vícenásobného rozhodování
switch (vyraz) { case konst1: blok1; case konst2: blok2; default: blokD; }
Výraz může být typu char, byte, short, int, enum
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Neznámý počet opakování – podmínka na začátku Probíhá dokud platí podmínka Nemusí proběhnout ani jednou
while (bool. vyraz) { prikaz;
fals e
?
}
true
int x = 2; while (x == 2) { System.out.println(x); ++x; } CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Neznámý počet opakování – podmínka na konci Probíhá dokud platí podmínka Proběhne vždy alespoň jednou
do { prikaz; } while (bool. vyraz); int x = 2;
true
do { System.out.println(x);
?
++x;
fals e
} while (x == 2); CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Známý počet opakování
for (inic.; podminka; iterace) {
teloCyklu; } for (int i = 0; i < 10; i++) { System.out.println("i = " + i); } for (int i = 20; i > 0; i--) { System.out.println("i = " + i); }
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Deklarace referenční proměnné a vytváření objektů
Jakého typu má být referenční proměnná
Student – objekt
studentNovak – referenční proměnná
Deklarace referenční proměnné
Student studentNovak
Vytvoření objektu
= new Student();
Vazba mezi referenční proměnnou a objektem
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
[modifikator] class <JmenoTridy> {
<metody> }
Příklad: public class Student { int znamkaProgramovani = 1; void vyhodnotZnamku() { if (znamkaProgramovani == 1) {
System.out.println("Student ma znamku vyborne"); } else... } } CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Základní syntaxe
[modifikator] [ = ]; public class Obdelnik { int delka; int sirka;
boolean jeZobrazen; String oznaceni; }
Přístup k atributům – tečková notace ◦ obdelnik1.delka = 5;
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Základní syntaxe
[modifikator] ([parametry]) { prikaz1; prikaz2;
... } public void nastavZnamku(int znamka) { znamkaProgramovani = znamka;
}
Volání metod – tečková notace, argumenty ◦ studentNovak.nastavZnamku(1);
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Deklarace ref. proměnné typu pole ◦ datovyTyp[] pole; ◦ datovyTyp pole[];
//povoleno, ale nedoporucuje se
Vytváření objektů typu pole ◦ pole = new datovyTyp[pocetPrvku]; ◦ pole = new double[10]; ◦ pole[0] odkazuje na první prvek pole ◦ pole[9] odkazuje na poslední prvek pole
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Deklarace ◦ datovyTyp[][] refPromenna;
Vytvoření objektu ◦ refPromenna = new datovyTyp[10][10];
Kombinace dekl. a inicializace ◦ datovyTyp[][] refPromenna = new datovyTyp[10][10];
Alternativa (nedoporučuje se) ◦ datovyTyp refPromenna[][] = new datovyTyp[10][10];
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
6
7
0
1 9
matice[0] matice
—
—
null
0
1
2
0
5
1
2
matice[1]
int[][] matice = new int[3][]; matice[0] = new int[2]; matice[0][0] = 6; matice[0][1] = 7; matice[1] = new int[3]; matice[1][0] = 9; CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
8
2012
Při vytváření objektů se používají konstruktory Nastavují vlastnosti objektů ◦ S využitím parametrů ◦ Bez parametrů
Nemá žádný návratový typ – nic nevrací Každá třída disponuje alespoň jedním konstruktorem i pokud nevytváříme konstruktor vlastní (implicitní, bez parametrů) Název konstruktoru se vždy shoduje s názvem třídy a konstruktor je vždy doplněn závorkami jako metody Pokud vytvoříme vlastní konstruktor, tak implicitní konstruktor není k dispozici (pokud si takový konstruktor nevytvoříme) Ukázka pomocí příkazu javap
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Stejné názvy metod a konstruktorů (více variant jedné metody nebo konstruktoru) Nelze pouze změnit návratový typ ◦ Pokud změněn pouze návratový typ, nejedná se o přetížení ◦ Návratový typ může být změněn
Přetížení (není přepis metod – další přednášky na téma základů dědičnosti) ◦ Musí být změněn počet nebo typ parametrů
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Stejné názvy instančních proměnných a parametrů – použije se vždy bližší definice proměnné this – přístup k instančním proměnným a metodám public class Student { String jmeno; void zmenJmeno(String jmeno) { this.jmeno = jmeno; } public static void main(String[] args) { Student st = new Student(); st.zmenJmeno("Adam"); } }
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Parametry
◦ Jsou lokální proměnné metod (jen mají definovanou hodnotu, lze ji měnit – až na výjimky final)
Typ argumentů musí vždy odpovídat typu parametrů Argumenty mohou být literální hodnoty i proměnné
V některých jazycích lze realizovat dva typy předávání parametrů (např. Pascal) ◦ Hodnotou – kopírování hodnoty argumentu do parametru ◦ Odkazem – propojení formálního parametru a skutečného argumentu
Jazyk Java – předávání parametrů hodnotou (pass by value)
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Deklarace statických proměnných, metod a konstant ◦ Modifikátor static
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Balíčky umožňují ◦ Organizovat větší projekty ◦ Členit programy na logické celky ◦ Vytvářet jmenné prostory – v každém balíčku vždy jen jedna třída stejného názvu
Jedná se o podobnou práci jako se složkami v operačním systému Plný název třídy se skládá z uvedení balíčků a názvu třídy (např. java.lang.Math, java.lang.String) Při využívání tříd z balíčků je nutné uvádět příkaz import CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Syntaxe třídy
<modifikator> class <Jmeno> [extends ] {
}
Vícenásobná dědičnost s využitím slova extends není v jazyce Java povolena ◦ Předek typu class je vždy pouze jen jeden ◦ Jiný typ vícenásobné dědičnosti (jedna třída má více předků) – rozhraní ◦ Jeden předek může mít i více potomků – násl. příklady
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
U tříd, na základě kterých nemá význam vytvářet objekty Pomocí modifikátoru abstract zamezíme vytvoření objektu Zamestnanec V diagramu tříd název třídy odlišíme kurzívou -jmeno: String -plat: double -datumNarozeni: Date
+getDeitals(): String Technik Manazer -oddeleni: String
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Přístupová práva
Modifikátor
V rámci třídy V rámci balíčku
Potomek
private
Ano
default
Ano
Ano
protected
Ano
Ano
Ano
public
Ano
Ano
Ano
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
Jiné balíčky
Ano
2012
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Potomek dědí metody od předka Změna implementace metody předka potomkem Překrývání metod (method overriding)
Např. metody ve třídách CD, DVD – vypis()
Metody mohou být překryty pouze tehdy, pokud jsou dostupné Privátní metody nejsou dostupné mimo třídu, kde jsou definovány ◦ Proto nemohou být překryty a v takovém případě se nejedná o překryté metody, ale zcela nezávislé metody
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Každá třída je potomkem třídy Object I pokud není definován žádný vztah dědičnosti, tak je předkem třídy třída Object
Viz příkaz javap
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Mnohotvárnost Proměnná m je typ Medium Do ref. proměnné lze přiřadit objekty jakékoliv podtřídy Rovněž v případě parametrů a návratových hodnot Medium m = new CD(); // v poradku String s = m.getAutor(); // chyba
CD m = new Medium(); // chyba
Pokud chceme pracovat jako s objektem CD, přetypování CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Princip podobný jako u primitivních datových typů Lze aplikovat také na objekty v hierarchii dědičnosti Souvisí s polymorfismem
Object o = new Student(); // implicitni pretypovani
Třídu Object tímto způsobem používáme jen v odůvodněných případech
Student s = o; // chyba
Chyba – objekt, na který odkazuje ref. prom. "o" nemusí být objektem typu Student CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Syntaxe stejná jako u prim. datových typů
Object o = new Student(); // implicitni pretypovani Student s = o; // chyba Student s = (Student) o; // v poradku
Explicitní přetypování musí být realizováno při přetypování z předka na potomka Nemusí vždy skončit úspěchem
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Test, zda se u objektu jedná o instanci určité třídy Object mujObjekt = new Kruznice(); ...
if (mujObjekt instanceof Kruznice) { System.out.println("Prumer kruznice je: " + ((Kruznice)mujObjekt).getPrumer()); ... }
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Errors – způsobené JVM, vnitřní systémové chyby Exceptions – způsobené programem a okolnostmi (mohou být zachyceny a ošetřeny)
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Kontrolované výjimky ◦ Třída Exception a její potomci ◦ Použití pro předpokládané chyby ◦ Je vyžadováno jejich ošetření programátorem
Nekontrolované výjimky ◦ Třídy RuntimeException a Error a jejich potomci ◦ Použití pro neočekávané chyby
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
Konstrukce podobná třídám, ale může obsahovat pouze ◦ Konstanty ◦ Abstraktní metody (neobsahují žádnou implementaci a mají modifikátor abstract)
Rozhraní je podobné abstraktním třídám, ale účelem je specifikace chování objektů (např. faktura je splatná, zaměstnancům je nutné platit apod. – viz příklady na cvičení).
CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012
public interface ISplatne { public double MAX_PLATBA = 100000.0; public void zaplatit(); }
stejné
Přístup ke konstantám je stejný jako v případě použití tříd CZ.1.07/1.3.12/04.0006 PRJSS - Lekce 1 - Jazyk Java
2012