|
1
|
- Róbert Novotný
- robert.novotny@upjs.sk
- 26. 10. 2006
|
|
2
|
- dosiaľ sme mali jednoduché názvy tried – Pes, Veľryba...
- problém nastáva, keď dva projekty pomenujú triedu rovnako
- Attribute: spracovávač webových stránok v HTML
- Attribute: v podpore pre tlač
- Attribute: v projekte IGAP T. Horvátha
- Čo keď chcem používať vo svojej aplikácii aj HTML spracovávač aj IGAP?
- Riešenie 1: dohoda medzi programátormi, premenovanie tried
- HTMLAttribute, PrintAttribute, IgapAttribute
- problém: s T. Horváthom sa dohodnete, s autormi Javy už nie
|
|
3
|
- Riešenie 2: balíčky
- zaveďme hierarchickú štruktúru á la adresáre pre triedy
- každá trieda má názov získaný z hierarchie
- org.htmlparser.Attribute: v HTML parseri
- javax.print.attribute.Attribute: v podpore pre tlač
- uinf.wid.Attribute: v projekte IGAP T. Horvátha
|
|
4
|
- Ak chceme vytvoriť novú inštanciu HTML atribútu, musíme uviesť celý
názov cesty.
- org.htmlparser.Attribute atribút = new org.htmlparser.Attribute();
- Problém: dá si niekto na obed toto?
- org.springframework.aop
- .framework.autoproxy.metadata
- .AttributesThreadLocalTargetSourceCreator c
- = new org.springframework.aop
- .framework.autoproxy.metadata
- .AttributesThreadLocalTargetSourceCreator();
|
|
5
|
- namiesto klepkania názvu triedy použijeme import
|
|
6
|
- každá trieda prináleží do nejakého balíčka
- výnimka-nevýnimka: existuje implicitný balíček (default package), ktorý
je tvorený ,,koreňovým adresárom" hierarchie
- náš Pes bol zatiaľ v implicitnom balíčku
- triedy v implicitnom balíčku netreba importovať
- trieda v balíčku nevidí implicitný balíček
- v implicitnom balíčku nie sú štandardne žiadne triedy (pokiaľ
nepoužívame prasácky napísané knižnice)
|
|
7
|
- Odteraz zaradíme každú našu triedu do balíčka
- Príklad: novotnyr.zvierata.Pes
- Ale ako?
|
|
8
|
- Zabudli sme sa spýtať: čo napr. taký String?
- String sa volá java.lang.String
- Triedy v balíčku java.lang sa nemusia importovať
- Trieda v rovnakom balíčku sa nemusí importovať
|
|
9
|
- Viacero importov z rovnakého balíčka vieme zapísať skrátene
|
|
10
|
- Trieda automaticky importuje (= netreba písať import) len triedy zo
svojho balíčka
- Musíme importovať aj triedy z nadradených, aj z podriadených balíčkov
|
|
11
|
- Hviezdičkový import znamená len ,,importuj triedy z tohto balíčka"
- Triedy z podriadených balíčkov sa takto NEimportujú
- import java.util.* importne java.util.ArrayList, java.util.HashMap, atď
- NEimportne napr. triedu java.util.prefs.Preferences, ani napr. java.util.regex.Pattern
- nedá sa ani použiť import java.util.*.*.*
|
|
12
|
- Zdrojové súbory tried sa doteraz váľali v jednom adresári.
- Norma: skompilované triedy musia byť uložené v adresárovej štruktúre
zodpovedajúcej hierarchii balíčkov
- Príklad: skompilovaná trieda novotnyr.zvierata.Pes musí byť v súbore
- nejakýAdresár\novotnyr\zvierata\Pes.class
|
|
13
|
- Ako Java vie, že triedu novotnyr.zvierata.Pes má načítať práve z tohto
adresára?
- nejakýAdresár\novotnyr\zvierata\Pes.class
- premenná prostredia CLASSPATH
- WinXP: Ovládacie panely | Systém | Upresniť | Premenné prostredia |
Systémové premenné
- obsahuje adresáre, v ktorých sa má začať prehľadávať hierarchia balíčkov
|
|
14
|
- Príklad:
- majme CLASSPATH=C:\
- chceme používať triedu novotnyr.zvierata.Pes uloženú v D:\Java\psi\novotnyr\zvierata\Pes.class
- Riešenie
- prehľadávame CLASSPATH:
- hľadáme súbor C:\novotnyr\zvierata\Pes.class
- taký súbor neexistuje = chyba!
|
|
15
|
- Riešenie
- CLASSPATH upravíme na
- CLASSPATH=C:\;D:\Java\psi
- prehľadávame CLASSPATH
- C:\novotnyr\zvierata\Pes.class nenájdený
- D:\Java\psi\novotnyr\zvierata\Pes.class nájdený = OK!
- Nenastavený CLASSPATH je to isté ako
|
|
16
|
- CLASSPATH môžeme nastaviť aj pri spúšťani java.exe
- java –cp C:\;D:\Java\psi novotnyr.zvierata.Pes
- Integrované vývojové prostredia riešia CLASSPATH sami
|
|
17
|
- Niekedy je vhodné mať metódy s rovnakým názvom
- Preťažené (overloaded) metódy
- Ak majú dve metódy rovnaký názov, musia mať rôzne typy parametrov.
|
|
18
|
- Príklad: notoricky známa metóda println() v System.out
- 9 preťažených metód: pre každý primitívny dátový typ jedna
- Ak by neexistovalo preťaženie, museli by sme mať metódy
- printlnInt(int i);
- printlnFloat(float f);
- ....
|
|
19
|
- Pozor: metódy s rôznymi návratovými typmi sa nepovažujú za preťažené, ba
priam sa nie sú povolené
|
|
20
|
- Spomnime:
- Pes dunčo = new Pes();
|
|
21
|
|
|
22
|
- názov konštruktoru musí byť rovnaký ako názov triedy
- konštruktor nemá uvedený návratový typ a v jeho tele sa nevracia žiadna
hodnota
|
|
23
|
- konštruktory môžu mať parametre
- presne ako metódy
|
|
24
|
- konštruktorov môžeme mať koľko len chceme
|
|
25
|
- Pozor! Ak používame preťažené konštruktory a chceme používať aj prázdny
konštruktor, musíme ho v triede explicitne napísať!
|