Java FAQ velmi rozsáhlý soubor otázek a odpovědí

Komentáře

Transkript

Java FAQ velmi rozsáhlý soubor otázek a odpovědí
Java FAQ
velmi rozsáhlý soubor otázek a odpovědí
předmět A7B36PJV - Programování v Javě
Martin Bloch
katedra počítačů
ČVUT v Praze, FEL
Evropský sociální fond
Praha & EU: Investujeme do vaší budoucnosti
Odkaz na výukové materiály:
http://edux.feld.cvut.cz/courses/A7B36PJV/
Evropský sociální fond
Praha & EU: Investujeme do vaší budoucnosti
Evropský sociální fond
Praha & EU: Investujeme do vaší budoucnosti
JAQ = Java Answered Questions
Projekt JAQ podporuje samostudium Javy 7 mírně pokročilých studentů, jakož i přípravu
písemných zkoušek z tohoto předmětu.
Obsahuje přes 600 otázek s opovědmi v souboru JAQ_3.0.txt (níže) v Unicodu a dále
program Selector3.java (níže), který umožňuje vybrat zvolený druh a počet náhodných
otázek pro studenta a tytéž otázky i s odpovědmi pro examinátora. Obé je volně
použitelné. Je radno provozovat tento program ve vhodném IDE (např. Netbeans) v němž
lze oba výstupy vyjevit na displeji a odtud případně stáhnout do nějakého editoru, např.
pro tiskové úpravy.
F***************** JAQ Java Asked Questions v. 3.0.0 ***** pro Java 7 SE *****************
*
1
2
3
4
5
6
7
8
*12345678901234567890123456789012345678901234567890123456789012345678901234567890
123456789
* Připomínky, doplňky, návrhy, náměty apod. posílejte na [email protected]
**********************************************************************************
********
*
TENTO TEXT JE DOBRE CITELNY V EDITORU NETBEANS I V NOTEPADU
**********************************************************************************
********
* A-aplety, C-kolekce, D-JDBC, E-události, G-grafika, I-image, J-swing, N-sítě,
* P-primitivy, S-proudy, T-vlákna, U-utility, V-JVM, W-awt, X-vyjímky, Y-generika, Z-základy
**********************************************************************************
********
A#091 V jakém pořadí jsou volány hlavní metody apletu ?
init(), start() <- -> stop(), destroy()
A#092 Uveďte příklad umístění apletu do HTML stránky.
<APLET CODE=xxx.class CODEBASE=... ARCHIVE=... WIDTH=... HEIGHT=...>
<PARM NAME1="..." VALUE1="..."> <PARM NAME2="..." VALUE2="...">
</APPLET>
V HTML5 se píše místo <APPLET> </APPLET> <OBJECT> </OBJECT>
A#093 Které základní omezení má aplet oproti aplikacím ?
Přistupovat k lokálním souborům, zjišťovat či měnit vlastnosti systému,
vytvářet knihovny a definovat nativní metody,
spouštět programy, navazovat komunikaci s třetí stranou.
A#094 Jak lze omezení apletu překonat ?
Pomocí grantu a certifikátu.
A#251 Co je applet, jak se spouští a jaká má omezení ?
Aplet je instanceof Applet spustitelný v browseru nebo appletvieweru.
Nemůže přistupovat k lokálnímu systému souborů, systémovým proměnným,
spouštět programy a navazovat komunikaci se třetí stranou.
A#483 Co je appletviewer, kde se nalézá, jaké má výhody a jaká omezení ?
Testovací program apletů, v jdk/bin, přesně interpretuje právě jen tag APPLET.
A#484 Která třída je přímým předkem java.applet.Applet a která přímým potomkem ?
java.awt.Panel a javax.swing.JApplet nebo ta kterou vytvoříte.
A#506 Jak lze použít přetížených konstruktorů Appletu / JAppletu ?
Nelze, neboť browser umí zavolat jen bezparametrický konstruktor.
Funkcionalitu konstruktoru supluje metoda init().
A#587 K čemu se v apletu využívá metoda public static void main(String[] args) // ?
K ničemu, neboť browser ji neumí zavolat. Volá bezparametrický konstruktor a
metody init, start, stop a destroy.
C#120 Napište úryvek výpisu objektů v kolekci referované interfejsem java.util.Collection .
Collection coll = … ;
for ( Object o : coll ) System.out.println(o);
// anebo
Iterator it = coll.iterator();
for ( Iterator it = coll.iterator(); it.hasNext() ; )
System.out.println( it.next() );
C#150 K čemu slouží třída java.util.HashMap, v čem je výhodná a jaké má nejdůležitější metody ?
Jako uložiště dvojic (Object key, Object value) v operační paměti s kvazikonstantním
přístupem, rozšiřovatelné, put(key,value) get(key)
C#151 Co jsou, k čemu slouží a co definují java.lang.Comparable a java.util.Comparator ?
Oba jsou interfejsy a slouží pro porovnání objektů daného typu
- první jako "naturální" implementací typu a konkrétní metodou int compareTo(Object o)
- druhý pro vytváření uživatelských komparátorů (pro řazení a uspořádání objektů)
definuje metody resp. int compare(Object o, Object o) a equals(Object o).
Není třeba přístup ke zdrojovému kódu porovnávaného typu.
C#171 Co splňují objekty v kolekci java.util.TreeSet a jak se toho dosáhne ?
Uspořádání. Buď jsou přirozeně Comparable nebo je dodán Comparator.
C#241 Jak lze vytvořit synchronizovanou kolekci java.util.ArrayList ?
List x = Collections.synchronizedList( new ArrayList() );
C#243 Jaký je rozdíl mezi Collection a Collections v java.util ?
Interfejs (ne pro mapy) vs. třída užitečných statických metod (i pro mapy).
C#384 Jak zajistit neměnitelnost nějaké kolekce - např. ArrayList ?
Vytvořit
private List l = new ArrayList(); a ten naplnit,
pak vytvořit public List ul = Collections.unmodifiableList(l);
C#553 Co je objekt typu HashMap() a na čem závisí jeho efektivita ?
API realizace interfejsu Map užitím hešové tabulky, což umožnuje
kvazikonstantní časovou složitost vkládání a přístupu k datům, tj. O(1).
Efektivita záleží na kvalitě metody hashCode() a dostatečném rezervním
prostoru ( asi >30 % )
C#554 Co je objekt typu TreeMap() a jaká je efektivitu jeho činnosti ?
API realizace interfejsu SortedMap vyváženým stromem, což umožnuje
logaritmickou časovou složitost vkládání a přístupu k datům, tj. O(log n).
Klíče musejí být Comparable či musí být uveden specifický Comparator.
C#595 Maximálně kolik objektů může obsahovat ArrayList (při dostatečné paměti) ?
Integer.MAX_VALUE+1 tj. 2147483648.
Přesněji řečeno: ArrayList objekty neobsahuje ale jen referuje.
C#596 Co je Map.Entry a k čemu slouží.
Vnořené interface<K,V> v interfejsu java.util.Map<K,V> umožňující přístup
ke dvojici referencí key-value metodami getKey, getValue, setValue a
také equals a hashCode.
D#371 Co znamená JDBC a jaké je jeho podstata ?
Java DataBase Connectivity - jednotný způsob přípojení a
komunikace s DB prostřednictvím SQL.
D#372 Které balíčky realizují JDBC ?
java.sql a javax.sql.
D#373 Které důležité typy definuje java.sql ?
Třídu: DriverManager,
Interfejsy: Driver, Connection, Statement, ResultSet, MetaDataResultSet.
D#374 Ke kterým DB se lze pomocí JDBC připojit ?
Ke všem, ke kterým producent DB dodává driver pro JDBC.
D#375 Jakým standardním jazykem se ovládají databáze skrze JDBC ?
SQL - Structured Query Language
D#376 Jmenujte nejdůležitějsí příkazy jazyka SQL.
CREATE TABLE, INSERT INTO, SELECT, UPDATE
D#377 Jaký parametr má metoda executeQuery a co vrací ?
String jenž zadává dotaz příkazem SELECT sloupce FROM tabulka.
Vrací se objekt typu ResultSet obsahující tabulky výsledku.
D#378 K čemu slouží objekt ResultSetMetaData ?
K získání informací o tabulce s výsledkem hledání.
E#095 Co je listener ?
Jednak interfejs, který definuje metody jež slouží přijetí
specifických událostí, jednak objekt (handler), který tyto metody
implementuje a tudíž objekty-události přijímá a zpracovává.
E#096 Co je adapter ?
Zpravidla abstraktní třída implementující určitý listener
konkrétními avšak prázdnými metodami. Tu konkrétní adapter
využije jako předka s tím, že některé metody překryje.
E#097 K čemu slouží interface ActionListener ?
Definuje void actionPerformed( ActionEvent ev );
Tu volají zdroje ActionEventů např.: Button, TextField
E#153 Napište příklad handleru pro pohyb myši s registrací u zdroje události MouseEvent.
class Handler extends MouseMotionAdapter {
public void mouseMoved(MouseEvent ev) { ... }
}
Component c= ...
c.addMouseMotionListener( new Handler() );
E#167 Co jsou listenery z balíčku java.awt.event a k čemu slouží?
Listenery jsou interfejsy pro definici handlerů, které umožňují přijímat
zprávy od zdrojů ve formě objektů událostí, tj. typu Event.
E#168 Co jsou adaptery z balíčku java.awt.event a k čemu slouží?
Adaptery jsou abstraktní třídy s konkrétními prázdnými metodami.
Usnadňují zápis při vytváření handlerů jež jsou listenery.
E#277 Jak zjistíte zdroj události v metodě actionPerformed(ActionEvent ev) { //?
Object o = ev.getSource();
E#446 Popište princip delegačního modelu události.
Zdroj rozesílá objekt patřičného podtypu EventObject jako argument smluvené
metody všem objektům-handlerům, které jsou u zdroje momentálně registrovány.
Hadlery musí implementovat příslušné listenery, což zaručuje, že mají
konkrétní metody, které zdroj volá.
G#057 K čemu slouží abstraktní třída Graphics ?
K vytváření kreseb a animací.
G#058 Uveďte některé metody objektu java.awt.Graphics ?
draw/fill: Rectangle, Line, Oval, String, Image ;
get/set Color Fontů ; clip, copy, ...
G#059 K čemu slouží abstraktní třída FontMetrics ?
Ke zjištění velikosti (výšky, šířky) znaků daného písma v pixelech.
Je svázaná vždy s nìjakým grafickým kontextem (objekt Graphics),
který určuje počet dpi (pixelù na palec).
Velikost písma se zadává v bodech (1/72 palce).
G#064 K čemu slouží a co obsahuje metoda update (definovaná v awt) ?
K překreslení komponenty. Obsahuje volání clear(), které vymaže
pozadí komponenty a pak volá paint(g).
G#288 Co jsou, jaký je jejich vztah a rozdíly mezi Graphics a Graphics2D (z java.awt) ?
Obě jsou abstraktní třídy v java.awt, Graphics2D extends Graphics,
Graphics má pouze jednoduchou "pixelovou" int metriku. Graphics2D podporuje
geometrické znázornění s přesností float či double - viz java.awt.geom.
Přidává vlastnosti (paint, stroke, composite, transformace, kreslení shape, ...)
G#445 Čím to, že lze Graphics g přetypovat: Graphics2D g2=(Graphics2D) g; // ?
Ačkoli Graphics2D je potomkem třídy Graphics, v metodách
paint(Graphics g) či update(Graphics g), g referuje "podstrčený"
objekt typu Graphics2D - tedy výkonnější.
G#544 Co znamená java.awt.geom.Point2D.Double ? Jaké má přednosti ?
Vnořená třída Double je statický člen ve třídě java.awt.geom.Point2D
Vysokou přesnost pro výpočetní geometrii.
G#548 K čemu slouží balíček java.awt.geom a s jakou výpočetní přesností ?
K výpočtům a vykreslení v oboru rovinné geometrie s přesností double a float.
G#549 Které křivky podporuje balíček java.awt.geom ?
Lineární, kvadratické, kubické(Bézierovy) a z těchto složené. ?
G#550 Co umožňuje třída java.awt.geom.AffineTransform ?
Vytvářet objekty pro affinní transfomace, tzv. transformátory, které dokáží
transformují útvary typu Shape a Point Jedinou matici se definuje posun ( translation ),
škálování ( scaling ), překlopení ( flip ), rotace ( rotation ) a úkos ( shear ).
Zachovávají úsečky, paralelitu a dělící poměry.
G#551 K čemu slouží zavíjecí pravidla (winding rules) v balíčku java.awt.geom ?
K určení zda bod je uvnitř či vně i složité uzavřené křivky slouží pravidla
WIND_NON_ZERO a WIND_EVEN_ODD.
G#552 Nakreslete princip zavíjecích pravidel WIND_NON_ZERO a WIND_EVEN_ODD !
První počítá počet průsečíků polopřímky a orientované křivky zleva a zprava.
Druhé počítá součet průsečíků polopřímky a křivky zda je sudý nebo lichý.
G#574 Co je RGB a co CMYK, k čemu se využívají ?
Barevný prostor (ColorSpace): RGB=RedGreenBlue a pro display,
CMYK=CyanMagentaYellowBlack pro tisk.
I#420 Jaké jsou podporované formáty obrázků a jak se natahují do aplikace ?
GIF, PNG, JPEG, BMP, WBMP.
Pomocí java.awt.Toolkit.createImage(String filename).
I#421 Jakou třídou je reprezentován obrázek v operační paměti ?
abstract java.awt.Image
I#422 Jakým prostředkem lze stáhnou obrázky do operační paměti v aplikaci ?
Pomocí java.awt.MediaTracker.
Každý je stahován pro něj zřízeným vláknem.
I#423 Jak se stahují obrázky do operační paměti v apletu ?
Stažení provádí prohlížeč na popud getImage(..) třídy java.applet.Applet.
I#424 Jak se vykreslí obrázek pomocí objektu Graphics ?
g.drawImage(image, x, y) nebo g.drawImage(image, x, y, w, h).
Parametry w, h umožňují transformaci na šířku a výšku.
I#425 Co je ikona a jak čím se vytvoří z obrázku ?
Ikona je dekorace - "obtisk do GUI" - reprezentovaná interfejsem Icon.
Ikonu z obrázku lze vytvořit pomocí třídy ImageIcon.
I#426 Jak je reprezentován pixel ?
Standardně jako int po bytech zleva: alpha, red, green, blue <0, 255>
V BufferedImage lze zvolit jinou reprezentaci pixelu.
I#428 K čemu slouží PixelGrabber ?
K získání pole pixelů typu int[] každý prvek se strukturou argb,
tj. po bytech alpha, red, green, blue s hodnotami 0 - 255.
I#566 Nastavte v pixelu int pix maximum červené složky aniž změníte ostatní.
pix |= 0xff0000; nebo pix = pix | 255<<16;
I#429 Co je java.awt.image.MemoryImageSource ?
Třída implementující ImageProducer, umožňující vytvořit Image z int[]
pixelů metodou Image Component.createImage(ImageProducer ip ) .
J#165 Vyjmenujte předky třídy javax.swing.JFrame ve správném pořadí.
Frame, Window, Container, Component, Object
J#166 Vyjmenujte předky třídy javax.swing.JButton ve správném pořadí.
AbstractButton, JComponent, Container, Component, Object
J#470 Co je to Border, kde je definován, k čemu slouží a jaké druhy znáte ?
Interfejs javax.swing.border.Border normuje 10 tříd pro zvýraznění
okrajů JComponent např.: CompoundBorder, LineBorder, EtchedBorder,
BevelBorder, TitleBorder ...
J#471 Co je to Duke, k čemu slouží ? Nakreslete jeho schema.
Maskot Javy - tajtrlík s červeným frňákem.
J#472 Co je to JSpinner, k čemu slouží a jaké znáte druhy ?
Je to swingová JComponenta realizující krokový volič
předdefinovaných hodnot. Podle užitého model může být
standardně datumový, textový, číselný.
J#473 Jaký je rozdíl mezi Componentami java.awt a JComponentami javax.swing ?
První jsou závislé na platformě, druhé jsou většinou light-weight
kreslené Javou, dle vzoru MVC, patří do JFC, implementují Accessible
J#474 Co je to GlassPane, kde je definována, k čemu slouží ?
Swingová komponenta definovaná v javax.swing.
K zachytávání událostí myši nad celou zasklenou komponentou.
J#475 Jaké je pořadí vrstev JFrame ?
Zdola: Frame, RootPane, LayeredPane, ContentPane, GlassPane
J#476 Jaké metody v jakém pořadí volá metoda paint třídy JComponent ?
paintComponent, paintBorder, paintChildren.
J#477 Co znamená pojem Look and Feel
Jelikož swingové komponenty (lighweight) se vykreslují v Javě,
lze dynamicky měnit jejich vzhled standardně dle platformy
Windows, Motif, Metal.
J#478 Co je progress bar a jak je realizován ?
Dynamický indikátor postupu nějaké akce pomocí komponenty
java.swing.JProgressBar a potomka DefaultBoundedRangeModel
v němž samostatné vlákno volá setValue( ).
N#106 K čemu slouží třída InetAddress ?
Zapouzdřuje internetovou (IP) adresu a poskytuje metody pro přístup k DNS.
N#107 K čemu slouží třída URL ?
Ke konstrukci objektů typu URL určujících umístění zdroje.
N#108 Co je to socket a k čemu slouží ? Jaké má metody ?
Objekt typu Socket slouží k toku dvou proudů mezi dvěma
komunikačními partnery. Získáme je metodami getInputStream
a getOutputStream.
N#109 K čemu slouží třída ServerSocket ?
K vytvoření objektů, které na straně serveru umožňují
přijmout požadavek klientů na komunikaci.
N#125 Co blokuje a co vrací metoda accept() třídy ServerSocket?
Blokuje vlákno volající tuto metodu dokud nějaký klient
nezažádá o spojení. Vrací objekt typu Socket.
N#297 Kde je definovaná třída Socket ?
V java.net.
N#314 Jaký je rozdíl mezi objekty typu URL a URLConnection ?
První vyjadřuje umístění zdroje je imutabilní, nekontaktuje síť.
Kontroluje syntaktickou správnost a přípustnost protokolu.
Druhý představuje přístup ke zdroji a užívá síť.
N#315 Jaká se struktura obsahu URL ?
protokol:subprotokol://hostitel:port/zdroj#reference?dotaz...
N#316 Napište úryvek stažení dat z internetového zdroje !
InputStream is = new URL("http:// ... ").openStream();
BufferedReader br = new BufferedReader( new InputStreamReader(is) );
String line = br.readLine();
P#004 Uveďte příklad definice konstanty rychlosti světla.
public class Fyzika {
public static final double RYCHLOST_SVETLA = 2.99E+8; // [ m/sec ]
}
P#005 Uveďte všechny primitivní datové typy a jejich bitové délky.
boolean, byte, char, short, int, long, float, double
?
8 16
16 32 64
32
64
P#174 Jaké největší číslo (zhruba) lze uložit do proměnné typu long ?
Přesně: 9 223 372 036 854 775 807, postačí však: 8-10 *10^18 (trilionů)
P#220 int[] p = {1,2,3}; p.length=7; p[4]=5; // Co obsahuje pole p ?
Nic, neboť pole v runtime vůbec nevznikne, jelikož kompilátor odmítne
třídu zkompilovat kvůli p.length=7; neb p.length je finální.
P#221 int[] p = {1,2,3}; p[4]=5;
// Jaký bude nyní obsah pole p ?
Obsah zůstane {1,2,3}. Avšak druhý příkaz způsobí výjimku.
Po vyjímce ArrayIndexOutOfBoundsException bude obsahovat {1,2,3}.
P#222 Proč je délka jednorozměrného pole length finální ?
Pole nelze prodloužit bez narušení následujících bytů.
Zkrácením by došlo k fragmentaci paměti.
P#223 Jak dosáhnout toho, aby index prvku pole mohl být i záporný ?
To nelze.
P#224 int[] p=new int[0x14]; Jakou má pole p délku a co obsahuje ?
20, obsahuje dvacet nul typu int.
P#225 int[] p=new int[014]; Jakou má toto pole délku a co obsahuje ?
12, obsahuje dvanáct nul typu int.
P#271 Co se stane: int[] p= new int['Z']; System.out.println(p['Y']); // ?
Vytiskne se 0.
P#272 Co se vytiskne: System.out.println( (new int['Z'])['Y'] );
0
P#274 Co se vytiskne: System.out.println( (new int['Z'])['Z'] );
java.lang.ArrayIndexOutOfBoundsException: 90
P#278 Co vytiskne float x0000Ff = 0x0000Ff; System.out.println(x0000Ff); //?
255.0
P#279 Co vytiskne long x0000FL = -0x0000FL; System.out.println(x0000FL); //?
-15
P#321 Co zajistí příkaz int[] p = final new int[]{1,2,3};
Syntaktickou chybu chybným užitím final.
P#322 Jak lze zajistit neměnitelnost prvků pole ?
Skrýt pole do objektu a umožňit přístup k prvků jen pomocí getru.
P#332 Kolik prvků může dvojrozměrné pole maximálně obsahovat ?
2^62 ~ 4.67E18 (trilionů). Tvoří čtvercovou matici 2^31 * 2^31.
Ale chtělo by to lepší počítač.
P#333 Kolik prvků může jednorozměrné pole maximálně obsahovat ?
2^31 tj. ~ 2.1 miliardy. Počet prvků je dán atributem každého pole
final int length v intervalu <0, 2^31-1>.
P#335 Co znamená, že je pole homogenní ?
Všechny jeho prvky jsou téhož typu.
Pole primitivů jsou vždy homogenní.
P#337 Je pole primitivů Serializable ?, je Cloneable ?, je Comparable ?
Každé pole je automaticky Serializable a Cloneable.
Není Comparable, neboť primitivní hodnoty nesouvisí s interfejsy.
P#338 Jak otestovat, zda pole je homogenní ?
Pole primitivů je vždy homogenní. Pole referenčních typů je třeba
otestovat zda všechny prvky (objekty) jsou vytvořeny touž třídou
pomocí getClass( ) anebo jsou null.
P#339 Jak se dá využít pole Object[ ][ ] p = new Object [ ][10];
Nedá, je to chybné syntaxe, neboť není definované pole řádek.
P#340 Co jsou literály, jaké jsou jejich druhy ? Uveďte příklady.
Přímo vepsaná konstantní hodnota ve zdrojovém kódu.
Numerický, znakový, logický, řetězový, referenční, typový:
3E8F 0xFF, 'A' '\u00FF' , true, "BLBLA", null, Integer.class
P#381 Jaký je nejmenší počet klíčových slov case v těle příkazu switch ?
0. Tělo může být i zcela prázdné, default může být nanejvýš jeden.
P#385 Co působí příkaz System.err.println( '\n' ); // ?
Dvojí přechod na další řádku ve výstupním proudu System.err
užívaného pro chybové zprávy.
P#386 Co působí příkaz System.err.println( (char) 0xA ); // ?
Dvojí přechod na další řádku ve výstupním proudu System.err
užívaného pro chybové zprávy.
P#387 Co působí příkaz System.out.println( 0b11_11_11 ); // ?
Vytiskne 63 a přejde na novou řádku.
P#388 Co působí příkaz System.out.print( 0b11_11_11+11 ); // ?
Vytiskne 74 aniž přejde na novou řádku.
P#389 Kde všude ve zdrojovém kódu lze užít symbol § zvaný paragraph ?
Není v jazyce definován - lze ho užít jen v komentářích
a v literálech znakových a řetězových.
P#390 Kde všude ve zdrojovém kódu lze užít symbol # zvaný number sign ?
Není v jazyce definován - užívá se však v URL jako příznak kotvy.
P#391 K čemu slouží symbol ^ a jak působí ?
Je to jednak logický a jednak bitový operátor XOR (eXclusive OR)
tedy nonekvivalence.
P#392 Co a proč vypíše příkaz System.out.println( 5 ^ 2 );
?
7 a přejde na novou řádku.
P#393 Jaký bude typ a hodnota výrazu ?: 16 ^ 7L ?
long, 23
P#394 Co a proč vypíše příkaz System.out.println( 16 ^ 7.0 ); ?
Nic, kompilátor ohlásí syntaktickou chybu.
P#395 Co a proč vypíše příkaz System.out.println( true ^ false ); ?
true
P#396 Co a proč vypíše příkaz System.out.println( 'A' ^ 'B' ^ 'B' ^ 'A'); ?
0, neb ^ je operace komutativní a asociativní
P#397 Co a proč vypíše příkaz System.out.println( true ^ 0 ); ?
Nic, kompilátor ohlásí syntaktickou chybu.
P#398 Co a proč vypíše příkaz System.out.println( ^ true );
?
Nic, kompilátor ohlásí syntaktickou chybu.
Operátor ^ je binární, infixní.
P#399 Co a proč vypíše příkaz System.out.println( 7 ^ 0 );
?
7 a přejde na novou řádku.
P#400 Co a proč vypíše příkaz System.out.print( 7 ^ -1 );
?
-8
P#418 Jaký bude typ a hodnota výrazu ?: ( ~ ~ ~ 3 )
int -4. dvojice inverze se vyruší zbyde ~ 3 -> -3-1.
P#419 Jak vytvoříte ekvivalenci dvou boolevských proměnných a, b ?
!a^b nebo !(a^b) nejlépe však a == b
P#435 Co a proč vytiskne příkaz System.out.println( ! true != true ); ?
true . Neboť unární operátor má vyšší prioritu než != .
P#436 Co vytiskne příkaz System.out.println( !! n );
Je-li n nastavená boolevská hodnota, pak ji.
Jinak syntaktická chyba.
P#437 Co vytiskne příkaz System.out.println( 3! );
Sice to připomíná faktoriál tj. 6 , ale je to syntaktická chyba.
P#449 Co vyjadřuje příkaz for(;;) { ... } // ?
Nekonečný cyklus, pokud v těle cyklu nedojde na break, return,
System.exit, přerušení či ukončení probíhajícího vlákna,
explicitní či implicitní vyhození objektu typu Throwable,
výpadek elektřiny nebo zvetšelost počítače.
P#450 Co se stane v příkazu switch pro case "start": break;
Má-li řídící proměnná typu String hodnotu "start" přejde zpracování
na příkaz následující switch.
Pro Javu < 7 kompilátor ohlásí syntaktickou chybu.
P#451 Co se stane v příkazu switch pro case "stop": continue;
Má-li řídící proměnná typu String hodnotu "stop" přejde zpracování
na další interaci obalujícího cyklu. Pokud neexistuje anebo
pro Javu < 7 kompilátor ohlásí syntaktickou chybu.
P#479 Je číslo Double.MIN_VALUE kladné nebo záporné - a jak zhruba velké ?
Kladné a šíleně malé, konkrétně: 4.9e-324
P#480 Kolik čísel umožní typ double rozlišit v intervalu (0.0, 1.0) ?
Mantisa má 52 bitů, tedy varietu 2^52 skoro 10^16 (10 biliard) čísel.
P#499 Jak vytvoříte bitovou ekvivalenci proměnných long a, b ?
~a^b nebo ~(a^b)
P#501 Co a proč vytiskne double a=1e10; System.out.println( a < a+1e-7 ); ?
false, ač sčítání proběhne přírůstek je malý a do mantisy se nevejde.
P#503 Co vytiskne int k=3; System.out.println( Integer.MIN_VALUE * k); ?
-2147483648 ,tj. Integer.MIN pro každé liché k.
P#504 Co vytiskne int k=4; System.out.println( Integer.MIN_VALUE * k); ?
0, pro každé sudé k.
P#510 Co bude v b a proč ?: int m=Integer.MIN_VALUE; boolean b= m == -m;
true, neboť v integrální aritmetice MIN_VALUE a 0 jsou svojí negací,
tyto dvě hodnoty jsou vzhledem k negaci idempotentní.
P#511 Co vytiskne: System.out.println( 0.F / 0 );
NaN, rozšíření do float bude 0.0F/0.0F, což je neurčitý výraz.
P#512 Kolik cyklů provede ?: short i=0, j=0; for (; i+j==0 ; i--, j++) ;
Kupodivu skončí po 32768 cyklech kdy j == i ==-32768 a jejich
součet počítaný v aritmetice int bude -65536 následkem přetečení j.
Pro int i=0, j=0; by součet byl navěky 0.
P#513 Co vytiskne System.out.println((byte)0xFF_80); ?
-128, zúžení vezme jen pravý byte, tedy 0x8_0 čili 0b1000_0000.
P#514 Jakou má typ short vlastní aritmetiku ?
Nemá vlastní, nýbrž zprostředkovanou typu int, pomocí rozšíření
a následného zúžení. Totéž platí i pro typy char a byte.
P#515 Co je ternární výraz ? Napište příklad.
Výraz získá dynamicky jednu ze dvou hodnot dle hodnoty podmínky.
a > b ? Math.sin(x) : 0
P#516 Co se stane pro b = true resp. false ? ( b ? new Thread() : 2.71F )
Výraz má hodnou reference na objekt typu Thread rep. Float.
P#517 Budiž: int k, p=k & -k; Jaké vyjde p pro různá k ? Zkuste pro k=20.
p je hodnotou nejnizšího jedničkového bitu k. Pro k=20 je p=4,
pro k lichá p=1, pro k=0 je p=0, pro k=MIN_VALUE je p=k.
Krom k=0 či MIN_VALUE je p=pow(2,n)>0 kde n je dělitelem k.
P#520 Co je třeba k provedení a co vytiskne System.out.print($_=1e-0F); // ?
Nevkusnou proměnnou $_ definovat jako float či double. Vytiskne: 1.0 .
P#528 Co vytiskne System.out.print( ++'A' ); a proč ?
Chyba kompilace, neboť 'A' není proměná (což požaduje ++) nýbrž hodnota.
P#529 Co vytiskne System.out.print( -'A' ); a proč ?
-65, neboť unární minus rozšíří char na int.
P#530 Co vytiskne System.out.print( ++Math.PI ); a proč ?
Chyba kompilace, neboť Math.PI je finální a zvýšenou hodnotu nelze vložit.
P#561 Co se stane: int[] a={}, b={1,2}; System.out.print( (b=a).length );
//?
Vytvoří se dvě pole, b začne referovat na pole nulové délky, čímž se ztratí
reference na původní pole {1,2} a pak se vytiskne nula.
P#562 Co se stane: System.out.print( (char)('A'/1 ^ 0b0010_0000L + 3 ) );
Vytiskne se b. Ano, je to hnusné, avšak uvažte jak k tomu došlo.
A k takovému programátorovi zavolejte rychlou psychiatrickou pomoc.
P#564 Co se stane: System.out.print( 1F == 1 );
Vypíše se true. Pravý operand se rozšíří na 1F , neboli 1.0F == 1.0F
P#567 Co vytiskne System.out.println(018L);
// a proč ?
Nic, neboť 8 není oktalová číslice.
P#568 Co vytiskne System.out.println(018D);
// a proč ?
18.0 literál je vynuceně double, proto se chápe dekadicky.
Vedoucí nula vynucuje oktalový zápis jen u celých čísel.
P#569 Co vytiskne System.out.println(017.+017); // a proč ?
32.0 první literál je double dekadicky, druhý je int oktalově
P#570 Co vytiskne System.out.println(0x1e+2);
// a proč ?
32 první literál je int hexadecimální, druhý je int.
P#576 Co vytiskne System.out.println(0xFFFF << 16 >>> 16); //?
65535 tj. Short.MAX_VALUE.
P#577 Co vytiskne System.out.println(0xFFFF << 16 >> 16); //?
//?
-1 ,neboť znaménkový bit "1" se při >> rozšíří napravo.
P#578 Jak vypočítáte třetí odmocninu z proměnné double x ?
Americky: Math.pow(x,1./3) nebo evropsky: Math.pow(x,1/3.0)
P#581 Co vypíše System.out.print("abc" == "a"+"bc");
?
true. Konkatenace a následné porovnání proběhne již v kompilaci.
P#583 Co vypíše System.out.println( 1+""+2=="12".toString() ); ?
true, obě konkatenace a následné porovnání proběhne již v kompilaci.
P#585 Kde lze zapsat ... tzn. trojtečku, jaký má význam a jakou výhodu ?
Jen jako poslední formální parametr metody či konstruktoru. Je to příznak varargs
a tedy volání lze zapsat např. takto: min(a,b,c,d) aniž je třeba zkonstruovat
předem pole prvků a,b,c,d.
P#586 Co se vytiskne void m(int[] ... zz) {System.err.print( zz.getClass() );} // ?
class [[I , neboť zz představuje pole polí int.
P#588 Kam continue předá řízení v do-while cyklu ?
Do testu podmínky cyklu.
P#589 Kam continue předá řízení ve for cyklu ?
Do seznamu modifikačních příkazů cyklu.
P#590 Lze v těle cyklu typu for( ... : ... ) použít příkaz continue ? Proč ano/ne ?
Ano, je to dovoleno.
P#591 Jakého je typu a jaký je interval hodnot výrazu 0.5*Math.random()+4/3 // ?
double, < 1.0, 1.5 ) hodnoty jsou pseudonáhodné, rovnoměrně rozdělené.
P#594 Která metoda je obecnější void m(int[] p) či void m(int ... p) a proč ?
Ta m(int ... p) , neboť lze ji volat jako m(pole) i jako m(a, b, 'A')
kde int a=1,b=2 int[] pole={a,b,'A'};
V obou případech v těle metody je p typu int[].
P#597 Jakou hodnotu má výraz Integer.parseInt("-fF",16) ?
-255 (dekadicky) typu int, druhý parametr vyjadřuje základ soustavy.
P#598 Jaká bude hodnota m(5) kde: int m(int q) { int q+=4; return q; } // ?
Syntaktická chyba, neb lokální proměnná q není automaticky inicializovaná
a tedy operátor += nelze použít. Definice q je navíc duplikována.
P#603 Co obsahuje pole int[] p = { 65, 'A', 0x41 }; // ?
Tři čísla šedesátpět.
P#618 Jaká je hodnota výrazu 1/Double.POSITIVE_INFINITY+5 // ?
5.0
P#619 Jaká je hodnota výrazu Double.POSITIVE+Double.POSITIVE // ?
Double.POSITIVE
P#620 Jaká je hodnota výrazu Double.POSITIVE-Double.POSITIVE // ?
Double.NaN
P#621 Co vytiskne System.out.print( 1 << ++2 ); // ?
Synaktická chyba.
P#622 Co vytiskne System.out.println( 1 << 2 < 4 ); // ?
false
P#623 Co se stane: int x=0; System.out.print( x = x += 1 << 1 ); // ?
Vytiskne se: 2
P#624 Co bude obsahovat x: int x=1; x -= (x += 1) << 1 ; // ?
-3
P#625 Co bude obsahovat x: int x=1; x *= (x++ + 1) << 1 + 1; // ?
8
P#626 Co bude obsahovat x: int x=1; x *= (++x + 1) << 1 + x; // ?
24
P#627 Co se vytiskne ?
# static int f(int x) { System.out.print(x); return x++; }
# int x=1; System.out.print( x+f(x) );
12
P#628 Co bude obsahovat x: int x=1; x -= (x += 2.71) << 1 ; // ?
-5
P#629 Co bude obsahovat x: int x=1; x -= (x += 1) << 3.14 ; // ?
Že je to syntaktick chyba.
P#630 Co vytiskne System.out.print( ++2 ); // ?
Že je to syntaktick chyba.
P#631 Co vytiskne: int x=1; System.out.println( x +=- x+++x++ );
2
P#632 Co vytiskne: int x=1; System.out.print( Math.max(x+=2, ++x) + x---x );
5
P#633 Co vytiskne System.out.println( -2>>>1 ); // ?
2147483647 tj. Integer.MAX_VALUE=0b1111...1111
P#634 Co vytiskne System.out.println( -2>>>1 ); // ?
Chybu při kompilaci - operátor <<< neexistuje.
P#635 Co vytiskne System.out.println( 1<<-1 ); // ?
-2147483648 tj. Integer.MIN_VALUE=0b10000...0000
P#636 Co vytiskne System.out.print( 1 << 2 << 3 ); // ?
32
P#637 Co vytiskne: int x=1; System.out.println( x+=2+(x+=4) ); // ?
88
P#638 Co vytiskne: int x=1; System.out.printf("%d %d", (x+=2)+(x+=4), x ); // ?
10 7
P#639 Co vytiskne: System.out.println( 'A' / ' ' ); // ?
2 dojde ke konverzi na int 65 / 32
P#640 Co vytiskne: System.out.println( 'A' / ' ' ); // ?
17 dojde ke konverzi na int 65 % 48
P#641 Co vytiskne: int x=1; System.out.printf("%d %d", x-- - --x, x );
2 -1
P#642 Co vytiskne: int x=1; System.out.print("\n"+x+=2.71); //?
Je to syntaktická chyba "\n"+x je typu String.
P#643 Co vytiskne: int x=1; System.out.print('\n'+(x+=2.71)); //?
13 neboť '\n' má hodnotu 10, x získá hodnotu 3.
P#644 Budiž byte=-128; int i=b; Jaký je bitový obraz obsahu těchto proměnných ?
10000000 a 11111111111111111111111110000000
P#645 Co vytiskne int z=5; System.out.println(-~z+" "+~-z); //?
6 4
P#646 Co vytiskne: System.out.print( true ~ false ); //?
Je to syntaktická chyba, operátor ~ je unární bitová inverze.
P#647 Co vyjde: int x=1; x+=1.5; //?
2 , neboť += (typ op1) ( op1 + op2 ) a podobně pro další.
P#648 Co se stane: System.out.print( false == true == false ); //?
Vytiskne se true .
P#649 Co vytiskne: System.out.print( 1 < 2 < 3 < 4 ); //?
Je to syntaktická chyba, neboť true < 3 .
P#650 Co vytiskne: System.out.print( 1 > 2 == 3 > 4 ); //?
true .
S#098 Které abstraktní třídy definují základní metody proudů?
java.io. InputStream, OutputStream, Reader, Writer.
S#099 Jaké znáte druhy proudů a co je jejich společný předek ?
Bytové a znakové tj. pro byte resp. char a každý z nich
buď vstupní anebo výstupní. Je jím java.lang.Object.
S#100 Co jsou filtry bytových proudů a jaký parametr má jejich konstruktor ?
FilterInputStream resp. FilterOutputStream jsou konkrétní protected podtřídy
Input resp. Output Stream, které umožňují modifikovat proud.
Parametrem je právě Input resp. Output Stream.
S#101 Které proudy umožňují binární vstup(výstup) primitivních typů ?
DataInputStream, DataOutputStream a také jejich potomci
ObjectInputStream, ObjectOutputStream
S#102 Který proud zajišťuje výstupní textovou konverzi ?
java.io.PrintStream metodami println, print, printf.
S#103 Kde v API Javy najdete rouru a které typy ji umožňují?
V java.io. PipedInputStream PipedOutputStream
S#104 K čemu slouží objekt typu File a jakou metodou se takový objekt otvírá ?
K popisu a manipulacím na lokálním souborového stromu.
Neotvírá se, otvírají se proudy a to automaticky.
S#105 K čemu slouží interface DataInput resp. DataOutput ?
Definuje metody pro čtení resp. zápis primitivních typů.
S#130 Co umožňuje třída java.io.File ? Jaké její metody znáte ?
Získat informace a ovlivnit lokální datový systém.
isDirectory, isFile, exists, length, list, delete, rename,
createFile, mkdir, lastModified, canRead, canWrite, canExecute
S#133 K čemu slouží serializace ? Co lze a co nelze serializovat ?
K převodu Serializable objektů do proudu a k jejich zpětné rekonstrukci.
Jen nestatické, netransientní atributy.
Vše ostatní, tj. statické atributy, metody, třídy, interfejsy nelze.
S#154 Co může být označeno modifikátorem transient a jaký má smysl?
Pouze instanční proměnná. Její hodnota se serializací nepřenáší.
S#164 Uveďte jména důležitých tříd balíčku java.io.
File, InputStream, FileInputStream, ObjectInpuStream, Reader, BufferedReader,
PrintStream, Writer BufferedWriter
S#180 Je třída java.lang.Object Serializable ? Proč ano, proč ne ?
Ne, pak by byly všechny třídy Serializable.
S#257 Co je deflace resp. inflace v java.io ?
Komprese resp. dekomprese dat.
S#308 Co žádá interfejs java.io.Flushable metodou flush() pro streamy ?
Konkretizaci metody flush(), která co nejdříve vypudí data
z výstupních bufrů k cíli (file, socket) aniž se stream uzavře.
S#309 Kdy je třeba zavolat metodu open() u objektů typu java.io.InputStream ?
Nikdy - ta neexistuje. Proudy (i výstupní) se otvírají automaticky.
S#310 Co jsou a čem se liší java.io.InputStream a java.io.Reader ?
Kořenové abstraktní třídy - pro strom tříd pro čtení jednak
byte streamu a jednak character streamu.
S#311 Co jsou a čem se liší java.io.OutputStream a java.io.Writer ?
Kořenové abstraktní třídy - pro strom tříd pro zápis jednak
byte streamu a jednak character streamu.
S#312 Co je bufr ?
V software: Vyrovnávací paměť - vyhražená v operační paměti určená pro I/O operace.
S#313 Jaké nebezpečí hrozí napomeneme-li zavřít výstupní proud ?
Data zbylá v bufru se neodešlou k cíli ( file, socket ).
Např. soubor je neúplný anebo i prázdný.
S#430 Co je java.lang.AutoCloseable, kde se využívá ?
Smyslem zavedení je automatické zavírání v try( ... ) od Javy 7.
Interfejs definující metody void close().
Splňuji ho třídy **Stream, **Reader, **Writer, **Channel, Scanner,
**Socket, ZipFile aj. Jeho potomkem je java.io.Closeable.
S#431 Uvedťe některé výjimky, které nejsou serializovatelné a proč ?
Žádné takové nejsou, neboť class Throwable implements Serializable
a tedy i Error-y jsou serializovatelné.
S#432 Uveďte některé třídy, které nejsou Serializable. A proč asi ?
lang: Object, System, Math, Thread, Process, Compiler, ClassLoader.
io: ***Stream,
util: Scanner, Arrays, Collections, Timer.
Některé obsahují jen statické členy: Math, Compiler, Arrays, Collections.
Jiné jsou měnlivé objekty: vlákna, proudy.
S#509 K čemu je dobrá metoda flush() ?
K fyzickému vypuzení dat z bufru (v operační paměti) výstupního proudu
do média. Žádoucí zejména pro síťové komunikace .
S#541 K čemu slouží a jak se používá metoda System.out.printf ?
K formátování tisku. Má parametry ( String format, Object ... args )
Parametr args může obsahovat i primitivní hodnoty díky autoboxingu.
S#543 Jaký objekt je referován System.err ?
java.io.PrintStream pro chybové hlášky.
T#074 Co je to vlákno ?
Jednak třída java.lang.Thread, jednak objekty této třídy, které jediné
mohou přijímat CPU čas a tedy projevovat (jakoby) vlastní aktivitu ?
T#075 Která metoda definuje chování vlákna ?
public void run( ) - instanční metoda třídy java.lang.Thread
T#076 Jakou metodou se thread spouští ?
public void start( )
T#077 Jak se trvale ukončí běh vlákna ?
Jen tím, že dojde k returnu z metody run tohoto vlákna, čímž JVM
mu nastaví stav dead. Metodou interrupt to nejde.
Zastavit vlákno lze zavrženou metodou stop - ale je to nebezpečné.
T#078 Jaké jsou možné stavy vlákna ?
(7): NEW, RUNNABLE, RUNNING, BLOCK, WAIT, LOCK, DEAD
T#079 Jaké jsou příčiny stavu BLOCK threadu ?
Spuštění io operace, zavolání metod sleep nebo join a čeká se na
jejich dokončení.
T#080 Co je to skupina threadů ?
Všechna vlákna jsou organizována ve stromu vláken a jsou jeho listy.
Vnitřní uzly jsou typu objekty typu ThreadGroup.
T#081 Co je to synchronizační monitor ?
Softwarový modul, jenž kontroluje zámky objektů a běh vláken.
T#082 K čemu slouží metoda o.wait() ?
Když vlákno musí čekat na přidělení nějakého zdroje a tedy nemůže
čerpat čas, zavolá metodu wait. To lze jen v synchronizovaném bloku,
tedy drží nějaký známek nebo zámky, kteréžto se ve stavu WAIT uvolní.
Vlákno přejde do stavu WAIT v poolu objektu o.
T#083 K čemu slouží metody o.notify() resp. o.notifyAll() ?
Převede nederministicky vybrané vlákno ze stavu WAIT do LOCK
resp. všechna vlákna byvše WAIT na objektu o.
Vlákno volající tyto metody musí držet zámek k objektu o,
jinak se vyhodí IllegalMonitorStateException.
T#084 Co je uvíznutí (deadlock) a jak mu zabránit ?
Zablokování vláken, následkem vzájemného neuvolnění potřebných objektů.
Stane se tak přechodem do stavu WAIT zúčastněných vláken.
Java to neumí vyřešit - obranou je dodržení pořadí žádostí o společné zdroje.
T#085 Co dělá metoda t.join() ?
Běžné vlákno zablokuje a čeká na ukončení vlákna t.
Vlákna se jako objekty nenavazují. Navazuje se na vykonanou práci.
T#086 Co se stane příkazem vx.join(0); je-li vx vlákno ?
Běžné (nikoli vlákno vx) vlákno se blokuje jen na dobu 0 msec
bez ohledu na stav vlákna vx.
T#087 Co se stane příkazem vx.join(500); není-li vx vlákno ?
Syntaktická chyba pokud objekt referovaný vx nemá metodu join.
T#088 Do jakého stavu přejde vlákno uspané jako Thread.sleep(...) po přerušení ?
Do stavu RUNNABLE.
T#089 Co dělá metoda isAlive() ?
Vrací true pokud vlákno bylo odstartováno a ještě se nevrátilo ze své
metody run(), jinak false.
T#090 Jaký je rozdíl mezi metodou sleep(...) a wait(...) ?
1. sleep je statická, definovaná ve třídě Thread, která uspí vlákno
ve stavu BLOCK po určitou dobu.
2. wait je finální, definovaná ve třídě Object, volatelná jen v
synchronizovaném bloku či metodě, která uvolní držené zámky a
převede vlákno do stavu WAIT z kterého se vymaní metodou
notify() nebo notifyAll() anebo po uplynutí určeného času.
T#118 Napište příklad kritické sekce jednak jako metodu, jednak jako blok.
synchronized void m1() { }
void m2() { synchronized(o){ } } závorky bloku jsou povinné.
T#119 Co deklaruje interfejs java.lang.Runnable a k čemu slouží ?
abstract public void run();
Jako norma pro definici činnosti objektu typu java.lang.Thread
případně objektu kterému vlákno může předat řízení.
T#137 Napište příklad deklarace a spuštění vlastního vlákna .
class V extends Thread {
public void run() { ... }
}
new V( ).start();
T#138 K čemu slouží klíčové slovo synchronized ? Kam se dá všude napsat ?
K vytvoření kritické sekce, tj. metody či bloku do kterého může
vstoupit jen jedno vlákno. Do hlavičky metody
nebo do prefixu bloku s referencí na synchronizační objekt.
T#139 Co thread sdílí s ostatními thready a co každý vlastní jen on sám ?
Sdílí s nimi jediný strom threadů a objekty ke kterým dostal reference.
Nesdílí vlastní atributy a zejména vlastní program counter a stack.
T#148 K čemu slouží metoda wait( ), kde je definována a kde ji lze bez nehody zavolat ?
wait je finální, definovaná ve třídě Object, volatelná jen v
synchronizovaném bloku či metodě, která uvolní držené zámky a
převede vlákno do stavu WAIT ze kterého se vymaní metodou
notify nebo notifyAll anebo po uplynutí určeného času.
T#149 Napište úryvek programového ukončení běhu vlákna, tj. bez použití metody stop( ) .
bool=false;
public void run() { while( bool ) { ... } }
public void run() { ... return ... }
public void run() { ... assert ... }
public void run() { ... throw ... }
T#152 K čemu slouží metoda join( long time ) a ve které třídě je definována ?
K blokaci vlákna, čekající na ukončení vlákna leč nanejvýš stanovený čas
T#155 Jak vznikne uváznutí ( deadlock ) a jak mu lze předejít ?
Když vlákna si vzájemně blokují přístup ke zdrojům.
Dodržováním dohody o posloupnosti přístupu ke zdrojům.
T#169 Která metoda definuje chování vlákna a jak se spouští ?
Instanční metoda run() třídy java.lang.Thread zděděná z interfejsu Runnable.
class Vlakno extends Thread { public void run(){ ... } }
new Vlakno().start();
T#170 Které objekty mohou být zařazeny do front na příděl času ?
Jen x, které splňují x instanceof Thread.
T#172 Co způsobí metoda notify(), kde je definována a kde ji lze bez nehody zavolat ?
Převede vlákno ze stavu WAIT do stavu LOCK.
Definovaná jako finální v java.lang.Object. V synchronized bloku či metodě
T#231 Zámek kterého objektu se použije v synchronized static metodě ?
Zámek popisného objektu třídy.
T#232 Lze užít takto interfejs: synchronized(Comparable.class) { ... } ?
Ano, synchronizačním objektem je popisný objekt interfejsu.
T#234 Vysvětlete chování:
synchronized( new Object() ) { ... }
Blok nebude fakticky kritickou sekcí, neboť každé vlákno si vytvoří
vlastní zámek a vstoupí do bloku. Je to nesmysl a ještě zdržuje.
T#235 Vysvětlete chování: synchronized( Thread.currentThread( ) { ... }
Blok nebude nejspíš kritickou sekcí, neboť každé vlákno použije
vlastní zámek a vstoupí do bloku. Ledaže existuje jiné vlákno toto
vlákno užívá jako synchronizační objekt.
T#237 Může být konstruktor označen synchronized ? Proč ano, proč ne ?
Ne. JVM sama zajišťuje synchronizaci konstruktorů.
T#238 Lze abstraktní metodu označit modifikátorem synchronized ?
Ne, nemá tělo a tedy ani nepředstavuje kritickou sekci.
T#239 Lze překrýt synchronizovanou metodu nesynchronizovanou ?
Ano, modififkátor synchronized se nedědí.
T#240 Lze překrýt nesynchronizovanou metodu synchronizovanou ?
Ano.
T#258 Jak se dá zjistit, které vlákno právě probíhá daným blokem ?
Thread t = Thread.currentThread();
T#259 Jak zjistíte, které vlákno právě probíhá danou metodou ?
Thread t = Thread.currentThread();
T#260 Dá zjistit, které vlákno probíhá danou třídou a jak ?
Nedá, neboť třídou nic neprobíhá.
T#261 Které vlákno probíhá třídou java.lang.Object ?
Žádné, třídami nic neprobíhá.
Probíhá metodami, konstruktory, statickými a nestatickými inicializátory.
T#262 Napište příklad, jak změřit čas spotřebovaný nějakou metodou ?
long t0=System.currentTimeMillis();
m();
long time=System.currentTimeMillis()-t0;
T#317 Jak restarovat vlákno, dokončivší metodu run či zastavené metodou stop ?
Vlákno nelze nijak restartovat. Musí se vytvořit nové.
T#318 Proč neužívat k ukončení vlákna zneváženou (deprecated) metodu stop ?
Zastavení vlákna v neurčitém místě může zanechat hodnoty objektů
v nekonzistentním stavu.
T#341 Jakého typu (krom Object) může být x v přiřazení x=Runnable.class; //?
Class resp. Class<Runnable> či interfejsy třídy Class, tj.:
( Serializable, AnnotatedElement, GenericDeclaration, Type )
T#344 Které všechny objekty mohou být ve stavu WAIT ?
Pokud splňují x instanceof java.lang.Thread && x.isAlive();
T#447 Lze odstartovat každý objekt který implementuje Runnable ? Proč ano, proč ne ?
Jen ten který je typu Thread.
T#448 Za jakých okolností lze odstartovat objekt, který neimplementuje Runnable ?
Za žádných, neboť odstartovat jen objekt typu Thread a každý takový
implementuje Runnable, neboť class java.lang.Thread implements Runnable.
T#453 Které metody se pojednávají přerušení vlákna a kde jsou definovány ?
void interrupt(), boolean isInterrupted() a static boolean interrupted()
všechny definované ve třídě Thread.
T#454 Co přesně dělá instanční metoda interrupt() ?
Ve stavech RUNNABLE / RUNNING jen nastaví vláknu this příznak přerušení.
Ve stavech WAIT / BLOCK join / BLOCK sleeping vláknu this zruší
příznak přerušení, změní mu stav na další tj. LOCK / RUNNABLE / RUNNABLE,
což pak ve stavu RUNNING hned vyhodí InterruptedException.
Ve stavu not ALIVE neuděla nic.
T#455 Za jakých okolností nastane vždy InterruptedException po zavolání interrupt() ?
Když je vlákno ve stavech WAIT / BLOCK join / BLOCK sleeping.
K vyhození vyjímky dojde jakmile bude vlákno ve stavu RUNNING.
T#456 Co přesně dělá instanční metoda interrupt() je-li vlákno RUNNABLE/RUNNING ?
Jen nastaví příznak přerušení.
T#457 Co přesně dělá instanční metoda isInterrupted() ?
Aniž mění příznak přerušení, vrátí true je-li nastaven, jinak false.
T#458 Co přesně dělá třídní metoda interrupted() ?
Zruší příznak přerušení, vrátí true byl-li nastaven, jinak false.
T#459 Jakými způsoby se může změnit stav vlákna BLOCK a na který přejde ?
Přejde na RUNNABLE dokončením join, sleep, I/O nebo interrupt().
T#460 Jakými způsoby se může změnit stav vlákna RUNNABLE a na který přejde ?
Přejde na RUNNING výběrem CPU schedulerem pro příděl CPU času.
T#461 Jakými způsoby se může změnit stav vlákna z RUNNING na RUNNABLE ?
Ukončením přídělu CPU času vnitřním rozhodnutím CPU scheduleru.
Požadavkem k ukončením přídělu CPU času metodou yield() .
T#462 Do kterých stavů může přímo přejít stav vlákna RUNNING ?
Do RUNNABLE, BLOCK, WAIT, LOCK, DEAD.
T#463 Do kterých stavů může přejít vlákno ze stavu NEW a jakými způsoby ?
Jen do RUNNABLE a to metodou start().
T#464 Do kterých stavů může přejít vlákno ze stavu DEAD a jakým způsoby ?
Do žádných jiných a žádnými. Vlákno existuje však jako objekt.
T#465 Jak se může změnit stav vlákna z RUNNING na WAIT a co je k tomu třeba ?
Jedině metodou wait(...) zavolanou v kritické sekci tj. synchronized
metodě či bloku - tedy držící zámky, které metoda wait uvolní.
T#466 Zda a jak může stav vlákna RUNNING přímo přejít do stavu LOCK ?
Jen když vlákno žádá vstoupit kritické sekce, tj. do synchronized
metody či bloku, leč nezíská zámek referovaného objektu, neboť
kritická sekce je obsazena jiným vláknem.
T#467 Jakými způsoby se vlákno může vymanit za stavu WAIT a do kam přejde ?
Přejde do stavu LOCK vypršením WAIT času nebo notifikací metodami
notify() resp. notifyAll() nebo přerušením metodou interrupt().
T#468 Co se děje s vláknem ve stavu LOCK kam všude může přejít a jak ?
Čeká až mu monitor (nedeterministicky) přidělí zámek referovaného
objektu a převede vlákno do stavu RUNNABLE.
T#469 Jak se může vlákno ve stavu WAIT dostat opět do stavu RUNNING ?
Jen postupně přes stav LOCK a pak RUNNABLE .
T#505 Co se stane je-li x typu Thread a zavoláte x.run( ) ?
Metodu provede Thread.currentThread a nikoli vlákno x.
To může mít nepříjemné důsledky.
T#535 Jak lze vícekrát odstartovat tentýž objekt typu Thread ?
Nelze - nanejvýš jednou a to pouze metodou start().
T#599 Co se stane new Thread(){ public void run(int v){System.exit(v);} }.run(); // ?
Vytvoří se objekt dle anonymní třídy typu Thread, který se však neodstartuje.
Běžné vlákno provede prázdnou metodu run(), takže se vlastně nic nestane.
Tělo třídy { public void run(int v){System.exit(v);} je tam zcela zbytečně.
U#263 Jaký je význam hodnoty time: long time=System.currentTimeMillis(); ?
UTC čas uplynulý od 01 JAN 1970 00:00:00 v msec.
UTC = Universal Time Coordinated (občas korigovaný dle rotace Země).
U#299 Jaké hodnoty vrací funkce java.lang.Math.random() ?
Pseudonáhodná čísla typu double rovnoměrné rozdělená v <0.0, 1.0).
U#300 Jak se získají náhodná čísla s normálním (Gaussovým) rozdělením ?
Pomocí objektu třídy java.util.Random metodou nextGaussian()
U#301 Jak se získají náhodná čísla s Poissonovým rozdělením ?
To API Javy nemá. Leckde jinde např.: commons.apache.org/math/
U#302 Jak se získají náhodná čísla se Studentovým rozdělením ?
To API Javy nemá. Leckde jinde najdete na internetu.
U#303 Jakou má podporu komplexní aritmetika ?
V API Javy žádnou. Hledejte jinde např.: commons.apache.org/math/
U#319 Co podporuje třída java.util.Arrays ?
Třídění, vyhledávání, vyplňování, porovnávání, kopírovaní a výpis polí
statickými metodami sort, binarySearch, fill, equals, copyOf, toString.
U#438 Co dělá metoda shuffle a kde je definována ?
Náhodně permutuje prvky kolekce List.
Statická metoda třídy java.util.Collections.
U#539 Jak zajistíte, aby třídění Arrays.sort(pole) nebylo ovlivněno jiným vláknem ?
Ježto metody třídy Array nejsou synchronized, je nutno zřídit obklopující
blok synchronizovaný na pole synchronized(pole){ Arrays.sort(pole); }
U#540 Jak zajistíte, aby všechny metody třídy ArrayList byly synchronizovány ?
List list = Collections.synchronizedList( new ArrayList() );
U#542 Uveďte znaky Formatteru pro základní typy při formátování řetězů a tisku ?
d - celé číslo dekadicky, x - hexadecimální, f - číslo s desetinnou tečkou,
e - exponenciálně, c - znak, s - string, t - čas
U#565 K čemu slouží třída java.util.BitSet a jaké má metody ?
K vytvoření indexované dynamické množiny hodnot typu boolean.
get/set n-tý bit, logické operace and, andNot, or, flip, intersect
na množině bitů, cardinality - počet true bitů, ...
U#614 Jaký formát mají data v souborech typu .properties ?
V každé řádce jen klíč = hodnota a obé jsou řetězy.
U#615 Co je Locale a k čemu slouží ?
Konkrétní třída java.util.Local umožňuje definovat
jazyk a stát pro podporu internacionalizace.
U#617 Co znamená i18n ?
Zkratka za internationalization (celkem 20 písmen).
V#001 Co je to byte-kód a jak se zpracovává ?
Vnitřní forma javského programu je výsledkem kompilace.
V runtime JVM ji nejdříve verifikuje a pak interpretuje.
Anebo lépe v runtime ji ještě JIT přeloží do kódu platformy,
čímž program běží rychle jako v C.
V#002 Kdy a jak se inicializují statické proměnné třídy ?
V okamžiku zavedení třídy na implicitní hodnoty
nebo na hodnoty inicializačních výrazů
nebo statickými inicializátory.
V#003 Jak je zajištěna nezávislost Javy na platformě ?
Žádný její rys není závislý na implementaci.
V#023 Co je JIT (Just In Time)?
Překlad byte kódu do instrukcí platformy v runtime.
V#042 V které části operační paměti se ukládají objekty ?
Na haldě.
V#043 V které části operační paměti se ukládají lokální proměnné ?
Do aktivačních záznamů na zásobníku.
Zásobníky jsou vlatnictvím vláken.
V#128 Jak se vytvoří objekt, kde je alokován v čase běhu a co obsahuje ?
Pomocí konstruktoru, na haldě, nestatické atributy.
V#131 V jakém případě lze objekt zrušit, jak a kdy se to provádí ?
Není-li referován z žádného živého vlákna.
Garbage collectorem, JVM při nedostatku paměti nebo programaticky System.gc()
V#157 Kdy a jak se inicializují statické atributy třídy v čase běhu ?
Při natažení třídy do paměti přiřazením hodnot a případně
statickými inicializátory.
V#158 Kdy a jak se inicializují atributy interfejsu v čase běhu ?
Při natažení interfejsu do paměti přiřazením hodnot.
V#256 Co je jar a jaké má vlastnosti ?
Java ARchive je extenze zipu, případně se souborem MANIFEST.MF
v adresáři META-INF. I dalších kvalifikovaných adresářů META-INF
může být libovolně.
V#266 Co je javadoc ?
Součást JDK.
Program, který z dokumentačních komentářů vytváří doclety.
V#286 Jaké hlavní vstupy má kompilátor ?
soubory *.java a classpath
V#287 Co je výstupem kompilátoru je-li zdroj: interface $ { } // ?
soubor $.class
V#369 Kde najdete v JDK programy java, javac, javadoc a k čemu slouží ?
V jdk***/bin, je to: interpret, kompilátor, dokumentátor.
V#370 Co je JRE a kde se v něm nalézá program javac ?
Java Runtime Environment - obsahuje interpret java a API.
Neobsahuje vývojové prostředky jako:
kompilátor javac, dokumentátor javadoc, debugger apod.
W#056 Co je a co obsahuje java.awt ?
Balíček a podbalíčky Abstract Window Toolkit zajišťují GUI
vázaný na platformu. Obsahuje řadu interaktivních kompontent
a příslušenství. Podbalíčky .event .color .geom .image .print
W#060 Uveďte nejdůležitější interaktivní komponent v AWT.
Button, TextField, TextArea, Choice, List, Canvas, ScrollBar,
MenuBar, Menu, MenuItem, PopupMenu
W#061 Co je AWT kontejner, uveďte podtřídy definující kontejnery.
Objekt třídy java.awt.Container pro ukládání grafických
komponent a jejich rozmisťování. Container má přímé potomky
Panel, ScrollPane a Window.
W#062 Ve které třídě v AWT je definována metoda repaint a k čemu slouží ?
V java.awt.Component, definuje co má být vykresleno
awt-vláknem.
W#063 Ve které třídě v awt je definována metoda repaint a k čemu slouží ?
V java.awt.Component, zadává požedavek na překreslení komponenty
případně její obdélníkové části.
W#065 Jakou metodou se přidává objekt do kontejneru ?
add( Component c, ... )
W#066 Co je to layout manager ?
Objekt který rozmisťuje nějakým způsobem grafické
komponenty v grafickém kontejneru.
W#067 Uveďte standardní typy layout managerů.
awt: Flow- Grid- Border- GridBag- Cardswing: Box- Spring-
W#068 Jak se chová FlowLayout ?
Rozmisťuje komponenty do řádek zleva doprava a shora
dolů, jakoby formou přetékavého textu.
Komponenty zachovávají svoji velikost.
Umožňuje alignment levý , pravý, středový.
W#069 Jak se chová GridLayout ?
Rozmisťuje komponenty do buněk pravidelné mřížky.
Komponenty zabírají celé buňky.
W#070 Jak se chová BorderLayout ?
Rozmisťuje komponenty do pěti oblastí: North, West, Center,
East a South. Komponenta zabere vždy celou oblast.
W#071 Jak se chová CardLayout ?
Jako balíček karet, viditelná je jen ta vrchni.
W#072 Co umožňuje GridBagLayout ?
Rozmisťuje komponenty do buněk nepravidelné mřížky.
Komponenty mohou obsadit i více buněk tvořících obdélník.
W#073 Co znamená setLayout( null ) ?
Neužití standardních layoutů. Komponenty rozmisťuje pragramátor
metodou setBounds.
W#117 Které metody spustí volání metoda repaint( ) jednak v awt, jednak ve swingu ?
V awt: update( Graphics g ) ve swingu: paint( Graphics g )
W#121 Co je a co umožňuje objekt třídy java.awt.GridBagLayout ?
Objekt typu LayoutManager.
Rozmístění komponent v kontaineru do buněk nepravidelné mřížky.
Komponenta může obsadit rektangulárně i více buněk.
W#122 Jaké hodnoty obsahuje java.awt.Point a co znamenají ?
int x, y; Pozici od levého horního rohu tj. ve 4. kvadrantu.
W#123 Jaké hodnoty obsahuje java.awt.Dimension a co znamenají ?
int width, height; Rozměr obdélníku.
W#136 Uveďte pořadí předků tříd java.awt.Frame a java.awt.Panel.
Object, Component, Container, Window, Frame
Object, Component, Container, Panel
W#252 Jaké je úplné jméno třídy Color ? V kterém balíčku sídlí ?
java.awt.Color, v java.awt
W#253 Jaké jsou barevné složky třídy Color ?
ARGB
W#254 Přibližně kolik barevných odstínů lze vytvořit třídou Color ?
Pro opacitu: 2^24 = 16 777 216
S užitím poloprůhlednosti 2^32 = cca 4 mld.
W#255 Vytvořte poloprůhlednou fialovou barvu a zdůvodněte.
Color col = new Color( 255, 0, 255, 128 ); // typy int
Color col = new Color( 1, 0, 1, 0.5f );
// typy float
W#275 Jaký je defaultní LayoutManager pro Frame a jak se chová ?
BorderLayout, rozdělí plochu na 5 oblastí N, W, C, E, S.
W#276 Jaký je defaultní LayoutManager pro Applet ?
FlowLayout, ten přejal od Panelu (svého přímého předka).
W#304 Napište jak pípnout ?
Toolkit tk=Toolkit.getDefaultToolkit();
tk.beep();
W#305 K čemu slouží třída Toolkit a kde je definována ?
K zíkání informací z vnějšího prostředí GUI. V java.awt.
W#306 Jaké třídy umožňují získávat některé informace z OS.
System, Properties, ProcessBuilder.
W#527 V které třídě jsou definovány metody setLayout(...) a getLayout() ?
V java.awt.Container, což je přímý předek java.awt.Frame, java.awt.Panel,
javax.swing.JComponent aj.
W#575 Získejte zelenou složku pixelu reprezentovaného jako int pix: //?
int green = pix>>8 & 255; nebo green = (pix & 0xFF00)>>8;
Pozn.: >> má vyšší prioritu než & .
X#048 Co je to výjimka a čím je reprezentovaná ?
Jednak třída Exception ze stromu Throwable,
jednak objekt typu Exception popisující nehodu v runtime.
X#049 Je výjimka objekt, třída, interface anebo událost ?
Vyjímka je objekt třídy Exception vytvořený coby popis konfliktu.
X#050 Napište příklad implicitního vzniku výjimky.
(new int[0])[0]=0/0; Jakou to vyhodí ?
X#051 Jakou vyjímku vyhodí příkaz (new int[0])[0]=0/0; ?
java.lang.ArithmeticException
X#052 Napište příklad explicitního vzniku výjimky.
throw new IllegalArgumentException("Takhle to nejde");
X#053 Napište příklad úplné syntaktické formy příkazu try-catch-finally.
try ( acloseable ; bcloseable ; ... ) {
...
}
catch( NullPointerException | ArithmeticException ex ) { ... }
catch( final Exception ex ) { ... }
finally { ... }
X#054 Kolik parametrů může mít klauzule catch a jakých jsou typů ?
Právě jeden - ten však může být specifikován více subtypy
Throwable (oddělené | ) aniž některý je subtypem jiného.
X#055 Jak se chová blok finally ?
Je-li definován, je proveden vždy.
X#132 Napište příklad explicitního (tj. záměrného) vzniku, vyhození a odchycení výjimky.
try {
throw new NullPointerException();
}
catch ( Exception ex ) { }
X#146 Napište definici vlastní nekontrolované výjimky a vyhoďte tuto výjimku.
class V extends RuntimeException { }
throw new V( );
X#163 K čemu slouží, kde se píše a kdy se aktivuje klauzule finally ?
K úklidu klauzule tcf nebo tf, na konci, v každém případě je-li přítomna.
X#230 Čím se liší výjimky typu RuntimeException od ostatních ?
Jsou unchecked , tj. nekontrolované kompilátorem.
X#236 Kde všude lze napsat klíčové slovo throws a co případně za ním ?
V hlavičce metody či konstruktoru. Seznam tříd typu Throwable.
X#292 Je vyhozená vyjímka objekt, třída, událost nebo anotace ?
Objekt třídy Exception potomek třídy Throwable.
X#345 Které všechny objekty lze vyhodit pomocí operátoru throw ?
Pokud splňují x instanceof java.lang.Throwable,
typicky Exception a Error - ale nejen.
X#452 Proč jsou Error a výjimky typu RuntimeException nekontrolované ?
Error jsou těžko předvídatelné a většinou nenapravitelné.
RutimeException jsou potíže způsobené převážně programátorem
během vývoje. A mentorování kompilátorem by bylo zbytečně zatěžující.
X#611 V jakém pořadí je nutno psát catch( Throwable parm ) klauzuje ?
Tak, aby stejný nebo obecnější typ parametru nepředcházel jeho subtypu.
X#612 Co se stane:
try{ } finally { } // ?
Oba prázdné bloky vlákno provede - byť naprázdno.
X#613 Co se stane ?
# while (true) {
#
try { System.out.println( 5/0 ); }
#
catch ( Exception ex ) { break; }
#
finally { System.out.println("*"); continue; }
# }
Nekonečný tisk hvězdiček.
X#614 Co se stane ?
# while (true) {
#
try { System.out.println( 5/0 ); }
#
catch ( Exception ex ) { continue; }
#
finally { System.out.println("*"); break; }
# }
Vytiskne jen jednu hvězdičku.
Y#401 Kde lze deklarovat typové parametry ?
Ve hlavičkách tříd, interfejsů a metod.
U konstruktorů to má smysl jen v parametrických třídách.
Metody lze parametrizovat i v neparametrizovaných třídách.
Y#402 Napište příklad deklarací typových parametrů třídy a metody.
... class Jmeno < T1, ... Tn > extends ... implements ... { }
... < T1, ... Tn > Ti jmeno ( .... ) throws ... { ... }
Y#403 Jaká je syntax deklarace typových parametrů ?
< T1, T2, ... Tn >
Y#404 Napište příklad deklarací typových parametrů abstraktní metody.
abstract <U,V, W extends Number> W m(U u, V v) ;
Y#405 Jaké identifikátory se obvykle užívají pro typové parametry ?
T - typ, tj. třída či interfejs, E - element, N - number,
K - klíč, V - value
Y#406 Co znamená a co jsou X,A,B,C ve vymezení <X extends A & B & C> ?
X - typová proměnná, A - třída nebo interfejs,
B,C - interfejsy, & - konjunkce. Tím X vymezuje množinu
přípustných objektů.
Y#407 Co znamená přechod na raw type ? Napište příklad jak nastane.
List lst = new ArrayList<String>();
Y#408 Co je diamond operátor a jaký je jeho smysl ?
Píše se jako <> ale i < > slouží pro typovou inferenci.
Y#409 Kde se všude píše diamond operátor tj. <> ?
Tímto operátorem se vyjadřuje inference.
Jen v konstrukci, např.: List<Float> a = new ArrayList<>( ... ) .
Y#410 Co je a kde se vyskytuje žolík ( wildcard ) ?
Žolík, tj. ?, představuje množinu vymezených typů.
Samotný ? je ekvivalentní s ? extends Object .
Y#411 Jak může být reference typově vymezena žolíkem ?
Shora: ? extends Typ anebo zdola: ? super Typ .
Z#006 Jak se v Javě provádí dereference odkazů?
Implicitně při přístupu k položkám.
Z#007 Jak lze zjistit délku kteréhokoli referenčního typu ?
Nelze.
Z#008 Jak lze přetypovat referenční typ na int?
Nelze.
Z#009 Jak se v Javě zduplikuje objekt ?
Metodou A a2 = a1.clone(); kde :
class A implements Cloneable {
public A clone() throws CloneNotSupportedException {
A x = (A) super.clone(); ... return x; }
}
Z#010 Uveďte příklad deklarace trojúhelníkové matice.
short triagle[][]={ {1}, {2, 3}, {4, 5, 6} };
Z#011 Co všechno znamená modifikátor final?
Proměnnou (instanční, třídní, lokální, parametr) nutno nastavit
nastavit, ale jen jednou.
Metodu nelze překrýt. Třída nemůže mít potomky.
Z#012 Co musí splňovat překrývající (overriding) metoda ?
Musí mít shodnou signaturu, kompatibilní návratový typ,
nesmí mít přísnější modifikátor přístupu,
a nesmí rozšiřovat stigma kontrolovaných vyjímek.
Z#013 Co musí splňovat překrývající (overriding) konstruktor ?
Nic, neboť konstruktory se nedědí.
Z#014 Co je nativní metoda ?
Metoda napsaná v jiném jazyce s modifikátorem native.
Místo těla má jen středník.
Z#015 Co je nativní nelokální proměnná, tj. s modifikátorem native ?
Syntaktická chyba.
Z#016 Co je nativní třída, tj. s modifikátorem native ?
Syntaktická chyba.
Z#017 Co je nativní interfejs ?
Syntaktická chyba.
Z#018 Proč není v Javě zaveden typ union?
Pomocí unionu by bylo možno obejít striktní typovou kontrolu.
Z#019 Co je třída ?
Konstrukt definující množinu dat a operací nad těmito daty.
Z#020 Jaká omezení má statická metoda oproti obyčejné (dynamické) metodě ?
Statická metoda nemůže přímo přistupovat k instančním proměnným ani
přímo volat instanční metody třídy. Přistoupit resp. volat může
prostřednictvím reference k objektu.
Z#021 Co je objekt ?
Objekt je jedna instance instančních proměnných třídy.
Z#022 Jaký je rozdíl mezi objektem a instancí třídy.
Žádný.
Z#024 Jak se inicializují instanční proměnné ?
Vždy na implicitní hodnoty, pak postupně případně na hodnoty přiřazené:
- v deklaraci atributu,
- postupně v nestatických inicializátorech
- konstruktorech.
Z#025 Co je to implicitní konstruktor ?
Konstruktor bez parametrů, který je implicitně nadeklarován
pokud není není deklarován žádný explicitní konstruktor.
Z#026 Které operátory umožňují explicitní volání konstruktoru?
this, super, new
Z#027 Co jsou to třídní proměnné (class variables), jaký mají modifikátor ?
Proměnné, které vznikají v okamžiku zavedení třídy do paměti
a identifikují se jménem třídy a jménem proměnné.
Tyto proměnné mají modifikátor static.
Z#028 Jak a kdy se provádí rušení objektů ?
Garbage collectorem, jenž se aktivuje buď automaticky při nedostatku paměti
na haldě anebo zavoláním metody System.gc .
Z#029 Jak se provádí rušení tříd ?
Výmazem z balíčku na disku.
Z#030 Kdy může být objekt zrušen ?
Neexistuje-li nedémonické vlákno od něhož vedou reference k objektu.
To vlákno může být i neživé.
Z#031 K čemu slouží metoda finalize a kde je definována ?
Slouží k poslednímu přístupu k objektu jenž garbage collector chce zrušit.
Definována je v java.lang.Object jako prázdná.
Z#032 Jak se vytváří podtřída ( subclass ) a jak podinterfejs ( subinterface )?
Obé extenzí s užitím klíčového slova extends.
Z#033 Jak se jmenuje univerzální nadtřída a v kterém je balíčku?
java.lang.Object
Z#034 Jak se jmenuje univerzální nadinterface a ve kterém je balíčku?
Neexistuje, tudíž v žádném.
Z#035 K čemu slouží klíčové slovo super ?
super ( .. ) volá konstruktor přímé nadtřídy,
super. referuje člen nadtřídy,
< ... super ... > k vymezení typového parametru
Z#036 K čemu slouží klíčové slovo this ?
this ( .. ) volá konstruktor téže třídy,
this. referuje člen téhož objektu.
Z#037 Které metody nemohou být překryty (overriden) ?
final a private.
Překrývat lze jen metodu nestatickou jinou nestatickou
anebo statickou jinou statickou.
Z#038 Co je to abstraktní třída a jaké má vlastnosti ?
Třída vyznačená modifikátorem abstract.
Má alespoň jeden konstruktor, ale nemůže vytvářet objekty.
Může mít abstraktní metody. Její statická část tj. atributy, metody
a inicializátory jsou zcela funkční.
Z#039 Co je abstraktní metoda ? Uveďte příklad.
Nestatická metoda má středník místo těla.
Nemůže být static, private, final ani synchronized.
Z#040 Jaký je rozdíl mezi abstraktní a prázdnou metodou ? Uveďte příklad.
abstract int m1( ... ); nemá tělo jen středník, má zvolený návratový typ
void m2( ... ) {} má prázdné tělo, defaultní return, návratový typ void
Z#041 Jak se liší abstraktní třída a interface ?
Abstaktní třída je potomkem nějaké třídy, může implementovat interfejsy,
má alespoň jeden konstruktor, může mít konkrétní metody, nestatické proměnné,
statické i nefinální proměnné, statické i nestatické inicializátory.
Interfejs může extendovat libovolný počet interfejsů.
Může mít jen statické, finální inicializované atributy,
abstraktní metody a vnořené interfejsy a třídy.
Z#044 Co znamená klíčové slovo package a kde je možné ho použít ?
Package (balíček) je sbírka věcně souvisejících tříd a interfejsů
tvořící pro ně jmenný prostor a to ve stejnojmenných adresářích
jednak ve zdroji, jednak v přeložené kódu.
Tím se zajišťuje pořádek a ochrana.
Jeden package patří jen jednou na začátek zdrojového souboru.
Z#045 K čemu slouží příkaz import ?
Definuje cestu ke třídám a interfejsům a čímž netřeba uvádět
ve zdrojich úplná jména. Zlepšuje se tím čitelnost zdrojů.
Z#046 Jaké jsou modifikátory přístupu a co znamenají ?
public - odevšad přístupný,
protected - jen členům v balíčku a potomkům typu v jiných balíčcích,
nepsaný package-protected tzv. friend - jen členům v balíčku,
private - přístup jen v typu.
Z#047 Vyjmenujte alespoň 5 standardních javských package a k čemu slouží.
Např.: java .lang .util .io .net .awt .awt.event , javax .swing
Z#110 Jak lze využít abstraktní konstruktor ?
Nijak, neboť neexistuje.
Z#111 Co jsou instanční proměnné, podle čeho je poznáte a kde jsou alokovány v čase běhu?
Jsou to atributy objektů, jsou nestatické a tedy nemají
modifikátor static, alokovány jsou na haldě.
Z#112 Které metody mohou být překryty ( overriden ) instanční nebo třídní ?
Obé, ale jen nestatickou jinou nestatickou či statickou jinou statickou.
Z#113 Co tvoří signatury metod a konstruktorů ?
Jméno a sekvence typů parametrů.
Nikoli návratový typ, modifikátory, stigma (tj. throws-list )
Z#114 Jaký je rozsah platnosti formálních parametrů konstruktoru ?
Celé tělo konstruktoru.
Z#115 Napište příklad abstraktní metody. Kdy může mít modifikátor static ?
abstract int m( );
Nikdy.
Z#116 Co způsobí příkaz String t = super.toString( ); ?
Zavolá metodu toString přímého předka.
Z#124 Kde všude lze napsat this( ); a co způsobí ?
Jen jako první příkaz v konstruktoru, zavolá bezparametrový konstruktor téže třídy.
Z#126 Co všechno lze deklarovat ve třídě ?
Atributy, metody, konstruktory, inicializátory,
vnořené třídy a interfejsy, vnitřní třídy, výčty tj. enum, anotace.
Z#127 Co je abstraktní třída? Kdy může mít modifikátor final? Kolik má konstruktorů ?
Třída s modifikátorem abstract. Nemůže. Alespoň jeden.
Z#129 Co je anonymní třída a jak ji lze vytvořit ? Napište příklad použití.
Vnitřní třída bez hlavičky použitelná pro vytvoření jediného objektu.
X o = new X( ) { ... } kde X je třída anebo interfejs.
V těle je možné či nutné přepsat metody tak, aby vznikla kontrétní třída.
Z#134 Napište příklad zavolání metody předka.
super.m(...);
Z#135 Co způsobí příkaz String t = super.super.toString( ); ?
Syntaktickou chybu při kompilaci.
Z#140 K čemu slouží a kde je definována metoda finalize( ) ?
K přístupu k objektu, který GC chce zrušit, v java.lang.Object.
Z#141 Napište test zda objekt referovaný proměnnou q implementuje interface W.
q instanceof W
Z#142 Napište test zda objekt referovaný proměnnou p je typu T.
p instanceof T
Z#143 Jaké jsou modifikátory přístupu tříd ?
Pro "vrcholové" : public, "friend"
Pro vnitřní/vnořené: public, "friend", protected, private,
Z#144 Podle čeho poznáte, že metoda je přetížená (overloaded) ?
Má stejné jméno jako jiná metoda v témže typu - leč jinou signaturu.
Přesněji řečeno: přetížené je jen jejich jméno.
Z#145 Co umožňuje polymorfismus ? Co je a čeho se týká pozdní vazba ?
Pojednat heterogenní kolekce podle společného nadtypu, přičemž chování
je specificky implementované dle jednotlivých podtypů.
Z#147 Kde všude lze napsat super( ); a co způsobí ?
Jen jako první příkaz v konstruktoru, aktivuje konstruktor přímého předka.
Z#156 Kde všude lze deklarovat lokální proměnné a kde jsou alokovány v čase běhu ?
V metodách, konstruktorech, inicializátorech a blocích.
V aktivačních záznamech zásobníků vláken.
Z#159 Jak lze změnit typ atributů interfejsu v čase běhu ?
Nelze.
Z#160 Jak lze přidat třídě metody v čase běhu ?
Nelze.
Z#161 Co je implicitní tj. defaultní konstruktor, jeho parametry, obsah a chování ?
Jenž vznikne není-li žádný , žádné, aktivuje konstruktor bez parametrů
přímého předka. Object však nemá předka.
Z#162 Co jsou to třídní proměnné ( class variable ), jak se identifikují a kde sídlí ?
Unikátní proměnné, mají modifikátor static, v popisném objektu třídy.
Z#173 Napište příklad statického inicializátoru. Kolik jich třída může mít ?
static { ... } , libovolně.
Z#175 Co způsobí příkaz String t = super.this.toString( ); ?
Syntaktickou chybu při kompilaci.
Z#176 Co způsobí příkaz String t = this.this.toString( ); ?
Syntaktickou chybu při kompilaci.
Z#177 Co způsobí příkaz String t = (super).toString( ); ?
Syntaktickou chybu při kompilaci.
Z#178 Co je java.lang.Object a jaké má dostupné metody ?
Jednak základní třída API, kořenem stromu všech tříd,
jednak objekt jenž je základem všech objektů.
public: equal, hasCode, toString,
final: getClass, wait, notify, notifyAll,
protected: finalize, clone.
Z#179 Je třída java.lang.Object finální ? Proč ano, proč ne ?
Není. Byla-li by, nemohla by mít potomky a tudíž by byla v API jediná.
Z#181 Je třída java.lang.Object synchronizovaná ?
Ne, žádná třída není. Synchronizovat lze jen metody anebo bloky.
Z#182 Je třída java.lang.Class finální ? Proč ano, proč ne ?
Ano, je příliš důležitá pro indentifikaci objektů.
Z#183 Je třída java.lang.Class Serializable ?
Ano.
Z#184 Je objekt typu java.lang.Runnable serializovatelný ?
To nelze určit, neboť interfejs Runnable není Serializable.
Záleží jaká třída objekt zkonstruovala.
Z#185 Jaký je rozdíl mezi instanční a třídní proměnnou ?
Instanční sídlí v každém vytvořeném objektu,
třídní je unikátní a sídlí v popisném objektu třídy.
Z#186 Jaký je rozdíl mezi instanční a třídní metodou ?
Třídní má modifikátor static, je viditelná ze statického i nestatického
kontextu třídy, má přístup ke statickému kontextu vlastní či referované
třídy. Nemá přístup k nestatickému konktextu.
Instanční se vztahuje k referovanému objektu a i přístup k jeho
statickému konktextu.
Z#187 Jak se vytvoří instance třídy ?
Instance třídy čili objekt operátorem new na konstruktoru,
klonováním, metodou newInstance() na typu Class nebo deserializací.
Z#188 Co je podtřída (subclass) a jak se vytvoří ?
class Subclass extends Třída implements .... { ... }
Z#189 Co je dědičnost ?
Možnost typu (potomka) získat hodnoty a funkcionality nadtypu (předka).
Z#190 Čeho se týká přetížení a překrytí ?
Prvé se týká metod a konstruktorů téže třídy a metod téhož interfejsu,
mající shodná jména avšak rozdílnou signaturu.
Druhé se týká metod typu a jeho podtypu mající shodnou signaturu.
Z#191 K čemu všemu se užívá klíčové slovo super ?
- super. odkazuje k nestatickému členu (přímého) předka,
- super(...) znamená volání konstruktoru přímého předka.
Z#192 K čemu všemu se užívá klíčové slovo this ?
- this. odkazuje k nestatickému členu téže třídy,
- this(...) znamená volání konstruktoru téže třídy.
Z#193 K čemu slouží čárky v klausuli for ?
Umožňují vložit do inicializace i do modifikace více příkazů.
Např.: for ( int i=0, j=10; i<j ; i++, j--, tk.beep() ) { ... }
Z#194 Kde všude lze ve zdrojovém kódu použít dvojtečku ?
Za návěštím, v ternárním výrazu, v case a default a ve for( e : c )
a v annotaci.
Z#195 Co je návěští (label), kde ho lze uvést ? Uveďte příklad zápisu.
Před příkazy cyklu. Případně odkaz na návěští za break či za continue.
CYC1: while (...) { ... continue CYC1; ... break CYC1; ... }
Z#196 Co je finální třída ?
Ta s modifikátorem final. Nelze od ní vytvořit subclass.
Z#197 K čemu slouží programový konstrukt interface ?
K definici abstraktních metod a statických konstant.
Z#198 Co je finální interfejs ?
Nesmysl.
Z#199 Má Java vícečetnou dědičnost ?
Tříd ne, interfejsů ano.
Z#200 Co je klíčové slovo instanceof a k čemu slouží ?
Boolevský operátor, určí zda objekt patří do stromu referenčního typu,
např.: o instnceof T
Z#201 Co je balíček (package) a k čemu slouží ?
Kvalifikovaný jmenný prostor sloužící k uložení tříd a interfejsů.
Z#202 K čemu všemu se užívá klíčové slovo import ?
Ke zjednodušenému zápisu typů ve zdrojovém kódu.
Kdykoli lze užít úplné jméno typu - např. java.awt.List
Z#203 Co znamená import static ?
Import jen statických členů či jen určitého členu uvedené třídy .
Z#204 Co je kvalifikované jméno třídy ?
kvalifikované jméno balíčku . jméno třídy
Z#205 Co je kvalifikované jméno interfejsu ?
kvalifikované jméno balíčku . jméno interfejsu
Z#206 Které balíčky se importují defaultně ?
Jen java.lang.
Z#207 Která třída je implicitním předkem v definici třídy ?
java.lang.Object
Z#208 Který balíček obsahuje třídu java.lang.Object ?
java.lang.
Z#209 Který balíček obsahuje třídu Thread ?
java.lang.
Z#210 Jaký je rozdíl mezi typy Double a double ?
Obalová třída (wrap class) pro primitiv a primitivní typ (64 bit).
Z#211 Co je autoboxing ?
Automatické zabalování (boxing) a rozbalování (deboxing)
primitivů do objektů pomocí obalových tříd (wrapped classes).
Z#212 Co znamená ve zdrojovém kódu Javy slovo unsigned ?
Podle konvence jen jméno proměnné. Java nemá takové klíčové slovo.
Z#213 K čemu se užívá klíčové slovo assert ?
Zevně ovladatelný test podmínky, pro false vyhazuje AssertionError.
Z#214 Jaká je javská konvence psaní id: krysí, psí, velbloudí či kravská ?
Velbloudí jako DvouhrbýDromedárSaharský.
Z#215 Co jsou přetížené operátory ? Má Java nějaké ? Které ?
Symbol operátoru je využíván pro rozdílné operace např. dle kontextu.
Jen plus (+) užitý pro aritmetické sčítání či zřetězení.
Z#216 Jaká písmena lze připojit za číselný literál a co znamenají ?
d, D, f, F, l, L
Z#217 Jak lze změnit typ existujícího objektu ?
Nelze. Lze na něj odkázat jen jinou příhodnou referencí typu.
Z#218 Je-li jméno třídy r.s.t.MojeTrida, co znamenají písmena r,s,t ?
Jméno balíčku r a podbalíčku s, t a též relativní cestu uložení.
Z#219 Při volání metody se parametry předávají referencí anebo hodnotou ?
Hodnotou.
Z#226 Co udělá příkaz: System.out.println( new int[0x29] . length ); //?
Vytvoří jinak nepoužitelné pole int[41], vytiskne 41 a newline.
Z#227 Jak se vytváří vícerozměrné pole ?
Skládáním vždy o jednu méněrozměrných.
Z#228 Kde všude lze použít hranaté závorky ?
Ve vyznačení reference na pole, délky pole a prvku pole.
Z#229 Co znamená RTTI a k čemu slouží ?
Run Time Type Identification umožňuje v běhu aplikace-apletu
zjistit povahu objektů a primitivů.
Z#233 Jak se zachová kompilátor pro řádek: abstract interface _ {} // ?
Zkompiluje a vytvoří ve jmenném prostoru soubor _.class .
Z#242 K čemu je dobrý privátní konstruktor ?
Pro skrytí před vnějším uživatelem a pro omezení počtu vytvářených
instancí třídy.
Např. 0 - System, Math, Collections, 1 - pro singletony - Registry
.
Z#244 Může být konstruktor abstraktní ? Proč ano, proč ne ?
Ne, nemělo by to smysl - konstruktory se nedědí.
Z#245 Může mít konstruktor modifikátor protected ? Proč ano/ne ?
Ano.
Z#246 Může být konstruktor privátní ? Proč ano/ne ?
Ano pro tvorbu jen omezeného počtu objektů: Singleton ne žádného Math.
Z#247 Může mít definice konstruktoru návratorý typ void ? Proč ano/ne ?
Ne, přestane být konstruktorem - změní se na metodu-proceduru.
A pokud začíná velkým písmenem, poruší jmennou konvenci.
Z#248 Lze v těle konstruktoru užít příkaz return; ?
Ano, i vícekrát. Vždy však bez návratové hodnoty.
Z#249 Lze v těle konstruktoru užít příkaz return this; ?
Ne, jen returny bez návratové hodnoty.
Z#250 Lze v těle konstruktoru volat více konstruktorů téže třídy nebo nadtřídy ?
Ne, neboť this(...) anebo super(...) musí být jen jako první.
Z#264 Co je to a kam to lze napsat : /** ... */
?
Dokumentační komentář. Před definici: typu, nelokální proměnné
konstruktoru a metody.
Z#265 Co je dokumentační komentář a kde se vyskytuje ?
Komentář /** ... */ vhodný pro doclety balíčků, typů, konstruktorů,
metod a atributů.
Z#267 Napište řádkový komentář !
// Takhle na konci řádky
Z#268 Napište blokový komentář .
/* Takhle třeba
... Nazdar !!!
*/
Z#269 Co se stane: System.out/**BLA**/.println/* Nazdar*/(/* AHOJ */); // ?
Vytiskne se prázdný řádek, neboť kompilátor komentáře vynechá.
Z#270 Co je mělké a hluboké klonování ?
Mělké: skutečná kopie objektu s primitivními typy a referencemi.
Reference však odkazují na tytéž objekty jako vzor. Metoda clone();
Hluboké: kopíruje se všechny referované objekty, tj. celý graf.
Z#273 Co se vytiskne: System.out.println( new int['Z']['Y'] ); ?
[[[email protected] a hashCode
Z#280 Které slovo není jméno (id): in println лошадь3 \u0041 _$$ T.etc x00FFL ?
Žádné, každé je platné jméno.
Z#281 Co je třeba, aby to běželo: new \u0041().\u0061();
//?
Aby přístupná třída A s konstruktorem A() mající
metodu a() . Např.: class A { void a() {} }
Z#282 Jaké jsou modifikátory přístupu metod ?
Pro konkrétní : public, protected, "friend", private
Pro abstraktní: public, protected, "friend"
Z#283 Čím končí řádkový komentář ?
Koncem řádky ( CRLF nebo NL nebo konec dokumentu ).
Z#284 Jaký bude výsledek
int i; i++10;
// ?
Syntaktická chyba.
Z#285 Které klíčové slovo musí obsahovat tělo každé funkce ?
return výraz ;
Z#289 Co se stane neodpovídá-li žádný case hodnotě řídící proměnné ve switch ?
Pokud obsahuje klíčové slovo default přejde řízení k němu,
jinak na sekvenčně další příkaz.
Z#290 Jakými způsoby lze ukončit cyklus while ?
podmínkou v hlavičce nebo pomocí break, return, vyhozením vyjímky
či chyby nebo continue do vnějšího cyklu,
Z#291 Kde se všude může užít znak % ?
Jako modulo (zbytek po dělení) nebo příznak ve formátování.
Z#293 Metody jsou buď procedury anebo funkce. V čem se liší ?
Procedura má návratový typ void, funkce jiný a musí vracet hodnotu.
Z#294 Může být návratový typ Cloneable? Např.: protected Cloneable m(){...}
Ano, návratový typ může být i kterýkoli typ tedy i interfejs.
Z#295 Co znamená tato řádka: _();
// ?
Volání instanční nebo třídní metody bez parametrů.
Metoda však porušuje konvenci jmen a nejspíš to ani není sloveso.
Z#296 K čemu je interfejs, jenž nic nezdědil a má prázdné tělo - znáte takové ?
To je tzv. tagging interfejs informuje o schopnost či povolení.
Např.: Serializable, Cloneable, ...
Z#298 Kde se všude užívá znak * a v jakém významu ?
Ve výrazu jako násobení, v dokumentační a blokových komentářích,
a v příkazu import ve smyslu všech položek v daném adresáři.
Z#307 Jaké třídy umožňují spouštět programy v OS, tj. mimo tuto JVM ?
ProcessBuilder a Process.
Z#320 Může být pole statický objekt ?
Ne - neexistují žádné statické objekty.
Z#323 Co je getr (getter) ?
Metoda, která vydá žádanou hodnotu proměnné objektu.
Nazývá se též accessor.
Z#324 Co je setr (setter -zvaný též mutator) ? Napište příklad.
Veřejná metoda nastavující atribut na zadanou přípustnou hodnotu.
Dodržuje jmennou konvenci - např.:
int hodnota;
public void setHodnota(int hodnota) { this.hodnota=hodnota; }
Z#325 Co obsahují prvky pole new java.lang.Runnable[7]; ?
Všechny obsahují null.
Z#326 Co obsahují prvky pole new java.lang.Thread[7];
?
Všechny obsahují null.
Z#327 Co obsahují prvky pole new boolean[5];
?
Všechny obsahují false.
Z#328 Co obsahují prvky pole new boolean[0];
?
Žádné nemá.
Z#329 Co obsahují prvky pole new java.lang.Boolean[6];
?
Všechny obsahují null.
Z#330 Jakého typu je x, vypíše-li System.out.print(x) [[[email protected] ?
double[][] x anebo String x="[[[email protected]";
Z#331 Kterou metodou lze změnit již vytvořeného délku pole ?
Žádnou, neboť délka pole je final int.
Z#334 Co vše může způsobit výraz ( (new int[j])[j] ) je-li j typu short ?
Není-li hodnota j definována: chybu kompilace.
pro j< 0: java.lang.NegativeArraySizeException,
pro j>=0: java.lang.ArrayIndexOutOfBoundsException.
Z#336 Jak otestovat, zda Object x referuje pole dvourozměrné typu float ?
x instanceof float[] nebo
x.getClass().getName().startsWith("[[[email protected]")
Z#342 Jakého typu může být x v příkazu x=new int[3][5].getClass; //?
Object či Class či interfejsy třídy Class:
( Serializable, AnnotatedElement, GenericDeclaration, Type )
Z#343 Co znamená deprecated metoda ?
Metoda je funkční, leč nějak nevhodná, zastaralá apod. a může být
v další verzi API zrušena. Často bývá doporučována metoda lepší.
Z#346 Co znamená výraz p == r , kde p , r jsou reference.
Pro nekompatibilní typy dojde k syntaktické chybě,
pro true: reference odkazují na tentýž objekt nebo jsou null,
pro false: reference odkazují na dva různe objekty,
(mohou však být ekvivalentní či nikoli dle definice metody equals).
anebo jedna reference je null a druhá nikoli.
Z#347 Co znamená ekvivalence objektů a jak se realizuje ?
Ekvivalenci objektů definuje tvůrce třídy překrytím metody
boolean equals(T o) porovnávající hodnoty vybraných atributů.
Z#348 Co počítá a vrací metoda hashCode a jaký má smysl ?
Vrací int hešové číslo spatlané z hodnot zvolených atributů
objektu. Spatlání by mělo zajistit rovnoměrné rozdělení hešových čísel.
Z#349 Jak souvisejí metody equals(Object o) a hashCode() ?
Kontraktem, jenž požaduje shodnou hodnotu hashCode() pro objekty
ekvivalentní dle implementované metody equals().
Avšak pro neekvivaletní objekty nepožaduje různé hodnoty.
Z#350 Kde se v syntaxi užívá znak @ tzv. zavináč ?
V deklaraci a při užití anotace - např. @ Override
Z#351 Co je anotace a k čemu slouží ?
Speciální interfejs. Poskytuje dodatečné informace kompilátoru,
runtimu i návaznému software.
Z#352 Kde lze napsat @Override a co to znamená ?
Jen před metodu. Indikace zda metoda překrývá metodu předka.
Z#353 Co jsou enum a k čemu slouží ? Uveďte příklad.
Speciální třídy k definici typově bezpečných konstant.
public enum DAY { SUN, MON, TUE, WED, THU, FRI, SAT }
Může být definována jen ve statickém kontextu.
Nemůže být lokální.
Z#354 Co jsou vnořené (nested) a vnitřní (inner) třídy a kde se definují ?
Vnořené jsou statické, vnitřní ne. Definují se v tělech
tříd, interfejsů, anotací a výčtů.
Z#355 Jaký je rozdíl mezi vnořenou (nested) a vnitřní(inner) třídou ?
Vnořená je statická. Vnitřní je nestatická a je existenčně svázána
s objekty vnější třídy a může přímo přistupovat i k jejím instančním členům.
Z#356 Co je lokální třída a kde se může vyskytovat ?
Třída bez modifikátorů přístupu definovaná v těle metody či
či konstruktoru či v inicializátoru statickém nebo nestatickém.
Lokální třída není zvnějšku svého obalu přístupná.
Z#357 Co se skrývá za DDD, je-li new DDD().DDD() platným výrazem ?
První jméno bezparametrického konstruktoru třídy DDD.
Druhé jméno její bezparametrické metody ( procedury či funkce, statické či
nestatické, vlastní či zděděné ).
Jména metod uzančně začínají malým písmenem, ale kompilátoru je to jedno.
Z#358 Kde všude lze použít klíčové slovo default ?
V příkazu switch a v metodě-funkce v definici anotace.
Z#359 Co znamená konstrukce @A{} ?
Definici anotace.
Z#360 Co znamená konstrukce @_
//?
Anotace nějakého následujícího cíle anotací jménem _ .
Jméno _ je sice nevkusné, leč platné.
Z#361 Lze v těle konstruktoru definovat nějakou třídu ?
Ano, tzv. lokální třídu.
Lze to i v metodě či inicializátorech.
Z#362 Lze definovat uvnitř těla konstruktoru interface ?
Ne, neexistují tzv. lokální interfejsy.
Z#363 Kde všude se užívá klíčové slovo extends ?
Při definici třídy potomka třídy nebo interfejsu ptpmka interfejsu.
a také pro vymezení typového parametru např.: < ? extends List >
Z#364 Které znaky může obsahovat prosté jméno tj. identifikátor ?
Java letter ( Unicode písmena a dolar a podtržítko )
nebo Java digit ( Unicode číslice ) ne však na začátku.
Rozhoduje viz: java.lang.Character.isJava ...
Z#365 Jaké znaky obsahuje kvalifikované jméno oproti prostému jménu ?
Právě jednu tečku oddělující prostá jména.
Z#366 Která klíčová slova obsahuji alespoň jedno velké písmeno ?
Žádná.
Z#367 K čemu se typicky uzančně užívají písmena E T K V a co znamenají ?
Užívají se jako formální typové parametry ve smyslu
Element, Type, Key a Value.
Z#368 Kde všude se užívá symbol otazníku ?
V ternárním výrazu a ve vymezení typového parametru
např.: < ? > nebo < ? extends List >
Z#379 Jak se provádí rušení interfejsu ?
Výmazem z balíčku na disku.
Z#380 Co se stane class T implements AN { } // je-li AN anotace ?
Kompilátor navrhne modifikátor abstract anebo
konkretizaci metod - přinejmenším metodu annotationType(),
neboť každá anotace je interfejs.
Z#382 Lze v běhu měnit hodnotu prvku pole získaného z interfejsu - proč ano/ne ?
Ano, reference na pole je finální, ale final se nevztahuje jeho na prvky.
Z#383 Jak zajistit neměnnost hodnot prvků nějakého pole ?
Přístup k privátnímu poli umožnit jen prostřednictvím getru,
přičemž obé musí být definované ve třídě nikoli v interfejsu.
Např.: int getPrvek( int index ) { return pole[index]; }
Z#412 Co je singleton a jak vznikne ?
Objekt, který je jediný dané třídy v běhu aplikace/apletu.
Třída T má jen private konstruktory,
private final static T t = new T(); public static T getT(){return t;}
Z#413 Co jsou formální parametry a kde se vyskytují ?
Lokální proměnné definované v hlavičce metody/konstruktoru
platné jen v těle metody/konstruktoru, jímž se při volání
přiřazují hodnoty odpovídajících argumentů.
Z#414 Co jsou argumenty a kde se vyskytují ?
Hodnoty přiřazované formálním parametrům při volání metod
či konstruktorů.
Z#415 Jak lze aktivovat statický konstruktor ?
Přetěžko, neboť neexistuje.
Z#416 Jakými způsoby lze přistoupit ke statické proměnné ?
Zevně: Trida.promena, Interfejs.promenna
Zevnitř z metody/konstruktoru: promenna
Z#417 Jakými způsoby lze volat statickou metodu ?
Zevně: Trida.metoda(...), Interfejs.metoda(...)
Zevnitř z metody/konstruktoru: promenna
Z#427 Co je Observer, Observable a ImageObserver ?
Interfejsy z java.util.
java.awt.image
Z#433 Jaká je hodnota výrazu false < true ?
Výsledkem je syntaktická chyba.
Logické literály nejsou uspořádané.
Z#434 Co vytiskne příkaz System.out.println( !n );
Je-li n inicializované boolean/Boolean, pak její opak její hodnoty.
Jinak syntaktická chyba.
Z#439 Je Java čistý objektový jazyk ? Proč ano, proč ne ?
Není. Je však silně objektový ale kompromisní, neboť má primitivní
typy kompatibilní k hardware posledních dekád 20. století.
K praktickému překonání této dichotomie užívá obalové třídy
a autoboxing.
Z#440 Vyjmenujte obalové třídy (wrapped classes). K čemu slouží ?
Boolean, Byte, Short, Character, Integer, Long, Float, Double, Void.
Všechny jsou definované v java.lang.
K tvorbě objektů pro uschování hodnoty odpovídajícího primitivu.
A skladu metod (i statických) pro manipulace a konverze.
Z#441 Uveďte třídy mají ve svém jménu koncovku able / ible - ač by neměly ?
Throwable, Observable , neboť to nejsou interfejsy.
Z#442 Které interfejsy nemají někde ve svém jménu "able" (ač by měly)?
CharSequence, Collection, Map, Set, Observer, ***Listener
Z#443 Co je class literal ?
Výraz složený ze jména typu (včetně primitivů, polí a void)
a .class . Např.: Thread.class Runnable[].class, int[][].class
Z#444 Co je popisný objekt třídy ( class-object ) a jak se vytvoří ?
Objekt typu Class. Zavedením class-file do paměti a následným
linking, verification, preparation, resolution.
Z#481 Lze konstruktor označit modifikátorem native ?
Lze, ale kompilátor to odmítne zkompilovat.
Z#482 Lze nenativní metodu překrýt nativní ?
Ano, a i naopak.
Z#485 Jak se lze zbavit nechtěných metod v iterfejsu, které zdědil ?
Nelze a ani je nelze sabotovat - nemají tělo.
Z#486 Jak se zbavit nechtěných atributů, které třída zdědila ?
Lze je jen zastínit a privatizovat, čím nebudou vně
třídy přístupné.
Z#487 Jak se zbavit nechtěné metody, které třída zdědila ?
Zbavit se jí nelze - jen lze sabotovat její funkcionalitu
nejlépe takto: throw new UnsupportedOperationException("For ever.");
a uvedením této vyjímky v hlavičce a tím i v dokumentaci.
Z#488 Jaké je uzančně vhodné jméno: třídy, interfejsu, metody, proměnné ?
lat.: Substantivum, Adjektivum, verbum, substantivum.
čes.: PodstatnéJméno, PřídavnéJméno, sloveso, podstatnéJméno.
Z#489 Jaká vyjímka se vyhodí při přetečení po násobení v typu float ?
Žádná, neboť při operacích s type float resp. double
žádné Throwable nevznikají.
Z#490 Jaké výjimky se vyhodí při přetečení integrální aritmetiky ?
ArithmeticException a to jen při dělení nulou.
Při přetečení slučováním nebo násobení výjimka nevzniká.
Z#491 Jaká výjimka je vyhozena je-li operandem NaN nebo nekonečno ?
Žádná, výpočet pokračuje dále avšak jen s hodnotami
NaN nebo infinity.
Z#492 Které operace kterých typů způsobí výsledek NaN ?
Jen pro typ float či double:
- neurčitý výraz 0/0, 0*Infinity,
- konverze nečíselného řetězu na číslo.
Z#493 Co definuje norma IEEE 754 ?
Formáty a aritmetiku float a double.
Z#494 Jmenujte některé veřejné statické metody z API.
System: currentTimeMillis, exit, gc
Integer/Double: parse
Math: všechny
Thread: yield, currentThread, sleep, interrupted
Arrays/Collections: sort
Z#495 Jmenujte některé veřejné nativní metody.
getClass, wait, notify,
yield, currentThread, sleep, isAlive,
currentTimeMillis
Z#496 Jmenujte některé veřejné finální metody.
getClass, wait, notify,
isAlive, join
Z#497 Které metody mají všechny třídy ?
Generální metody zděděné od java.lang.Object .
equals, getClass, hashCode, toString, notify, notifyAll, wait
Z#498 Co udělá sekvence a^=b; b^=a; a^=b; a pro které typy ?
Vymění hodnoty mezi proměnými bez použití pomocné proměné
pro byte,short,int,long, char anebo boolean.
Z#500 K čemu jsou funkce floor a ceil ?
Patří do třídy Math, argument i hodnotu mají typu double,
floor [čili podlaha] vrací nejblizší nizší celé číslo typu double,
ceil [čili strop (ceiling)] vrací nejblizší vyšší celé číslo typu double.
Z#502 Může metoda překrývající hashCode( ) vyhodit kontrolovanou vyjímku ?
Ne, neb překrytá hashCode( ) nemá stigma, tj. throws list.
Z#507 Jaký druh tříd použijete k vytváření abstraktních objektů ?
Žádný, nelze vytvářet abstraktní objekty.
Z#508 Kde byla Java stvořena, kdy uveřejněna a kdo byl jejím předním autorem ?
Fa. SUN Microsystems, (SUN = Stanford University Network),
1995, James Gosling.
Z#518 Proč má abstraktní třída konstruktory, když neumí vytvářet objekty ?
Jen konkrétní potomci abstraktní třídy mohou vytvářet objekty.
Objekty však obsahují všechny nestatické atributy i všech
předků a tedy je třeba provést všechny konstruktory po dědičné linii,
nejdříve zdola nahoru volání super( ... ) až k java.lang.Object
a pak shora dolů pro inicializaci atributů.
Z#519 Jaké je logo Javy ?
Šálek horké, kouřící kávy - oblíbená droga pilných programátorů.
Z#521 Co je zapouzdření, k čemu slouží a jak se realizuje ?
Čili encapsulation, skrytí hodnot a implementací, což podporuje bezpečnost.
Použitím modifikátorů přístupu (private), interferfejsů a getrů/setrů.
Z#522 Jaký je rozdíl mezi finally{} a finalize( ) ?
1. je blok, případná část klauzule try-catch-finally.
2. je protected metoda v java.lang.Objectu, volaná před zrušením objektu.
Z#523 Co lze rozhodnout porovnáním hodnot hashCode() dvou objektů téže třídy ?
Lze rozhodnout, že jsou různé, ale nelze rozhodnout, že jsou stejné.
Stejnost určuje metoda equals(Object o).
Z#524 Co lze rozhodnout porovnáním hodnot hashCode() dvou objektů různých tříd ?
Záleží definici equals a hashCode() a jejich kontraktu.
Otázka má spíše smysl jen pro "blízké" třídy s týmiž rozhodnými atributy.
Z#525 Z čeho počítá java.lang.Object.hashCode() když Object nemá atributy ?
Z adresy alokace objektu. Neunikátní, patrně vždy > 0.
Z#526 Kam míří self mělkého klonu objektu class X impl. Cloneable {A self=this; ...} ?
Ke vzoru při mělkém klonování.
Z#531 K čemu slouží a kde je definována nestatická metoda newInstance() ?
Definována je v třídě Class. Vytvoří a vrátí objekt dle dané třídy.
Z#532 K čemu slouží a kde je definována statická metoda forName(String className) ?
Vrátí objekt typu Class, přičemž ho natáhne příslušný class-file do paměti.
Tedy popisný objekt třídy či interfejsu. Definována je v třídě Class.
Z#533 Co je finální blanková proměnná ? Může být statická či nestatická ?
Taková finální proměnná (tj. s modifikátorem final, leč není inicializovaná
ve své definici. Může být jak statická tak nestatická.
Avšak při kterékoli konstrukci objektu už musí být inicializovaná.
Z#534 Kde se inicializuje statická resp. nestatická finální blank proměnná ?
Statická: jen v jednom statickém inicializátoru.
Nestatická: jen v jednom nestatickém inicializátoru anebo v konstruktorech
tak, aby užitím kteréhokoli se proměnná inicializovala.
Z#536 Jaký je rozdíl mezi "is" a "has" ve vztahu dvou referečných typů ?
"is": jeden typ je podtypem druhého typu či týmž typem.
"has": jeden typ má atribut referující objekt druhého typu.
Z#537 Uveďte příklad vztahu "is" !
Např. Frame je Container, Frame je Serializable, Externalizable je
Serializable a tudiž lze přiřadit Container x = (Frame)null; apod.
Tj.: vede-li dráha od referenčního typu A k typu B, pak A "is" B.
Z#538 Uveďte příklad vztahu "has" !
class Point(){ int x,y; } či interface Plane{ Point orig = new Point(); }
Typ má definován atribut: bod má souřadnice, rovina má počátek souřadnic.
Z#545 Napište příklad použití standardní metody substring !
Vrací podřetěz dle indexů beginIndex počítaný od nuly a endIndex na znak,
který už netřeba. Přetížená funkce substring(beginIndex) vrací až do konce.
Z#546 Co vytiskne System.out.print( "ABC"+"DEF".substring(1) ); a proč ?
ABCEF neboť kvalifikátor (tečka) má vyšší priroitu než + konkatenace.
Z#547 Kde jsou definovány metody indexOf a co dělají ?
Vracejí index <0,length()-1> resp. <0,size()-1> nalezeného Objektu jinak -1.
java.lang: String, StringBuffer, StringBuilder ( String )
java.util: ArrayList, Vector, LinkedList
javax.swing: DefaultListModel
( <E> )
( <E> )
Z#555 Může mít [ne]statický inicializátor či konstruktor modifikátor synchronized ?
Ne. Netřeba: konstrukce objektu je synchronizována již v JVM.
V tělech mohou mít synchronizované bloky.
Z#556 Co se vypíše Object o=3.14; System.out.print(o.getClass().getName()); //?
java.lang.Double, neboť autoboxing zabalí double 3.14 do objektu typu Double.
Z#557 Jakou hodnotu bude mít d ? Object o=3.14; double d=o ;
Žádnou, je to syntaktická chyba, chybí přetypování double d=(Double)o;
Pak by unboxing zkopíroval hodnotu 3.14 do d;
Z#558 Co udělá for ( boolean b = false; false != true; b=true ) { m(b); } //?
Nekonečné volání metody m(). Poprvé s false, pak navždy s true.
K ukončení dojde jen vyhozením Throwable, exitem nebo zásahem zvnějšku.
Z#559 Co udělá příkaz for( ; ; ){ m(); } a co příkaz for ( : ) { m(); }
První nekonečný cyklus volání metody m() , druhý syntaktickou chybu.
Z#560 Je-li final String x="ab", y="a", z; z=y+"b"; jakou hodnotu má (x==z) //?
true, neboť y je finální a již kompilátor vyhodnotí z na napasuje na x.
x ani z nemusí být final. Pro nefinální y vyjde false, neb vzniknou 3 objekty.
Z#563 Lze překrýt vnitřní třídu ? Jak ano anebo proč ne ?
Ne: "překrývaná" i "překrývající" jsou v jiných třídách a tedy
jsou v jiných jmenných prostorech.
Z#571 Jak zjistíte zda Object o referuje matici primitivního typu ?
String s=o.getClass().getName(); a výrazu
s.startsWith("[[") && !s.startsWith("[[[") && !s.startsWith("[[L")
Z#572 Jakých typů může být proměnná z , aby nastal tisk: System.out.print(x == y == z); //?
Proměnná z musí být boolean či Boolean kvůli asociativitě zleva.
Z#573 Co udělá výraz new int[j] je-li j typu char ?
Není-li hodnota j definována: chybu kompilace, jinak vytvoří pole typu int[]
o délce dle hodnoty j (tj. 0 až 65535) vyplněné nulami.
Z#579 Co je třeba předznamenat, aby to vyšlo double y = exp(sin(PI/4)); //?
import static java.lang.Math.*;
Z#580 Co je vararg, kde a jak se definuje a k čemu se používá ?
Komfortní definice zápisu a volání posledního formálního parametru, který
je vyjádřen polem. Např.: void m( char c, Object ... o ) { /* code */ }
se volá např.: m( 'A', 1, "dva", 3 ); Pak pole o má tři prvky.
Z#582 Co vypíše System.out.print("abc" == new String("abc")); ?
false, porovnává se objekt v string poolu s objektem vytvořeným v runtime.
Z#584 Spustí se aplikace metodou public static void main(String ... x){} // proč ano/ne ?
Ano, je to ekvivalentní String[] přičemž na jménu parametru nezáleží.
Z#592 Kde lze užít klíčová slova this a super ?
Jen v nestatickém kontextu tj. v konstruktorech, metodách,
inicializátorech a inicializacich instančních atributů.
Z#593 Co je blank final proměnná ?
Neinicializovaná [ne]statická proměnná, která je inicializovaná právě jednou
v jednom [ne]statickém inicializátoru anebo při každé možné konstrukci objektu
při průchodu konstruktory třídy.
Z#600 Co způsobí static { System.exit( Integer.MIN_VALUE ); }
// ?
Když JVM inicializuje všechny statické atributy, provede předchozí statické
inicializátory. V tomto však JVM spáchá sebevraždu. V posledním tažení
vykřikne do proudu System.err: Java Result: -2147483648
Z#601 Co se stane: String q=null; System.out.println( q == true+q+false ); //?
Hodnota řetězu q bude truenullfalse a ta se vytiskne.
Z#602 Jaká je hodnota proměnné boolean b = ~ true; // ? Kde ~ je vlnovka tzv. tilda
Žádná, je to chyba. Tilda mění hodnoty bitů jen integrálních hodnot (tedy i char).
Z#604 Jak překrýt finální metodu metodou nefinální ?
To přece nejde.
Z#605 Jak překrýt konstruktor ?
To vůbec nejde, ježto se nedědí, takže není co překrývat.
Z#606 Kolik může mít abstraktní třída privátních konstruktorů ?
Libovolný počet.
Z#607 Kolik může mít interface třída privátních konstruktorů ?
Žádný privátní, ostatně ani jakýkoli jiný.
Z#608 Co se stane: // ?
# String z;
# switch (z="ABC") { default: throw new AssertionError(z); }
Vyhodí se java.lang.AssertionError: ABC
Z#609 Co vytiskne: System.out.println( " He said " hi! ". ") ; // ?
Chyba. Správně:
( " He said \" hi! \". ") ;
anebo trochu jinak:
( " He said ' hi! '. ") ;
Z#610 Co se stane public static void main(String...args){ main(); } // ?
Exception in thread "main" java.lang.StackOverflowError
**********************************************************************************
********
*
1
2
3
4
5
6
7
8
*
*12345678901234567890123456789012345678901234567890123456789012345678901234567890
123456789
* Připomínky, doplňky, návrhy, náměty apod. posílejte na [email protected]
**********************************************************************************
********
u#616 Co je PropertyBundle a co umožnuje ?
p#651
********************************** Pro budoucí rozšíření
*******************************
**** DALŠÍ NÁMĚTY:
*
IO Concurr GUI factory RMI Locale lokalita, NIO ?
*
Type params
*
String s="abcd"; char[] x=s.toCharArray(); x[2]='*';

Podobné dokumenty

JavaHelp

JavaHelp Součástí distribuce je pomocný program hsviewer (jar archiv uložený v adresáři demos/bin), kterým si lze vytvářenou nápovědu prohlížet – tj. při vytváření obsahu nápovědy není potřeba mít k dispozi...

Více

Hlavní dokument - Technologie společnosti Microsoft pro vývoj

Hlavní dokument - Technologie společnosti Microsoft pro vývoj Často nejsou vidět, ale přesto o nich všichni vývojáři vědí a jsou rádi, že je mají. Jsou zcela nezbytné pro stavbu rozsáhlých informačních systémů, pro tvorbu graficky bohatých a uživatelsky přívě...

Více

ZDE - JJ

ZDE - JJ Nastaví přesnost a zobrazování e

Více

taháci - Vrstevnice

taháci - Vrstevnice - obsahuje nestatické = instanční atributy primitivních nebo referenčních typů - vytváří se konstruktorem a event. nestatickými inicializátory - každý objekt je jedinečnou referencí popisující jeho...

Více

Open9X Manual CZ

Open9X Manual CZ Obsah Obsah..............................................................................................................................................2 Výstraha....................................

Více

F***************** JAQ Java Asked Questions v. 2.3 ***** pro Java 7

F***************** JAQ Java Asked Questions v. 2.3 ***** pro Java 7 F***************** JAQ Java Asked Questions v. 2.3 ***** pro Java 7 SE

Více